Erste Schritte If Abfragen + Scanner

Hallo liebe Leute,

ich habe zwei Fragen, wie kann ich mehrere If-Abfragen machen? An sich ist es ja ganz einfach, aber bei dem folgenden Code komme ich leider nicht weiter:

( 1 )
Code:
if ( scanner.nextLine().equalsIgnoreCase( "x" ) && TEST.equalsIgnoreCase( "x1" ) || scanner.nextLine().equalsIgnoreCase( "a" ) && TEST.equalsIgnoreCase( "a1" ) ) {
            System.out.println( "-> " + TEST );
        }

Problem: Die Abfrage a mit a1 wird nicht ausgeführt. Ich habe auch folgendes probiert:
Code:
if ( ( scanner.nextLine().equalsIgnoreCase( "x" ) && TEST.equalsIgnoreCase( "x1" ) ) || ( scanner.nextLine().equalsIgnoreCase( "a" ) && TEST.equalsIgnoreCase( "a1" ) ) ) {
            System.out.println( "-> " + TEST );
        }
( Siehe Klammer )

Die x & x1 Abfrage wird nicht ausgeführt. Standardmäßig ist es so, dass dann die a & a1 If Anweisung ausgeführt wird, das geht aber leider nicht.

-> a & a1 wird quasi gar nicht gelesen, obwohl ich x & x1 gar nicht abfrage.

( 2 )
Wie kann man einen Scanner nicht zum Schließen bringen? Wenn ich z.B. in einem Scanner ( System.in ) etwas schreibe, schließt sich das Programm direkt mit dieser Meldung:
Code:
Process finished with exit code 0
Wie kann ich dafür sorgen, dass der Prozess nie beendet wird?

Ich würde mich um paar Antworten freuen, dankeschön!


Mit freundlichen Grüßen,
 
Was ist denn TEST dass die abfragen mit a1 etc nicht gemacht werden könnte daran liegen, dass du mit Scanner. Next Linie dann schon eine Zeile weiter landest. Weil es ja vorher schon aufgerufen wird bei x und x1. Speichere die eingelesene Zeile in einer variable zwischen. Und mach die abfragen auf die variable statt auf den Scanner.

Um das endlos laufen zu lassen mach ein while (true) {... } ausenrum
 
Was ist denn TEST dass die abfragen mit a1 etc nicht gemacht werden könnte daran liegen, dass du mit Scanner. Next Linie dann schon eine Zeile weiter landest. Weil es ja vorher schon aufgerufen wird bei x und x1. Speichere die eingelesene Zeile in einer variable zwischen. Und mach die abfragen auf die variable statt auf den Scanner.

Um das endlos laufen zu lassen mach ein while (true) {... } ausenrum
Erstmal danke, dass du Zeit für mich gefunden hast.

Es funktioniert, wenn ich die If-Abfrage einzeln mache, d.h. es liegt ein Fehler bei einer mehrfachigen If-Abfrage.

Ich habe in einer List<String> mehrere Sachen hinzugefügt und einen String erstellt. Dieser String sorgt dafür, dass ein zufälliger String aus der Liste nimmt. Dieser lautet TEST.

Mit einzeln meine ich das:
Code:
if ( scanner.nextLine().equalsIgnoreCase( "a" ) && TEST.equalsIgnoreCase ( "a1" ) ) {
           
        }
Dieser Code funktioniert hervorragend.

Jedoch funktioniert, wie oben schon beschrieben, das nicht:
Code:
if ( ( scanner.nextLine().equalsIgnoreCase( "x" ) && TEST.equalsIgnoreCase( "x1" ) ) || ( scanner.nextLine().equalsIgnoreCase( "a" ) && TEST.equalsIgnoreCase( "a1" ) ) ) {
            System.out.println( "-> " + TEST );
        }

Standardmäßig bei Java ist es so, wenn die ersten If-Abfragen Bedingungen erfüllt werden, werden die "oder" Abfragen ( -> || <- ) nicht mehr abfragt. Aber, ich frage gar nicht x & x1 ab. x + x1 gibt es nicht. Standardmäßig müsste dann automatisch a + a1 abgefragt werden.

Ich komme da leider nicht weiter.
 
Entschuldigung, ich verstehe das nicht so ganz, was du genau meinst.

Es soll so sein: Wenn Scanner & Test = x & x1 sind ODER wenn Scanner & Test = a & a1 sind.

Wie @CursedCookie schon gesagt hast, testest du in der zweiten IF-Anweisung zwei verschiedene Zeilen.
Wenn ich die If Abfragen getrennt mache, dann klappt es wunderbar ( siehe oben ).

Wenn ich diesen Code verwende:
Code:
if ( ( scanner.nextLine().equalsIgnoreCase( "x" ) && TEST.equalsIgnoreCase( "x1" ) ) || ( scanner.nextLine().equalsIgnoreCase( "a" ) && TEST.equalsIgnoreCase( "a1" ) ) ) {
            System.out.println( "-> " + TEST );
        }
dann passiert eben gar nichts.

Wenn ich in den Scanner eben x schreibe und TEST x1 ist, dann klappt es. Aber, wenn ich x und x1 ( in String ) nicht schreibe, jedoch a & der Random String a1 ist, passiert gar nichts.

Die If Abfrage will gar nicht funktionieren.

Ich danke dir für deine Hilfe.
 
es geht ihm darum, dass jedes nextLine ein neue zeile einliest.
Falls du aber willst, dass beide abfragen sich auf die gleiche eingegebene zeile beziehen, musst du das ergebnis von nextLine zwischenspeichern:
Java:
String input = scanner.nextLine();
if ( ( input.equalsIgnoreCase( "x" ) && TEST.equalsIgnoreCase( "x1" ) ) || ( inputequalsIgnoreCase( "a" ) && TEST.equalsIgnoreCase( "a1" ) ) ) {
 
es geht ihm darum, dass jedes nextLine ein neue zeile einliest.
Falls du aber willst, dass beide abfragen sich auf die gleiche eingegebene zeile beziehen, musst du das ergebnis von nextLine zwischenspeichern:
Java:
String input = scanner.nextLine();
if ( ( input.equalsIgnoreCase( "x" ) && TEST.equalsIgnoreCase( "x1" ) ) || ( inputequalsIgnoreCase( "a" ) && TEST.equalsIgnoreCase( "a1" ) ) ) {
Vielen Dank, das funktioniert jetzt.

Eine Frage habe ich noch: Wie kann ich dafür sorgen, dass der Scanner sich gar nicht schließt? Immer, wenn ich etwas eintrage, kommt folgendes heraus:
Process finished with exit code 0
Der Prozess schließt sich. Natürlich bekomme ich vorher eine Antwort.

Ich will zum Beispiel, dass ich eine Zahl eintrage und das diese sich mit 2 addiert. Wenn ich dann bsp. 3 eintragen würde, würde das Ergebnis 5 lauten. Aber dann schließt sich der Prozess ( siehe oben ).

Wie kann ich das verhindern?
 
das hat nichts mit dem scanner zu tun, sondern mit dem programm allgemein, das programm beendet sich nunmal, wenn all deine threads beendet sind. In deinem Fall eben, wenn die main methode verlassen wird.
Wenn du also eine bestimmte aktion immer wiederholen willst, solltest du eine schleife verwenden:
Java:
while(!beenden) {
  //stuff machen
  // ggf. bei einer bestimmten eingabe beenden, z.b. if(input.equals("ende")) beenden=true;
}
 

Zurück
Oben