2017-03-20 50 views
1

好吧,我正在做一個分配,我需要用戶輸入一個密碼(芝麻),如果答案不正確,就會循環。問題是我不能分配密碼變量,所以我可以這樣做。這是我的代碼。循環中的Java密碼

import java.util.Scanner; 
public class passCheck { 

    public static void main(String[] args) { 
    String pass = "thing"; 
    while(pass != "sesame"){ 
     System.out.println("The correct password is sesame. Please enter that."); 
     Scanner input = new Scanner(System.in); 
     String password = input.nextLine(); 

    } 

    } 
} 

回答

3

兩件事情:

首先,也是最重要的,你必須與下一行的輸入賦給變量pass

String pass = ...; 
... 
pass = input.nextLine(); 

其次,你應該與equals做字符串比較。參考比較!=(或==)可能有效,但不能保證。所以雖然條件應該是:

while(!"sesame".equals(pass)){ ... 

運營商!===的對象引用操作,有利於比較對象的身份。對於字符串,它們可能會工作,因爲JVM在字符串上爲某些字符串使用相同的實例。因此,有沒有保證,

例如:

"bla" != new String("bla") 

因此字符串應該與equals進行比較。另外,如果與之比較的字符串是已知的(如在"sesame"中),建議首先將其放在第一位,因爲它永遠不可能是null,這可能是變量的情況。

例如:

"sesame".equals(pass) 

不會拋出一個NullPointerException即使passnull

所以最後你main應該像最終

public static void main(String[] args) { 
    String pass = "thing"; 
    while(!"sesame".equals(pass)){ //comparison with equals 
    System.out.println("The correct password is sesame. Please enter that."); 
    Scanner input = new Scanner(System.in); 
    pass = input.nextLine(); //assign result to pass 

} 

一個說明,有Console作爲通行證,更適合讀密碼的班級詞不是打印出來給終端:

Console cons = System.console(); 
char[] passwd = cons.readPassword("[%s]", "Password:")); 

但是記住,那System.console()可能返回null,如果你在你的IDE使用亞軍運行你的代碼,這可能發生。

+0

我試着分配傳球input.next線,但我只是得到一個重複的局部變量的錯誤。 – TPG

+0

不要'String pass = input.nextLine()',只是'pass = input.nextLine()' –

+0

謝謝,修復了它。 – TPG

2

String■找與equals()方法進行比較,而不是與==,用於比較的對象的身份。

更換

while(pass != "sesame"){ 

通過

while(!"sesame".equals(pass)){ 

而更換

String password = input.nextLine(); 

通過

pass = input.nextLine(); 

您不必引入額外的變量來存儲密碼,否則您將永遠循環,因爲pass將永遠不會被修改。

1

您需要重新分配您在while循環中檢查的變量,而不是創建一個新循環。

String pass = ""; 
while(!pass.equals("sesame")){ 
    System.out.println("The correct password is sesame. Please enter that."); 
    Scanner input = new Scanner(System.in); 
    pass = input.nextLine(); 
} 
2

您的代碼有幾個問題。首先,您每次都創建一個新變量,而您實際上正在檢查的舊變量永遠不會更改,從而創建無限循環,所以在循環中應該是pass = input.nextLine();而不是String password = input.nextLine();。您的下一個問題是您不正確地比較字符串,您不能使用!=比較Java中的字符串,您需要使用.equals()方法。我會留給你去研究這個原因,因爲你顯然正在學習這門語言,應該自己去發現它。最後,您應該在循環之前放置掃描程序聲明,但每次用戶輸入錯誤的密碼時都不會重新創建掃描程序聲明。祝你好運!

0

在Java中,我們不能由操作員兩個字符串之間比較=或==我們使用等於()或等於()函數使您的代碼的工作,你只需更換這兩條線:!

while(pass != "sesame") 

由:

while(!pass.equals("sesame")) 

和:

String password = input.nextLine(); 

由:

pass = input.nextLine(); 

因爲我們每次都測試變量是否通過,如果密碼相等,每次用戶輸入的值(在變量中被調用:pass)都是正確的。 最後你會得到這個代碼:

public static void main(String[] args) { 
    String pass = ""; 
    while(!pass.equals("sesame")){ 
     System.out.println("The correct password is sesame.Please enter that."); 
     Scanner input = new Scanner(System.in); 
     pass = input.nextLine(); 

    } 
}