If-Anweisung in Konstruktor

Status
Nicht offen für weitere Antworten.

district

Mitglied
Hallo zusammen

Bin gerade mit BlueJ am Java lernen...

Da wir verlang in einen Konstruktor mittel if-Methode (ohne else) eine String Länge zu kontrollieren (Martikelnummer benötigt mind. vier Zahlen).

Geht das überhaupt, erhalte nämlich immer eine Fehlermeldung.

Auf google find ich nichts gescheites.

Soweit bin ich gekommen:
Code:
/**
     * Erzeuge einen neuen Studenten mit Name und Matrikelnummer.
     */
    public Student(String vollerName, String matrNr)
    {
        name = vollerName;
        matrikelnummer = matrNr;
        {if (matrikelnummer < 1000){
            System.out.println("Ihr Name muss mehr als vier Zeichen besitzen!");
        } 
    }
        scheine = 0; 
    }
 
M

maki

Gast
Setze deine geschweiften Klammern richtig, dann hole dir eine richtige IDE.
 

district

Mitglied
maki hat gesagt.:
Setze deine geschweiften Klammern richtig, dann hole dir eine richtige IDE.


Was meinst du mit IDE? Klammer hab ich nun geändert..

Code:
    /**
     * Erzeuge einen neuen Studenten mit Name und Matrikelnummer.
     */
    public Student(String vollerName, String matrNr)
    {
        scheine = 0;  
        name = vollerName;
        matrikelnummer = matrNr;{
            if (matrikelnummer < 1000){
            System.out.println("Ihr Name muss mehr als vier Zeichen besitzen!");
        }
    }
}


Mir wird folgendes falsch markiert:
if (matrikelnummer < 1000){[/code][/quote]
 

SchonWiederFred

Bekanntes Mitglied
Du kannst einen String und einen int nicht mit < vergleichen, das ergibt keinen Sinn.

Warum ist matrikelnummer überhaupt ein String? Warum nicht int?

Und warum taucht in der Fehlermeldung der "Name" auf, obwohl es doch die Matrikelnummer ist, die Probleme bereitet???
 

district

Mitglied
Code:
/**
     * Erzeuge einen neuen Studenten mit Name und Matrikelnummer.
     */
    public Student(String vollerName, String matrNr)
    {
        scheine = 0;  
        name = vollerName;
        matrikelnummer = matrNr;
            if (matrikelnummer < "1000"){
            System.out.println("Ihre Nummer muss mehr als vier Zeichen besitzen!");
        }
    }

Das mit Name war ein Tipp-Fehler.

Komme da auf keinen grünen Zweig... hab jetzt alles auf int gewechselt Fehlermeldung BlueJ:
operator < can not be applied to int

Wechsle ich alles auf String kommt die Meldung genau gleich einfach mit String.
 

SchonWiederFred

Bekanntes Mitglied
Hm? Also bei den formalen Parametern steht doch immer noch zweimal String. Poste mal den neuen Code.

Die Fehlermeldung ist immer noch irreführend. Wenn Du Zahlen ab 1000 erlaubst, dann muss man NICHT "mehr als vier Zeichen" sondern "mindestens vier Zeichen" zur Verfügung stellen.
 

district

Mitglied
Habs jetzt geändert inkl. Datenfelder

Code:
public class Student
{
    // der volle Name des Studierenden
    private String name;
    // seine Matrikelnummer
    private int matrikelnummer;
    // die Anzahl der bereits erworbenen Scheine
    private int scheine;

    /**
     * Erzeuge einen neuen Studenten mit Name und Matrikelnummer.
     */
    public Student(String vollerName, int matrNr)
    {
        scheine = 0;  
        name = vollerName;
        matrikelnummer = matrNr;
            if (matrikelnummer < 1000){
            System.out.println("Ihre Nummer muss mehr als vier Zeichen besitzen!");
        }
    }
 

district

Mitglied
danke für eure Hilfe.

Bei mir funktionierts auch... ausser das der folgende Code nun nicht mehr geht.

Aber werd ich wohl irgendwie raustüfteln.

Code:
    /**
     * Liefere den Login-Namen. Der Login-Name ist eine Kombination der
     * ersten vier Buchstaben des Namens mit den ersten drei Ziffern der
     * Matrikelnummer.
     */
    public String gibLoginName()
    {
        return name.substring(0,4) + matrikelnummer.substring(0,3);
    }
 

SchonWiederFred

Bekanntes Mitglied
Wenn Du in dem obigen Codefragment matrikelnummer durch String.valueOf(matrikelnummer) ersetzt, sollte es funktionieren. Alternativ kannst Du auch Integer.toString(matrikelnummer) verwenden.
 

district

Mitglied
Code:
 /**
     * Erzeuge einen neuen Studenten mit Name und Matrikelnummer.
     */
    public Student(String vollerName, int matrNr)
    {
        scheine = 0; 
        name = vollerName;
        matrikelnummer = matrNr;
            if (String.valueOf(matrikelnummer) < 1000){
            System.out.println("Ihre Nummer muss mehr als vier Zeichen besitzen!");
        }
    }

Fehlermeldung...

Oder müsste ich trotzdem irgendwie mit String arbeiten? Da ich den Name danach zusätzlich auch noch auf mind. 3 Zeichen kontrollieren muss.[/code]
 

district

Mitglied
Kann das Problem nicht mit length gelöst werden?

Code:
 if (matrikelnummer.length() < 1000){
 

SchonWiederFred

Bekanntes Mitglied
???

"Wenn Du in dem obigen Codefragment [...]", damit meine ich die Methode gibLoginName. Da wo der Fehler auftrat.

district hat gesagt.:
Kann das Problem nicht mit length gelöst werden?
Wenn matrikelnummer ein String ist, dann ja. Aber die Länge 1000 ist wohl ein bischen zu viel des guten...
 

district

Mitglied
jeeetz hab ichs glaub kapiert :D

Code:
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.
     */
    public Student(String vollerName, String matrNr)
    {
        scheine = 0; 
        name = vollerName;
        if (name.length() < 3){
            System.out.println("Ihr Name muss mehr als drei Zeichen besitzen!");
        }
        matrikelnummer = matrNr;
            if (matrikelnummer.length() < 4){
            System.out.println("Ihre Nummer muss mehr als vier Zeichen besitzen!");
        }
    }

Danke für eure/deine Hilfe :toll: [/code]
 

district

Mitglied
Ich komme nochmals mit nem Problem...

Code:
/**
     * Liefere den Login-Namen. Der Login-Name ist eine Kombination der
     * ersten vier Buchstaben des Namens mit den ersten drei Ziffern der
     * Matrikelnummer.
     */
    public String gibLoginName()
    {
        if (name.length() >= 3)
        {
            if (matrikelnummer.length() >= 4);
            {
                return (name.substring(0,4) + matrikelnummer.substring(0,3));
            }
        }
        else{
            if (name.length() < 3){
                if (matrikelnummer.length() < 4);
                {
                    return name + matrikelnummer;
                }
            }
        }
    }
Erhalte immer ein missing return statement... Kann das darin liegen das ich zwei returns in die Methode gepackt habe?
 

tfa

Top Contributor
Nein. Du hast nicht alle möglichen Fälle berücksichtigt.
Wenn z.B. name.length() >= 3 und matrikelnummer.length() < 4 wird kein return ausgeführt.
 

district

Mitglied
Das wären ja alle Möglichkeiten und trotzdem erhalte ich nen Fehler... kann ich das Ganze nicht irgendwie kürzer fassen?



Code:
    /**
     * Liefere den Login-Namen. Der Login-Name ist eine Kombination der
     * ersten vier Buchstaben des Namens mit den ersten drei Ziffern der
     * Matrikelnummer.
     */
    public String gibLoginName()
    {
        if (name.length() >= 3)
        {
            if (matrikelnummer.length() >= 4);
            {
                return (name.substring(0,4) + matrikelnummer.substring(0,3));
            }
        }
        else{
            if (name.length() < 3){
                if (matrikelnummer.length() < 4);
                {
                    return name + matrikelnummer;
                }
            }
             if (name.length() < 3){
                if (matrikelnummer.length() >= 4);
                {
                    return name + matrikelnummer;
                }
            }
            if (name.length() >= 3){
                if (matrikelnummer.length() < 4);
                {
                    return name + matrikelnummer;
                }
            } 
        }
    }
 

Der Müde Joe

Top Contributor
meinst du so?

Code:
public class Student {
	// der volle Name des Studierenden
	private String name;
	// seine Matrikelnummer
	private int matrikelnummer;
	// die Anzahl der bereits erworbenen Scheine
	private int scheine;

	/**
	 * Erzeuge einen neuen Studenten mit Name und Matrikelnummer.
	 */
	public Student(String name, int matrikelnummer) {
		if (matrikelnummer < 1000) {
			throw new IllegalArgumentException("Matrikelnummer zu klein: " + matrikelnummer);
		}
		this.name = name;
		this.matrikelnummer = matrikelnummer;
		this.scheine = 0;
	}

	public String getLogin() {
		String mat = "" + matrikelnummer;
		if (name.length() > 4) {
			return name.substring(0, 4) + mat.substring(0, 3);
		} else {
			return this.name + mat;
		}
	}
}
 

district

Mitglied
hab gehofft dies Funktion geht.. aber leider auch nicht !?

Code:
        /**
     * Liefere den Login-Namen. Der Login-Name ist eine Kombination der
     * ersten vier Buchstaben des Namens mit den ersten drei Ziffern der
     * Matrikelnummer.
     */
    public String gibLoginName()
    {
        if (name.length() >= 3)
        {
            if (matrikelnummer.length() >= 4);
            {
                return (name.substring(0,4) + matrikelnummer.substring(0,3));
            }
        }
        else {
            if ((name.length() < 3) && (matrikelnummer.length() < 4)) || ((name.length() < 3) && (matrikelnummer.length() >= 4)) || ((name.length() >= 3) && (matrikelnummer.length() < 4)))
            {
                return name + matrikelnummer;
            }
        }
    }
 

0x7F800000

Top Contributor
jede denkbare zweig muss einfach nur mit "return" enden das ist alles

Code:
if(...){
  if(...){
    return x;
  }else if(...){
    return y;
  }else{               //  <------------ in jedem zweig muss es am ende else geben, in dem etwas zurueckgegeben wird!!!
    return z;
  }
}else{
   if(...){
      return u;
   }else if(){
      return v;
   }else{ //  <---------------- hier auch
      if(){
           return v2;
      }else{
           if(){
                return v31;
           }else{
                if(){
                     return v311;
                }else if(){
                     return v312;
                }else{  // <------------------------------------- immer ein else, egal wie tief verzweigt!
                     return v313;
                }
           }
       }
   }
}

sorg einfach dafuer, dass in jedem fall etwas zurueckgegeben wird, dann kompilliert es fehlerfrei. Wenn du keine Lust darauf hast, bau ganz am ende in allerletzten zeile deiner Funktion folgendes ein:

Code:
return "FEHLER! Sie haben einen viel zu verkrüppelten Namen, und können sich deshalb nicht einloggen. Pech gehabt!";

Dann kompiliert es sicherlich^^ :D
 
G

Gast

Gast
Kurz ausgedrückt, was passiert, wenn beide deine if-Anweisungen nicht erfüllt sind?! Nichts und deshalb der Fehler entweder du machst zu jedem if ein else mit return oder du definierst ein lokales Objekt vom Typ String am Anfang der Methode mit und setzt den Wert innerhalb der if-Anweisungen oder gibst eben am ende einen leeren String zurück
 

district

Mitglied
Vielen Dank für eure Hilfe...

manchmal muss man nur eine Nach darüber schlafen :-D

Code:
        /**
     * Liefere den Login-Namen. Der Login-Name ist eine Kombination der
     * ersten vier Buchstaben des Namens mit den ersten drei Ziffern der
     * Matrikelnummer.
     */
    public String gibLoginName()
    {
        if (((name.length() < 3) && (matrikelnummer.length() < 4)) || ((name.length() < 3) && (matrikelnummer.length() >= 4)) || ((name.length() >= 3) && (matrikelnummer.length() < 4)))
        {
            return name + matrikelnummer;
        } 
        else
        {
            return name.substring(0,4) + matrikelnummer.substring(0,3);
        }
    }
 

Der Müde Joe

Top Contributor
>((name.length() < 3) && (matrikelnummer.length() < 4))

dieser Fall existiert nicht, da die Matrikelnummer immer >1000 ist, also lenth 4+

>((name.length() < 3) && (matrikelnummer.length() >= 4))

dies ist immer so, wenn name.length() < 3, da ja die Nummer >1000
also ist das && überflüssig

>((name.length() >= 3) && (matrikelnummer.length() < 4))

(matrikelnummer.length() < 4) sollte es nicht geben, da >1000

um dies zu garantieren, muss eben die IllegalArgumentException in den Konstruktor
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T If anweisung Java Basics - Anfänger-Themen 5
C Scanner und If-Anweisung in Kombi Java Basics - Anfänger-Themen 3
Fats Waller Compiler-Fehler Kann ich einen String und die Summe zweier Char Werte mittels der println Anweisung ausgeben Java Basics - Anfänger-Themen 4
AlexVo String zu Java Anweisung getString("*** java code ***") Java Basics - Anfänger-Themen 19
R Wie würde hier die if-Anweisung aussehen? Java Basics - Anfänger-Themen 18
B break Anweisung Java Basics - Anfänger-Themen 13
C Wie kann ich einen User Input mit einer If-Anweisung verbinden? Java Basics - Anfänger-Themen 5
T Not a Statement/Illegal Start of expression bei for Anweisung Java Basics - Anfänger-Themen 6
H Cäsar chiffrierung ohne if-Anweisung Java Basics - Anfänger-Themen 5
D kann man vor dem CSVRecord, replace Anweisung anwenden ? Java Basics - Anfänger-Themen 2
B Erste Schritte if Anweisung mit Wert Übernahme Java Basics - Anfänger-Themen 3
C Anweisung Java Basics - Anfänger-Themen 11
C HashMap - alle keys haben values der letzten put-Anweisung Java Basics - Anfänger-Themen 3
W Warum funktioniert meine if Anweisung nicht? Java Basics - Anfänger-Themen 8
K if Anweisung Java Basics - Anfänger-Themen 3
W Erste Schritte Warum funktioniert mein Programm nicht ? ~if Anweisung~ Java Basics - Anfänger-Themen 4
V Erste Schritte Warum geht meine continue Anweisung nicht? Java Basics - Anfänger-Themen 8
DaCrazyJavaExpert [SQL] SQL als Anweisung mit Spezial-Fall EclipseEclipse Java Basics - Anfänger-Themen 8
J If Anweisung in Schleife einbinden Java Basics - Anfänger-Themen 7
JavaNewbie2.0 Zur Anweisung zurück Java Basics - Anfänger-Themen 13
J Erste Schritte Vorsicht Spaghetti-Code! Wie verschachtel ich meine If-Anweisung??? Java Basics - Anfänger-Themen 4
L if-Anweisung Java Basics - Anfänger-Themen 5
DontFeedTheTroll Erste Schritte Verständnisfrage zu If-Anweisung Java Basics - Anfänger-Themen 7
P Erste Schritte Taschenrechner mit if-else Anweisung Java Basics - Anfänger-Themen 6
Q Variablen If Anweisung, kleiner fehler Java Basics - Anfänger-Themen 8
M Probleme mit Anzeigen von String in GUI und if-Anweisung Java Basics - Anfänger-Themen 9
L If Anweisung mit ArrayList Probleme Java Basics - Anfänger-Themen 6
OlafHD String in einer If-Anweisung Vergleichen Java Basics - Anfänger-Themen 2
N Rekursion mit if-Anweisung Java Basics - Anfänger-Themen 10
P if anweisung Java Basics - Anfänger-Themen 8
L Frage zur while Anweisung Java Basics - Anfänger-Themen 10
F Return-Anweisung Java Basics - Anfänger-Themen 2
B If-anweisung per ja eingabe. Java Basics - Anfänger-Themen 2
C Variablen if Anweisung falsch gesetzt Java Basics - Anfänger-Themen 4
1 Bei if-Anweisung: Syntax error on token Java Basics - Anfänger-Themen 5
A for-Schleife, if-Anweisung Java Basics - Anfänger-Themen 4
A if - Anweisung Java Basics - Anfänger-Themen 6
R Erste Schritte Schleife erzeugen (mit If Anweisung) Java Basics - Anfänger-Themen 3
P Bei Switch-Anweisung wird default-Anweisung angezeigt Java Basics - Anfänger-Themen 4
M if, else Anweisung Java Basics - Anfänger-Themen 3
O This in switch anweisung Java Basics - Anfänger-Themen 5
M Throws Anweisung innerhalb eines Methodenkopfes unklar Java Basics - Anfänger-Themen 4
F Erste Schritte Switch case vs. Verschachtelte If Anweisung Java Basics - Anfänger-Themen 11
M If-Anweisung (Objekt nachdem es gegessen wurde, mehrmals auftauchen lassen) Java Basics - Anfänger-Themen 3
F Fehler in der Swich-Anweisung aber Warum? Java Basics - Anfänger-Themen 4
A if-Anweisung zwischen zwei Punkten Java Basics - Anfänger-Themen 1
T Problem mit IF-Anweisung. Java Basics - Anfänger-Themen 3
B Erste Schritte Addition von double in switch-Anweisung Java Basics - Anfänger-Themen 2
W return-Anweisung gibt nichts aus Java Basics - Anfänger-Themen 5
H Leere Anweisung Java Basics - Anfänger-Themen 24
S Methoden Return Anweisung beendet Methode nicht, stattdessen wird diese zweimal durchlaufen Java Basics - Anfänger-Themen 3
F Reset in der switch Anweisung Java Basics - Anfänger-Themen 3
V Frage zur IF Anweisung Java Basics - Anfänger-Themen 40
Bluedaishi Klassen Thread über if Anweisung starten und von anderer Klassen über Button Beenden Java Basics - Anfänger-Themen 34
H Worauf bezieht sich die erste else-Anweisung Java Basics - Anfänger-Themen 9
H Verständnisfrage für oder Anweisung Java Basics - Anfänger-Themen 8
D Denkfehler in der If-Anweisung Java Basics - Anfänger-Themen 3
K if anweisung Java Basics - Anfänger-Themen 13
M Erste Schritte Break-Anweisung bei if-else Java Basics - Anfänger-Themen 6
T Erste Schritte switch case Anweisung und if else Verzweigungen? Java Basics - Anfänger-Themen 6
S probleme mit der return anweisung Java Basics - Anfänger-Themen 20
K Methoden while Anweisung Java Basics - Anfänger-Themen 81
D Frage zu der import Anweisung in Java Java Basics - Anfänger-Themen 15
K Wann genau brauche ich die Anweisung gleich null? Java Basics - Anfänger-Themen 10
W "switch" Anweisung - Rechenzeichen? Java Basics - Anfänger-Themen 5
I Methoden Wochenkalendar switch anweisung fehlt Java Basics - Anfänger-Themen 4
D Verschachtelte IF-Anweisung Java Basics - Anfänger-Themen 10
C If-Anweisung Java Basics - Anfänger-Themen 22
C Switch Anweisung Frage Java Basics - Anfänger-Themen 8
M Bedingte Anweisung mit Boolean Java Basics - Anfänger-Themen 2
Luk10 Frage zu Switch-Anweisung Java Basics - Anfänger-Themen 11
C Umgebungsvariable import anweisung gibt fehlermeldung Java Basics - Anfänger-Themen 2
A if Anweisung in Schleife Java Basics - Anfänger-Themen 10
C Erste Schritte switch Anweisung geht nicht Java Basics - Anfänger-Themen 3
R fif-Anweisung funktioniert nicht wie erwartet Java Basics - Anfänger-Themen 11
B IF-Anweisung hat einen Fehler Java Basics - Anfänger-Themen 5
C unklare anweisung Java Basics - Anfänger-Themen 11
F if Anweisung mit Rückgabewert? Java Basics - Anfänger-Themen 4
C Problem bei if-anweisung Java Basics - Anfänger-Themen 8
J print-Anweisung verschluckt Java Basics - Anfänger-Themen 3
K return-Anweisung am Beispiel eines Palindroms Java Basics - Anfänger-Themen 18
F Problem bei if-Anweisung Java Basics - Anfänger-Themen 5
J Switch mit if anweisung kombinieren Java Basics - Anfänger-Themen 2
D Frage zu Exceptions und der import Anweisung Java Basics - Anfänger-Themen 12
R Return Anweisung übergibt Variablen nicht Java Basics - Anfänger-Themen 4
W Problem While-Anweisung Java Basics - Anfänger-Themen 6
S import - Anweisung; Setzen der Classpath Java Basics - Anfänger-Themen 2
E IF Anweisung mit logischen Operatoren Java Basics - Anfänger-Themen 18
B problem mit der return anweisung Java Basics - Anfänger-Themen 11
M '-1' in switch anweisung Java Basics - Anfänger-Themen 2
B import Anweisung Java Basics - Anfänger-Themen 2
A Super-Anweisung in abstrakter Klasse Java Basics - Anfänger-Themen 12
T Schleife mit return Anweisung Java Basics - Anfänger-Themen 3
S OOP This anweisung Java Basics - Anfänger-Themen 6
B fehlende return anweisung? Java Basics - Anfänger-Themen 17
A Return Anweisung von Methoden Java Basics - Anfänger-Themen 15
L Verstehe den Wert nicht! If-Anweisung Java Basics - Anfänger-Themen 5
J Was genau davon ist Anweisung, was Deklaration? Java Basics - Anfänger-Themen 2
S SQL Anweisung mittels PreparedStatement Java Basics - Anfänger-Themen 15
L if else anweisung Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben