2013-08-21 169 views
-5

我是新來的Java和我試圖做一個Java應用程序,它要求你拼寫「Java」,如果你拼寫正確它將鍵入「是」,但是,它鍵入「否」,我是什麼做錯:掃描儀不工作?

package quiz; 
import java.util.Scanner; 
public class quiz { 
    public static void main(String[] args) { 
     Scanner kirill = new Scanner(System.in); 
     System.out.println(kirill.next()); 
     String kirill2 = "Java"; 
     if (kirill.equals(kirill2)){ 
      System.out.println("yes"); 
     }else{ 
      System.out.println("no"); 
     } 
     System.out.println(kirill); 
     kirill.close(); 
    } 

} 

運行代碼: 爪哇

爪哇

沒有

java.util.Scanner中[定界符= \ p {javaWhitespace} +] [POSIT ion = 4] [match valid = true] [need input = false] [source closed = false] [skipped = false] [group separator = \,] [decimal separator =。] [positive prefix =] [negative prefix = \ Q- \ E] [正後綴=] [負後綴=] [NaN的字符串= \ Q'\ E] [無窮大字符串= \ Q'\ E]

+0

您應該考慮使用有意義的變量名,即使它們是同一個詞作爲類名。另外,嘗試在調試器中逐步調試代碼,並戳穿東西的值。這兩個字符串是否真的相等?也許你從控制檯讀到的那個在最後還是有一個換行符。 – millimoose

+0

軟件包名稱通常是'com.example.name',類名通常以大寫字母開頭。 – 2013-08-21 01:27:21

+1

我們知道你愛你的用戶名,但它必須停止。 –

回答

5
if (kirill.equals(kirill2)){ 

kirillScanner對象,不是字符串。試試這樣:

Scanner kirill = new Scanner(System.in); 
String userInput = kirill.next(); 
if (userInput.equals("Java")){ 
    ... 

此外,請注意,如果用戶鍵入「Java是一種編程語言」,則您的代碼將打印「是」。如果您只有希望它只用「Java」進行驗證,請用nextLine替換next

0
package quiz; 
import java.util.Scanner; 
public class quiz { 
    public static void main(String[] args) { 
     String kirill; 
     String kirill2 = "Java"; 
     Scanner input = new Scanner(System.in); 
     kirill = input.next(); 
     if (kirill.equals(kirill2)){ 
      System.out.println("yes"); 
     }else{ 
      System.out.println("no"); 
     } 
     System.out.println(kirill); 
     input.close(); 
    } 

} 

小問題與您的Scanner。您正試圖將ScannerString匹配。你不能那麼傻!

+1

+1和變量名稱的主要問題:) –

0

將正在閱讀的內容保存到String而不是比較Scanner對象與String。你main方法應該是這個樣子

public static void main(String[] args) { 
    Scanner kirill = new Scanner(System.in); 
    String input = kirill.nextLine(); 
    System.out.println(input); 
    String kirill2 = "Java"; 
    if (input.equals(kirill2)){ 
     System.out.println("yes"); 
    }else{ 
     System.out.println("no"); 
    } 
    System.out.println(kirill); 
    kirill.close(); 
} 

另外請注意,.next()將只掃描到第一分隔符(默認情況下爲任何空格),所以如果你想確保用戶只有類型"Java" ,那麼你應該使用.nextLine()而不是.next()

0

讓我們快速瀏覽一下您的代碼,裏面main()

Scanner kirill = new Scanner(System.in); 

創建一個掃描儀,並將其分配給一個變量,確定。

System.out.println(kirill.next()); 

打印什麼類型的用戶,但不將其分配給任何

String kirill2 = "Java"; 

只是一個字符串變量......好的。

if (input.equals(kirill2)){ 

如果掃描儀等於一些文本,則繼續。等一下,你看我剛剛說了什麼?比較掃描儀和字符串。這不會結束。想象一下,一個機器人,你給它一杯水和一張寫有「水」的紙,並詢問它們是否相同。顯然他們不是,他們不可能。您正在將設定值與另一個設定值進行比較,而不是用戶的輸入。下面是正確的:

package quiz; 
import java.util.Scanner; 
public class quiz { 
    public static void main(String[] args) { 
     Scanner scan = new Scanner(System.in); //creates a scanner 
     String text = "Java";     //creates the text to be compared 
     String input = scan.nextLine();  //read some arbitrary text the user types 
     if (input.equals(text)){    //checks if user's input is equal to text 
      System.out.println("yes"); 
     }else{ 
      System.out.println("no"); 
     } 
     scan.close();       //closes the Scanner 
    } 
} 

雖然不是必需的,這是一個很好的做法,名稱變量他們做了什麼之後或代表,或者你會感到困惑很快...

0

所以在這裏,一個更簡單方法是:

package quiz; 
import java.util.Scanner; 

public static void main(String[] args) { 

String userInput; 
String word = "Java": 

Scanner in1 = new Scanner(System.in); 
userInput = in1.next(); 
System.out.println(userInput); 

if (word.equals(userInput)) { 
    System.out.println("Yes!"); 
    }else{ 
     System.out.println("No."); 
     } 

System.out.println(userInput); 
userInput.close(); 

}