if-Anweisungen

Status
Nicht offen für weitere Antworten.
M

Mauserl

Gast
Hallo Leute,

ich versuch mich erst seit kurzem in Java, hatte auch bisher keine Start-Probleme.
Auch bei meinem Problem hab ich die Funktionen gecheckt aber ich kann folgende Codes in BlueJ einfach nicht übersetzen. Es kommt die Meldung : illegal start of expression.

Liegt wahrscheinlich an dem Teil: public String gibLoginName()

Irgendwie hat sich da ein kleiner Fehler eingeschlichen den ich nicht finde und das macht mich wahnsinnig.
Schon als Anfänger betriebsblind oje .... :###

Ich hoffe es kann jemand helfen. Danke schon im voraus.

LG Mauserl

Code:
/**
 * Diese Klasse definiert Studenten in einem Uni-Verwaltungssystem.
 * Sie beschreibt die Details von Studenten, die für unseren Kontext 
 * relevant sind.
 * 
 * @author  Michael Kölling und David J. Barnes
 * @version 1.0  (3. Januar 2003)
 */
public class Student
{
    // der volle Name des Studierenden
    private String name;
    // seine Matrikelnummer
    private String matrikelnummer;
    // die Anzahl der bereits erworbenen Scheine
    private int scheine;

    /**
     * Erzeuge einen neuen Studenten mit Name und Matrikelnummer.
     * Wenn weniger als 4 Buchstaben und weniger als 3 Ziffern eingegeben werden
     * gib eine Warnung aus, führe die Eingabe aber trotzdem durch.
     */
     public Student(String vollerName, String matrNr)
    {
        if (vollerName.length()<4)
        {
        System.out.println("Bitte geben Sie mindestens einen vier-stelligen Namen ein!"); 
        }
        if  (matrNr.length()<3)
        {
        System.out.println("Bitte geben Sie mindestens eine drei-stellige Matrikelnummer ein!");
        }
       
        name = vollerName;
        matrikelnummer = matrNr;
        scheine = 0;
    
    }


    /**
     * Liefere den vollen Namen dieses Studenten.
     */
    public String gibName()
    {
        return name;
    }

    /**
     * Trage einen neuen Namen ein.
     */
    public void nameAendern(String neuerName)
    {
        name = neuerName;
    }

    /**
     * Liefere die Matrikelnummer dieses Studenten.
     */
    public String gibMatrikelnummer()
    {
        return matrikelnummer;
    }

    /**
     * Erhöhe die Anzahl der erworbenen Scheine.
     */
    public void erhoeheScheinanzahl(int weitereScheine)
    {
        scheine += weitereScheine;
    }

    /**
     * Liefere die Anzahl der bereits erworbenen Scheine.
     */
    public int gibScheinanzahl()
    {
        return scheine;
    }

   /**
     * Liefere den Login-Namen. Der Login-Name ist eine Kombination der
     * ersten vier Buchstaben des Namens mit den ersten drei Ziffern der
     * Matrikelnummer. 
     * Wenn keine vier Buchstaben eingegeben wurden liefere 
     * einfach die eingegeben Buchstaben ab, wenn mehr als 4 Buchstaben eingegeben
     * wurden dann berschränke den Buchstaben-Teil im Login-Namen auf die ersten 4 Ziffern.
     * Wenn keine drei Ziffern eingegeben wurden liefere 
     * einfach die eingegeben Ziffern ab, wenn mehr als 3 Ziffern eingegeben
     * wurden dann berschränke den Ziffern-Teil im Login-Namen auf die ersten 3 Ziffern.
     */
    public String gibLoginName()
    
    {
    if (name.length()<4){
        return name;
        }
    else{
    return name.substring(0,4);
    }
    
    {
    if (matrikelnummer.length()<3){
        return matrikelnummer;
    }
    else{
        return matrikelnummer.substring(0,3);
    }
    }
    
    /**
     * Gib Name und Matrikelnummer auf der Konsole aus.
     */
    public void ausgeben()
    {
        System.out.println(name + " (" + matrikelnummer + ")");
    }
}
 
B

Beni

Gast
Würdest du das ganze sauber einrücken, würde der seltsame Code besser auffallen:
Code:
    public String gibLoginName(){
        if (name.length()<4){
            return name;
        }
        else{
            return name.substring(0,4);
        }
   
        {
            if (matrikelnummer.length()<3){
                return matrikelnummer;
            }
            else{
                return matrikelnummer.substring(0,3);
            }
    }
Ich nehme mal an, da fehlt ein "public Strin getMatrikelNummer()"...
 
M

Mauserl

Gast
public String gibMatrikelnummer() ist doch drin.

Also daran liegts höchstwahrscheinlich nicht... :###
 
G

Guest

Gast
glaub eher dass es irgendwie an den {} Klammer bei der Login-Name-if-Anweisung ganz unten liegt.

Irgendwie passt wohl irgend ne Klammer nicht oder ein Schreibfehler???
 

Murray

Top Contributor
Es sieht so aus, als wäre in gibLoginName() ein irrtümlich eine Codesequenz hineinkopiert worden, die eigentlich in getMatrikernummer() gehört: die Zeilen 103-110 habe dort nicht verloren, sondern könnten wohl die Zeilen 62-64 ersetzen.
 

Murray

Top Contributor
Also etwa so
Code:
public String gibLoginName() {
	if (name.length()<4){
		return name;
	} else{
		return name.substring(0,4);
    }
}
 
public String gibMatrikelnummer() {
	if (matrikelnummer.length()<3){
		return matrikelnummer;
	} else { 
		return matrikelnummer.substring(0,3);
    }
}
 
M

Mauserl

Gast
Sorry Murray aber da irrst du...

Der Login-Name setzt sich sich aus den 4 ersten Buchstaben des Namens und den ersten 3 ersten Ziffern der Matrikelnummer zusammen. z.B. Fred123

Der Code ist OK.

Jetzt soll er aber wenn jemand nur z.B. 2 Buchstaben(Fr) und 1 Ziffer (1) eingibt keinen Abbruch machen sondern dann halt das Ausgeben was eingegeben wurde ==> Fr1

und das klappt nicht weil BlueJ es nicht übersetzen kann, wegen es klitzekleinen Fehlers wie ich vermute
 

Murray

Top Contributor
Stimmt, das hast Du im Kommentar ja auch geschrieben. :oops:
Leider ist die Methode so nicht implemtiert: es wird nur die Länge des Namens ausgewertet und dann entweder der ganze String oder eben nur die ersten vier Zeichen zurückgegeben; sowohl im if- als auch im else Zweig steht ja ein return, so dass die Methode hier verlassen wird.

Soll es evtl. so aussehen:
Code:
public String gibLoginName() {

	String Builder sb = new StringBuilder();
	if (name.length()<4){
		sb.append( name);
	} else{
		sb.append( return name.substring(0,4));
   }

 
	if (matrikelnummer.length()<3){
		sb.append( matrikelnummer);
	} else { 
		sb.append( matrikelnummer.substring(0,3));
    }
	
	return sb.toString();
}
 

SnooP

Top Contributor
Fazit: Fehler lag an der Klammerung... jede geschweifte Klammer, die aufgemacht wird, muss auch entsprechend wieder zugemacht werden... danach kann man durchzählen... hilfreich sind dabei Editoren, die beim Schreiben die Klammern entsprechend hervorheben, wenn man mit dem Cursor an ihnen vorbeizieht... häufig gibts auch ne Tastenkombination (strg+m) mit der man zugehörige Klammern aufdecken kann.

Vorsicht mit obigem Code bei Javaversionen unter 1.5 ... den StringBuilder gibts da noch nicht - da könntest du den StringBuffer benutzen, der funktioniert genauso...

oder du benutzt die String-Konkatenation mit + ... sprich:
String s = "";

Code:
if...
   s += name;   //s = s + name;   //"string1 "+"string2" --> "string1 string2"
else
   s+= name.substring(0,4);
//...

Mit dem Hinweis, dass dies weniger schnell ist - für den Anfänger aber evtl. ausreichend... (intern wird dabei der oben genannte StringBuffer genutzt).
 

Murray

Top Contributor
Die Fallunterscheidungen bzgl. der Länge braucht man ja eigentlich auch nur als Optimierung, weil man dann die substring()-Operation und die Erzeugung des neuen Strings spart. Wenn so eine Methode nicht gerade in einer performance-kritischen Sequenz steckt, kann man sich das auch sparen:
Code:
return name.substring( 0, Math.min( name.length(), 4)) + matrikelnummer.substring( 0, Math.min( matrikelnummer.length(), 3));
 

Murray

Top Contributor
Mauserl hat gesagt.:
...kan mir denn keiner mehr helfen :cry:
Was SnooP und ich geschrieben haben, hat Dir also nicht geholfen? Bist Du weiterhin der Meinung, in gibLoginName() sei die Klammerung OK?

Ich lasse die Formatierung mal so eigenartig wie sie war und ergänze nur ein paar Kommentare
Code:
public String gibLoginName()
   
    { //-- hier beginnt der Methodenkörper von gibLoginName
    if (name.length()<4){ //--- hier beginnt der 1. if-Zweig
        return name;
        } //--- hier endet der 1. if-Zweig
    else{ //--- hier beginnt der 1. else-Zweig
    return name.substring(0,4);
    } //--- hier endet der 1. else-Zweig
   
    //-- ab hier steht "unreachable code", was ohnehin zu einem Compile-Fehler führt
 
   { //--- diese Klammer ist sinnfrei und Ursache des Fehlers
    if (matrikelnummer.length()<3){ //--- hier beginnt der 2. if-Zweig
        return matrikelnummer;
    } //--- hier endet der 2. if-Zweig
    else{ //--- hier beginnt der 2. else-Zweig
        return matrikelnummer.substring(0,3);
    } //--- hier endet der 2. else-Zweig
    } //--- hier soll eigentlich der Methodenkörper von gibLoginName enden; wegen der
	  //--- überflüssigen Klamemr oben tut er das aber nicht
	
	/**
     * Gib Name und Matrikelnummer auf der Konsole aus.
     */
    public void ausgeben() //--- wegen der überfl. Klammer steht diese Deklaration noch 
	                       //--- innerhalb des Methodenkörpers von gibLoginName, was die
                           //--- Fehlermeldung verursacht						   
    { 
	
	(...)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Sind unten stehende Anweisungen kompilierbar? Java Basics - Anfänger-Themen 7
M Java Anweisungen Java Basics - Anfänger-Themen 4
S Anweisungen verstehen System.out.print/println Java Basics - Anfänger-Themen 2
D Können if Anweisungen aufeinander aufbauen? Java Basics - Anfänger-Themen 1
H ERGÄNZUNGSFRAGE: Klammersetzung bei if-else Anweisungen und Schleifen Java Basics - Anfänger-Themen 2
P Java Verketten von Stream - Bedeutung der Anweisungen? Java Basics - Anfänger-Themen 3
J 2 "while"-Anweisungen in einer do-Schleife? Java Basics - Anfänger-Themen 4
V Einem JButton anweisungen geben Java Basics - Anfänger-Themen 4
S Erste Schritte Verkettung von Anweisungen Java Basics - Anfänger-Themen 4
T Java verschiedene Anweisungen Java Basics - Anfänger-Themen 23
R else if anweisungen Java Basics - Anfänger-Themen 2
O Erste Schritte Eingabe anweisungen eliminieren Java Basics - Anfänger-Themen 3
J Mehrere IF Anweisungen und dazugehörige ELSE Java Basics - Anfänger-Themen 6
J BlueJ und import-Anweisungen, wie geht das? Java Basics - Anfänger-Themen 4
A instanceof-if-else-Anweisungen eleganter lösen Java Basics - Anfänger-Themen 5
? Klassen Verständnisprobleme mit Import Anweisungen Java Basics - Anfänger-Themen 6
L Frage zu If-Anweisungen Java Basics - Anfänger-Themen 3
OnDemand Package Anweisungen Java Basics - Anfänger-Themen 3
S Verständnisfrage zu Anweisungen und deren Wirkung Java Basics - Anfänger-Themen 7
S Anweisungen Ausdrücke Java Basics - Anfänger-Themen 7
B Anzahl if anweisungen nicht bekannt Java Basics - Anfänger-Themen 3
V Methoden Schleifeninvariante Assert Anweisungen Java Basics - Anfänger-Themen 6
P if Anweisungen komprimieren Java Basics - Anfänger-Themen 6
G JTextField() Anzeige - if-Anweisungen Java Basics - Anfänger-Themen 2
J verschiedene Anweisungen bei verschiedenen Zuständen Java Basics - Anfänger-Themen 9
R return Anweisungen und Array Elemente löschen Java Basics - Anfänger-Themen 6
C OOP if Anweisungen Java Basics - Anfänger-Themen 24
E If - Anweisungen Java Basics - Anfänger-Themen 4
E Verschachtelte If-Anweisungen - "else without if" Java Basics - Anfänger-Themen 4
G Exceptionfreie Anweisungen in try-catch-Blöcke, Java Basics - Anfänger-Themen 6
S Umsetzung von verschiedenen Anweisungen Java Basics - Anfänger-Themen 8
T Erstellen eines Steuerprogramms mittels if-anweisungen Java Basics - Anfänger-Themen 10
T Werden import Anweisungen nicht vererbt? Java Basics - Anfänger-Themen 3
F Kann ein Problem bei Anweisungen nicht lösen Java Basics - Anfänger-Themen 4
J Klammersetzung bei if-else Anweisungen und Schleifen Java Basics - Anfänger-Themen 13
B variable deklaration und wert speichern in 2 anweisungen? Java Basics - Anfänger-Themen 20
T Import-Anweisungen Java Basics - Anfänger-Themen 10
D Anweisungen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben