如果我理解你的願望出來的代碼,有幾個嚴重的錯誤:
首先,如果用戶名和密碼「admin」是正確的,你要結束的循環中,代碼應該是:
System.out.print("Success!");
tryAgain = false;
不是:
System.out.print("Success!");
tryAgain = true;
設置TRYAGAIN爲false意味着(如您變量(和後面的代碼)被寫入)程序將不會再次嘗試用戶名和密碼(循環將停止循環)。
此外,你必須在下面的語句相同的差異:
if(user!="admin" && pass!="admin"){
...
tryAgain = false;
TRYAGAIN應設置爲真在這裏,只要你想進行編程,以「重試」爲輸入名稱和密碼(tryAgain = true
)。
最後,最重要的是,你的循環while命令實際上並沒有做任何事情。這:
while(tryAgain = true);
正在定義一個變量,而不是從它讀取信息。你必須寫:
while(tryAgain == true);
如果你想檢查tryAgain是否設置爲true。
除了所有的是,這裏還有一些不好的編碼風格選擇:
- 有兩個獨立的if語句,其中一個會工作
- 使用「!=」考慮串
- 有任何時'=' 當考慮一個布爾
你兩個if語句可以合併成:
if(user.equals("admin") && pass.equals("admin")){
System.out.print("Success!");
tryAgain = false;
}
else{
JOptionPane.showMessageDialog(null, "Try again! Invalid username or password!","Error Logging-In", JOptionPane.ERROR_MESSAGE);
tryAgain = true;
}
由於只有一種方法可以成功,所以沒有理由不把所有其他的東西都包含到else子句中。
,並在結束while語句可以簡單地寫爲:
while(tryAgain)
,雖然TRYAGAIN是真的,這將循環。
這裏的另一個問題是,如果用戶只是點擊輸入並且傳遞讀爲空字符串。當程序嘗試將字符串與「admin」進行比較時,它將返回一個異常。我會添加一個初始值:
if(user.isEmpty() || pass.isEmpty()){
JOptionPane.showMessageDialog(null, "Try again! Invalid username or password!","Error Logging-In", JOptionPane.ERROR_MESSAGE);
tryAgain = false
}
到if語句。
這裏是什麼,我會用代碼來執行:
import java.util.Scanner;
import javax.swing.JOptionPane;
import javax.swing.*;
public class Wewe{
public static void main(String[]args){
Scanner inp = new Scanner(System.in);
boolean tryAgain = true;
do{
System.out.print("\nInput username: ");
String user = inp.nextLine();
System.out.print("\nInput password: ");
String pass = inp.nextLine();
if(user.isEmpty() || pass.isEmpty()){
JOptionPane.showMessageDialog(null, "Try again! Invalid username or password!","Error Logging-In", JOptionPane.ERROR_MESSAGE);
tryAgain = false
}
else if(user.equals("admin") && pass.equals("admin")){
System.out.print("Success!");
tryAgain = false;
}
else{
JOptionPane.showMessageDialog(null, "Try again! Invalid username or password!","Error Logging-In", JOptionPane.ERROR_MESSAGE);
tryAgain = true;
}
}while(tryAgain);
}
}
我當然希望可以幫助,我能夠理清一些混亂!
我認爲你應該把'tryAgain = true'改成'tryAgain == true'? – CAMOBAP 2013-02-21 09:56:21
爲什麼你正確使用'equals()'比較字符串,然後四行後'!='? – 2013-02-21 09:57:12
他保持新鮮? – pandorym 2013-02-21 10:00:55