Methoden Verschachtelte if else Methode

Hi Leute,

ich bin ganz neu eingestiegen in Java und arbeite gerade an einem kleinen "Fragebogen" um mich mit der Verschachtelung von if else auseinander zu setzen.

Ich hab jetzt ein kleines Problem, dass sich auch nach Tagen nicht so richtig lösen lässt. Vielleicht könntet ihr mir da helfen ?

Code:
import java.util.*;

public class WoM4
{
    public static void main(String[] args)
    {
        System.out.println("Meine Damen und Herren!");
        System.out.println("Hiermit werden wir herausfinden");
        System.out.println("was wir zusamme machen können!");
        System.out.println("Dafür werden Sie nur einige wenige Eingaben machen müssen!");
        System.out.println("Bitte antworten Sie so ehrlich wie möglich, oder garnicht.");
        System.out.println("Wir wollen schließlich keine Zeit verschwenden!");
        System.out.println("Erste Frage, sind sie m oder w?");
       
        Scanner scan = new Scanner(System.in);
        String antwort;
        antwort = scan.nextLine();

if (antwort.equals("w") || antwort.equals("weiblich") || antwort.equals("W") || antwort.equals("Weiblich") || antwort.equals("Ich bin weiblich"))  //GESCHLECHT
    {  //if w Anfang
   
{    System.out.println("Herzlichen Glückwunsch, sie sind weiblichen Geschlechts!");
    System.out.println("Verraten sie mir, wie alt Sie sind?");
}
int zahl;
zahl = scan.nextInt();

    if (zahl<18)
    { System.out.println("Leider bist du zu jung für mich, aber wenn wir");
    System.out.println( + (18-zahl) + " Jahre warten, dann können wir, du weißt schon was! Zwinker Zwinker!");
    }
    else if (zahl>=18 && zahl<=39)
            {    System.out.println("Perfekt! Also ersteinmal machen wir schlabber schlabber und dann knackiknacki! Zwinker!");
           
            }
       
    else if (zahl >= 40 && zahl <=69 )
            {    System.out.println("Tut mir leid. Ich bin Ihnen eh zu unreif. Aber Sie können mir gerne die Nummer");
            System.out.println("ihrer Tochter oder ihrer bis 39-Jährigen Schwester geben!");
            }
       
    else if (zahl >=70)
            {    System.out.println("Ich freue mich mit Ihnen Kekse zu backen!");
            }
   
    }  //if w Ende

if (antwort.equals("m") || antwort.equals("männlich") || antwort.equals("M") || antwort.equals("Männlich") || antwort.equals("Ich bin männlich"))    //GESCHLECHT_1.1
    { //if m Anfang
   
{    System.out.println("Sehr gut! Sie sind männlichen Geschlechts.");
    System.out.println("Verraten Sie mir wie alt Sie sind?");
}
int zahl;
zahl = scan.nextInt();

    if (zahl<18)
    {    System.out.println("Schade! Du bist zu jung. Aber wenn du");
    System.out.println(+(18-zahl)+" Jahre wartest, können wir gerne ein Bierchen trinken gehen!");
    }
    else if (zahl>=18 && zahl <=39)
    {    System.out.println("Lass uns weiber abschleppen und ein Bierchen trinken gehen!");
    }
    else if (zahl >=40 && zahl <=69)
    {    System.out.println("Ich wäre sehr geehrt, wenn Sie mir beizeiten ein wenig Ihrer Frauen-Aufreiss-Techniken beibringen würden! Auf ein Getränk Ihrer Wahl.");
    }
    else if (zahl >=70)
    {    System.out.println("Ich wäre geehrt mit Ihnen ein Cognac trinken zu dürfen!");
    }
   
    } //if m Ende   
   
else
{ System.out.println("Entweder haben Sie sich vertippt, oder sie leiden an einer Geistesstörung.");
    System.out.println("Bei ersteresm, starten Sie einfach den Test neu.");
    System.out.println("Sollte letzteres der Fall sein, suchen Sie bitte einen Psychologen auf.");
}

    }
}

Also der Teil "m Anfang" bis zu "m Ende" funktioniert so, wie er funktionieren soll. Aber bei dem ersten Teil "w Anfang" kommt nach der Geschlechtsabfrage, die Altersabfrage, und da kommt automatisch das letzte "else" mit. Ich versteh nicht ganz warum, ich habe den ersten Teil auch mit dem ganzen Code vom "m Anfang" übernommen, und auch da kommt das letzte else mit (was beim gewöhnlichen "m Anfang" nicht der Fall ist....

Ich wäre für jeden Vorschlag dankbar...!

LG,
Fallout
 
Probier es mal so:

Java:
if(Bedingung) {
    // Anweisung

} else if(Bedingung) { // oder }else{

// Anweisung
} else {
 // Anweisung
}
Deine Klammern bei deinen ifs sehen ziemlich wirr aus.

Und zudem könntest du anstatt
Java:
equals("w") || equals("W")
auch einfach
Java:
equalsIgnoreCase("w")
benutzen.
 
ich probier mal mit if else rum in ner anderen Klammer vielleicht, weil wenn ich die erste if (altersabfrage) in ein if else oder else if umschreibe nimmt mir eclipse das leider nicht.
Aber Danke für den Tipp mit IgnoreCase!
 
Wenn du den Code aufs kürzeste reduzierst, wird dir auch klar warum der else-Block auch ausgeführt wird.
Java:
if(...) { // weiblich
    ...
}

if(...) { // männlich
   ...
} else {
   ..
}
Wenn die Bedingung für weiblich wahr ist, dann führt er den Block aus. Wenn er fertig ist prüft er ob man männlich ist - da man aber weiblich ist kann das nicht wahr sein und geht daher in den else-Block.
Was du sicherlich eher suchst ist :
Java:
if(<weiblich>) { 
   ...
} else if(<männlich>) {
   ...
} else {
   ...
}

@T_T es heißt else if nicht if else 😉
 
Rücke mal die Zeilen richtig ein, dann findet man Fehler bzgl. Klammern deutlich schneller. Und am besten noch Code in eigene Methoden auslagern, damit das ganze übersichtlicher wird, sonst blickst du da ganz schnell nicht mehr durch.
 
Tausend Dank Robat! Es war wirklich nur das eine else beim Anfang vom männlich Teil....
Ich hatte da nen Denkfehler und wär echt nie ohne Hilfe drauf gekommen. und danke an SchwarzWeiß und T_T, ich sollte echt gleich am Anfang mit Übersichlichkeit arbeiten, ist sicher keine schlechte Angewohnheit! 🙂
 
Du könntest beispielsweise anstatt
Java:
if (antwort.equals("w") || antwort.equals("weiblich") || antwort.equals("W") || antwort.equals("Weiblich") || antwort.equals("Ich bin weiblich"))  //GESCHLECHT
schreiben:
Java:
...
if(isWeiblich(antwort)){
...

und dann eine eigene Methode dafür
Java:
private static boolean isWeiblich(String antwort){
  if (antwort.equals("w") || antwort.equals("weiblich") || antwort.equals("W") || antwort.equals("Weiblich") ||  antwort.equals("Ich bin weiblich")){
   return true;
  } else {
   return false;
  }  //GESCHLECHT
}

dann hast du keine so lange Zeile im Hauptteil und man kann viel schneller lesen, was du da machst.
 

Neue Themen


Zurück
Oben