2016-08-15 21 views
-1

Ich schreibe ein Programm mit Java, das überprüft, ob ein Wort aus zufälligen Buchstaben in Form einer Zeichenfolge buchstabiert werden kann, als ob Sie ein scable Spiel spielten. Mein Problem ist, wenn irgendein Buchstabe nicht in den zufällig gegebenen Buchstaben gefunden wird, tut er nicht, was ich ihm gesagt habe. Hier ist mein Code für das weitere Verständnis:Mit Java zu überprüfen, ob ein Wort von einem anderen Wort geschrieben werden kann

public class Test { 

    public static void main(String[] args) { 
     canSpell("cenimatography","minato"); 

     /* i get an error for the below, "**String index out of range:-1**" 
     instead of returning can't spell because 'o' is not present. 
     */ 
     canSpell("cenimatgraphy","minato"); 
    } 

    //checks if a word can be spelt from string of letters 
    public static void canSpell(String letter, String word) { 

     boolean check=true; 

     for(int i=0;i<word.length();i++) { 
     if(letter.indexOf(word.charAt(i))!=-1) { 
       check = false; 
     } else { 
      int charLocation = letter.indexOf(word.charAt(i));  
      letter = letter.substring(0,charLocation)+letter.substring(charLocation+1,letter.length()); 
     } 
      check = true; 
     } 

     if(check) { 
     System.out.println("it CAN spell"); 
     } else { 
     System.out.println("it CANNOT spell"); 
     } 
    } 
} 
+4

_ "es nicht tun, was ich ihm gesagt, zu tun" _ Im Gegenteil, es macht genau das, was Sie ihm sagen. Was hast du davon erwartet? –

Antwort

0

Lets am if/else aussehen:

if(letter.indexOf(word.charAt(i)) != -1) { // The same as assignment of charLocation 
    check = false; 
} else { 
    // charLocation will always be -1 here. 
    int charLocation = letter.indexOf(word.charAt(i)); 
    // Causing the first substring to be out of range. 
    letter = letter.substring(0,charLocation)+letter.substring(charLocation+1,letter.length()); 
} 

Es sieht aus wie es ein Tippfehler ist, und die if-Anweisung sollte == statt != verwenden sollten.


Sie könnten die Dinge einfacher, indem Sie direkt diesen Wert zurück:

public static boolean canSpell(String letter, String word) { 
    for(int i=0;i<word.length();i++) { 
     if(letter.indexOf(word.charAt(i)) == -1) { // <-- change to '==' 
      return false; 
     } else { 
      int charLocation = letter.indexOf(word.charAt(i));  
      letter = letter.substring(0,charLocation) 
       + letter.substring(charLocation+1,letter.length()); 
     } 
    } 

    return true; 
} 
if(canSpell("cenimatography","minato")) { 
    System.out.println("it CAN spell"); 
} else { 
    System.out.println("it CANNOT spell"); 
} 

Siehe Ideone

+0

..... danke, dass du perfekt gearbeitet hast. –

Verwandte Themen