Hallo Leute.
Ich versuche mich gerade an einem Text-Adventure, und daher soll das Programm Strings vergleichen können.
Ich habe soweit auch den Code fertig:
Java:
playerIn = sc.next();System.out.println(playerIn);//kommt später weg.if(playerIn.contains("look")){System.out.println("You look arround in the Room.");System.out.println("To your right is a door.");}else{System.out.println("What?");}
Wenn man "look" eingiebt, dann stimmt die Ausgabe auch.
Ausgabe:
look
You look arround in the Room.
To your right is a door.
Allerdings wenn man jetzt "look arround" eingiebt, dann erfolgen zwei Prüfungen.
Ausgabe:
look arround
look
You look arround in the Room.
To your right is a door.
arround
What?
Wie kriege ich es hin das hier die selbe Ausgabe erfolgt, also dass wenn er einmal was erkennt den rest weglässt?
boolean roomfinished =false;System.out.println("Music of any kind, preferebly classical music, is ");System.out.println("recommended while playing.");System.out.println("You find yourself in a room.");System.out.println("You can look arround...");System.out.println("Please write all your commands");System.out.println("in lowercase letters.");while(roomfinished ==false){
playerIn = sc.next();System.out.println(playerIn);if(playerIn.contains("look")){System.out.println("You look arround in the Room.");System.out.println("To your right is a door.");}else{System.out.println("What?");}}}
package versuche;importjava.util.Scanner;publicclassFoo{Scanner sc;publicFoo(){
sc =newScanner(System.in);String s = sc.nextLine();switch(s){case"Tür":System.out.println("Oh No , eine Tür ! ");break;case"Dunkel":System.out.println("Du bist in einem düsterem Raum");break;// usw. usw.}}publicstaticvoidmain(String[]args){newFoo();}}
andernfalls:
wenn der String nur auf ein wort/Buchstaben/Zahl geprüft werden soll dann
Code:
.contains();
allerdings passiert dann das was du oben schon beschrieben hast, wenn du auf "look" und "arround" getrennt reagieren möchtest, ansonsten musst du halt festlegen welche auswahlmöglichkeiten der spieler hat und ihn dazu bringen auch nur das was erwartet wird einzugeben, oder du musst halt wirklich für jeden eintrettenden fall eine überprüfung schreiben
ansonsten kannst du auch :
Java:
if(s.contains("Tür"+" "+"Dunkel")){System.out.println("F#@! nun bist du gegen die Tür gerannt ...");}
beachte aber das du dich auch um Upper/Lowercase und ggf um Leerzeichen kümmern musst, dies könntest du mit
Code:
.split();
oder auch
Code:
.replaceAll(" " , "");
realiesieren.
und ggf auch
Code:
.trim();
falls ausversehen Leerzeichen vor oder dannach auftreten.
Dein Problem ist ganz einfach. Statt sc.next() solltest du sc.nextLine() verwenden, um das gesamte Kommando zu erhalten. sc.next() liefert beim 1. Durchlauf "look", beim 2. "around", sc.nextLine() liefert hier "look around". Dazugehörig solltest du nicht sc.hasNext() verwenden, sondern sc.hasNextLine().