Programm läuft plötzlich nicht weiter

Deven

Mitglied
Hallo, ich habe morgen ein Nachgespräch in einer Firma für meinen Ausbildungsplatz und ich habe mich in der Zwischenzeit für diesen viel mit Java auseinandergesetzt und heute ein erstes Programm geschrieben. Vor wenigen Stunden lief es, ich schaltete den Computer aus, hatte zuvor alles ordnungsgemäß gesichert, ich schalte den Rechner ein, öffne Eclipse, nehme einige kleine Änderungen vor (Einige Zeilen Code hinzugefügt), dann startete ich das Programm und plötzlich geht ab einem gewissen Punkt gar nichts mehr, wo ich gar nicht mal weiter geschrieben habe. Zunächst hatte ich das Problem, dass ich keinen Input geben konnte, dann, als ich das gelöst habe, kam nach meinem Input keine Reaktion mehr. So wie der Code da steht lief vor wenigen Stunden noch und nun Pustekuchen. Ich würde mich über Hilfe sehr freuen, da ich nun bereits mindestens eine Stunde versuche den Fehler zu finden.
Ich habe die fehlerhaften Stellen mit Randnotizen markiert (// Randnotiz) ich hoffe, dass das hilfreich ist. Sind die Zeilen 25 und 52. Witzigerweise.
Vielen Dank. 🙂

Java:
import java.util.Scanner;

class Test{
public static void main(String args[]){
    Scanner tests = new Scanner(System.in);
    System.out.println("What's your name?");
    String Name = tests.nextLine();
    if (Name.equals("")){
        System.out.print("Please tell me your name.");
        System.out.println("What's your name?");
    }else{
    System.out.println("Hello " + Name + ". Press Enter.");
    }
    String Gender = tests.nextLine();
    System.out.println("Are you male, or female?");
    Gender = tests.nextLine();
    switch (Gender) {
    case "male":
        System.out.println("Nice. Do you like football?");
        String Football = tests.nextLine();
        break;
    case "Male":
        System.out.println("Nice. Do you like football?");
        Football = tests.nextLine();
    switch (Football) { // ab hier scheitert das Programm, ich kann wieder Input geben, aber zurück kommt nichts mehr
    case "yes":
        System.out.println("Nice. Me not. But I am still happy for you.");
        break;
    case "Yes":
        System.out.println("Nice. Me not. But I am still happy for you.");
        break;
    case "no":
        System.out.println("Nice. Me neither. So let's go on programming together. Would you like to?");
        break;
    case "No":
        System.out.println("Nice. Me neither. So let's go on programming together. Would you like to?");
        break;
    }
        String Programming = tests.nextLine();
    switch (Programming) {
    case "yes":
        System.out.println("Wonderful. I am sure we will have much fun together! Tell me now, do you know what an Integer is?");
        break;
    case "Yes":
        System.out.println("Wonderful. I am sure we will have much fun together! Tell me now, do you know what an Integer is?");
        break;
    case "no":
        System.out.println("Well this is sad. Java is a nice language, you should give it a try one day. See you then, " + Name + ". Have a great day.");
    }
        break;
    case "female":
        System.out.println("Nice. How about giving me your phone number?"); //ebenso hier, es wird kein Input angenommen
        break;
    case "Female":
        System.out.println("Nice. How about giving me your phone number?");
        String Number = tests.nextLine();
    switch (Number) {
    case ("yes"):
        System.out.println("Thank you very much. But I sadly can't write it down now, so maybe another time.");
        break;
    case ("Yes"):
        System.out.println("Thank you very much. But I sadly can't write it down now, so maybe another time.");
        break;
    case "no":
        System.out.println("That's sad, although I am so nice? Do you have a boyfriend?");
        break;
    case "No":
        System.out.println("That's sad, although I am so nice? Do you have a boyfriend?");
    String Boyfriend = tests.nextLine();
    switch (Boyfriend) {
    case ("yes"):
        System.out.println("Okay, then I wish you a good time with him. :) Would you like to program together with me?");
        break;
    case ("Yes"):
        System.out.println("Okay, then I wish you a good time with him. :) Would you like to program together with me?");
        break;
    case ("no"):
        System.out.println("Oh, okay. I wish you good luck finding one, because I think you are really pretty. Would you like to program together with me?");
        break;
    case ("No"):
        System.out.println("Oh, okay. I wish you good luck finding one, because I think you are really pretty. Would you like to program together with me?");
    }
    }
    }
}

}
 
Also bei mir funktioniert dein Programm.
mit der Eingabe "name"--> "Male"--> "yes"
wenn du "male" eingibst ist ein break da und es kommt nicht zum Output.

1.Tipp: Schreibe Variablen namen immer mit dem Anfangsbuchstaben klein.

2. Tipp:
Schreibe
Java:
String football = tests.nextLine();
football.toUpperCase();
switch(football)
{
       case "YES":
             //tu was
}

dann hast du das Problem mit der Groß und Kleinschreibung nicht.

3. Tipp
Versuche deine Abfragen in verscheidene Methoden auszulagern damit du nicht ein
Code:
switch(String)
{
      switch(String)
     {
          //usw.
     }
]

hast.

lg
 
Hi, erstmal danke für deine Antwort.
Also football.toUpperCase(); sorgt dafür, dass die Worte die als Input kommen gleich ob zu Beginn groß oder klein geschrieben werden? Also die Methode, nicht das mit football.
Entschuldige, dass ich nochmal so genau nachfragen muss. Und woran könnte es jetzt bei mir liegen, dass es nicht funktioniert? Blöde Frage, ich weiß..
 
Kein Problem 🙂

habe auch einen kleinen Fehler gemacht die Zeile
Java:
football.toUpperCase()
muss umgeändert werden in:
Java:
football = football.toUpperCase()

Aber ja genau toUpperCase() schreibt alle Buchstaben in dem String groß.

So das du nur nach eine Abfrage brauchst. also case "YES":

bei switch(Football) tritt dein Fehler auf, dass du nur wenn Male am anfangsbuchstaben großgeschreiben wird die weitere Abfrage kommt ob es ein Yes oder No ist.
 
Java:
switch (gender) {
           
            case "MALE":
                System.out.println("Nice. Do you like football?");
                String football = tests.nextLine();
                football = football.toUpperCase();
               
                switch (football)
                { // ab hier scheitert das Programm, ich kann wieder Input geben, aber zurück kommt nichts mehr
                    case "YES":
                        System.out.println("Nice. Me not. But I am still happy for you.");
                       
                  
                    case "NO":
                        System.out.println("Nice. Me neither. So let's go on programming together. Would you like to?");
                       
                }
                String programming = tests.nextLine();
                programming = programming.toUpperCase();
                switch (programming) {
                    case "YES":
                        System.out.println("Wonderful. I am sure we will have much fun together! Tell me now, do you know what an Integer is?");
                       
                   
                    case "NO":
                        System.out.println("Well this is sad. Java is a nice language, you should give it a try one day. See you then, " + Name + ". Have a great day.");
                }
                break;
}

So klappt es bei mir zumindest. Du musst auch die breaks rausnehmen. Da sonst der ganze Switch block verlassen wird
 
Genau 🙂
Kannst es auch mit toLowerCase() umsetzten wäre dann das selbe nur mit der Kleinschreibung.

Allerdings würde ich dir raten für eine ja/nein Frage eine Methode zu schreiben die boolnische Werte zurück gibt.

Code:
public class Test2 {
    public static void main(String[]aargs)
    {
        String s = "hallo";
        System.out.println(s);
       
        if(yesOrNo(s))
        {
            System.out.println("Yes");
        }
        else
        {
            System.out.println("NO");
        }
    }
   
    public static boolean yesOrNo(String answer)
    {
        answer = answer.toUpperCase();
       
        switch(answer)
        {
            case "YES":
                return true;
            case "NO":
                return false;
               
            default :
                System.err.println("Falsche Eingabe!");
                //Behandle deine Fehlermeldung !(Exception)
        }
        //Da keine Exception geworfen wird wird auch bei falscher Eingabe ein ja oder nein zurückgegeben.
        return false;
    }
}
 
Eines nach dem anderen, ich will erstmal machen was ich im Augenblick kann, in boolean bin ich noch nicht allzu sattelfest, aber danke für den Tipp. 🙂
Wenn ich es so mache wie du es beschrieben hast ohne die Breaks, dann erhalte ich bei der football Frage wenn ich mit yes antworte die Antworten auf yes und no. Ich hätte da jetzt ein Break hingesetzt.
 
Du hast mir sehr sehr geholfen, ich danke dir vielmals, du hast mir hoffentlich gerade meinen Ausbildungsplatz gesichert, gönn dir heute was! 😛 xD
 
Moin,
keine Ahnung, ob jetzt dieser Thread und vor allem der Eingangscode noch relevant sind, aber ...

Java:
  switch (Gender) {
  case "male":
  System.out.println("Nice. Do you like football?");
  String Football = tests.nextLine();
  break;
  case "Male":
  System.out.println("Nice. Do you like football?");
  Football = tests.nextLine();
  switch (Football) { // ab hier scheitert das Programm, ich kann wieder Input geben, aber zurück kommt nichts mehr
so kann es auch nicht funktionieren !!
Der String Football ist hier nur lokal im case "male" bekannt !!
Du kannst weder im case "Male" etwas zuweisen noch anschließend ein switch darauf machen !!

Zudem: ob male oder Male solltest Du vorher checken und nicht so mühseelig per switch (dies gilt natürlich entsprechend für andere Teile deines Codes genauso) !
Schau mal in die API ... es gibt bspw. die Methode equalsIgnoreCase (http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#equalsIgnoreCase(java.lang.String)), die könnte Dir da weiterhelfen!

Gruß Klaus
 

Zurück
Oben