2013-02-21 130 views
0

我目前有一個問題,我的程序不能正常循環,請幫助我吧。代碼如下。提前致謝!循環不能正常工作

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; 
     do{ 
     System.out.print("\nInput username: "); 
     String user = inp.nextLine(); 
     System.out.print("\nInput password: "); 
     String pass = inp.nextLine(); 
    if(user.equals("admin") && pass.equals("admin")){ 
      System.out.print("Success!"); 
      tryAgain = true; 
     } 
     if(user!="admin" && pass!="admin"){ 
      JOptionPane.showMessageDialog(null, "Try again! Invalid username or password!","Error Logging-In", JOptionPane.ERROR_MESSAGE); 
     tryAgain = false; 
    } 
}while(tryAgain = true); 
     } 
    } 

我希望發生的是,一旦用戶輸入錯誤的用戶名或密碼的程序將隨後循環。但是,如果用戶輸入了正確的用戶名或密碼,它將不會循環詢問用戶是否正確。

+12

我認爲你應該把'tryAgain = true'改成'tryAgain == true'? – CAMOBAP 2013-02-21 09:56:21

+1

爲什麼你正確使用'equals()'比較字符串,然後四行後'!='? – 2013-02-21 09:57:12

+0

他保持新鮮? – pandorym 2013-02-21 10:00:55

回答

4

試試這樣說:

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.equals("admin") && pass.equals("admin")){ 
      System.out.print("Success!"); 
      tryAgain = false; 
     } 
     if(!user.equals("admin") || !(pass.equals("admin")){ 
      JOptionPane.showMessageDialog(null, "Try again! Invalid username or password!","Error Logging-In", JOptionPane.ERROR_MESSAGE); 
     tryAgain = true; 
    } 
}while(tryAgain); 
     } 
    } 
+3

'if(!user.equals(「admin」)&&!(pass.equals(「admin」))' 我想應該有OR運算符 – FazoM 2013-02-21 10:03:12

+0

@fazomisiek是的,當然你是對的,改變了它 – 2013-02-21 10:05:43

+0

有一個錯誤先生它說變量tryAgain可能沒有初始化 – 2013-02-21 10:21:52

2

while(tryAgain == true)變化=到==

=是用於分配值。

==是用於檢查條件。

您也可以使用。

while(tryAgain) 
3

變化

if(user!="admin" && pass!="admin")if(user!="admin" || pass!="admin")

如果你婉檢查無效的用戶名密碼

1

設置tryAgain爲false成功後,打破循環。在檢查用戶是否成功登錄後跳過對無效用戶的檢查後,還要使用else if。另外如其他人提到String對象的比較應該使用equals方法。最後,while循環應該使用比較運算符==而不是賦值運算符=

public static void main(String[] args) { 
     Scanner inp = new Scanner(System.in); 
     boolean tryAgain; 
     do { 
      System.out.print("\nInput username: "); 
      String user = inp.nextLine(); 
      System.out.print("\nInput password: "); 
      String pass = inp.nextLine(); 
      if (user.equals("admin") && pass.equals("admin")) { 
       System.out.print("Success!"); 
       tryAgain = false; //Changed to false to break loop 
      }else if (!user.equals("admin") && !pass.equals("admin")) { 
          //^Using equals instead of ==, added else if 
       JOptionPane.showMessageDialog(null, 
         "Try again! Invalid username or password!", 
         "Error Logging-In", JOptionPane.ERROR_MESSAGE); 
       tryAgain = false; 
      } 
     } while (tryAgain == true); //using == instead of = 
    } 
1

試試這個:

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.equals("admin") && pass.equals("admin")){ 
       System.out.print("Success!"); 
       tryAgain = false; 
      } 
      if(user!="admin" && pass!="admin"){ 
       JOptionPane.showMessageDialog(null, "Try again! Invalid username or password!","Error Logging-In", JOptionPane.ERROR_MESSAGE); 
       tryAgain = true; 
      } 
     } while(tryAgain); 
    } 
} 
0

有在你的代碼夫婦的錯誤:

if(user!="admin" && pass!="admin"){ .... tryAgain = false; 

應該是:

if(user!="admin" || pass!="admin"){ .... tryAgain = true; 

然後:

System.out.print("Success!"); 
      tryAgain = true; 

應該是:

System.out.print("Success!"); 
      tryAgain = false; 

最後:

while(tryAgain = true); 

應該是:

while(tryAgain == true); 

或只是while(tryAgain);

希望有所幫助!

0

使用等於,而不是==

Scanner inp = new Scanner(System.in); 
     boolean tryAgain; 
     do{ 
     System.out.print("\nInput username: "); 
     String user = inp.nextLine(); 
     System.out.print("\nInput password: "); 
     String pass = inp.nextLine(); 
    if(user.equals("admin") && pass.equals("admin")){ 
      System.out.print("Success!"); 
      tryAgain = true; 
     } 
     if(!"admin".equals(user) && !"admin".equals(pass)){ 
      JOptionPane.showMessageDialog(null, "Try again! Invalid username or password!","Error Logging-In", JOptionPane.ERROR_MESSAGE); 
     tryAgain = false; 
    } 
}while(tryAgain = true); 
+0

'tryAgain == true'真的需要嗎?或者「while(tryAgain)」就足夠了 – asifsid88 2013-02-21 10:04:28

2

這就賦予truetryAgain(這將始終評估爲true,創造了一個無限循環):

} while(tryAgain = true) 

所以應該是:

} while(tryAgain == true) 

但是,通過遵循良好的編碼風格可以避免整個問題;它應該是簡單的:

} while(tryAgain) 

決不比較一個布爾變量和布爾常量,只需使用booleanVar!booleanVar爲您的病情

0

爲什麼不用別的,也TRYAGAIN被錯誤地喜歡使用這

if(user.equals("admin") && pass.equals("admin")){ 
      System.out.print("Success!"); 
      tryAgain = false; //why repeat again 
     } 
     else{ 
      JOptionPane.showMessageDialog(null, "Try again! Invalid username or password!","Error Logging-In", JOptionPane.ERROR_MESSAGE); 
     tryAgain = true; //ask again 
    } 

它也可以對子級

while(tryAgain) 
0

請檢查以下解決方案。

public static void main(String[]args){ 
     Scanner inp = new Scanner(System.in); 
     boolean tryAgain; 
     do{ 
     System.out.print("\nInput username: "); 
     String user = inp.nextLine(); 
     System.out.print("\nInput password: "); 
     String pass = inp.nextLine(); 
    if(user.equals("admin") && pass.equals("admin")){ 
      System.out.print("Success!"); 
      tryAgain = true; 
     } 
     if(!user.equals("admin") || !pass.equals("admin")){ 
      JOptionPane.showMessageDialog(null, "Try again! Invalid username or password!","Error Logging-In", JOptionPane.ERROR_MESSAGE); 
     tryAgain = false; 
    } 
}while(tryAgain); 
     } 
} 

您正在比較兩個字符串對象與!=。那是錯的。在您的文章

問題行是: 如果(用戶= 「管理員」 & &通= 「admin」 的!){

0
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; 
     do 
     { 
      System.out.print("\nInput username: "); 
      String user = inp.nextLine(); 
      System.out.print("\nInput password: "); 
      String pass = inp.nextLine(); 
      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 == true); 
    } 
} 

已經有若干所做的更改。

首先,你的代碼已經被正確縮進了 - 這對任何想要幫助的人來說都容易得多!

其次,你不需要有兩個if語句。你可以有一個if-else語句,因爲你想這樣做:「如果用戶有正確的名稱和密碼,那麼執行此操作,如果用戶沒有正確的名稱和密碼,請執行此操作。」可以縮寫爲「如果用戶有正確的名稱和密碼,請執行此操作,如果不是,請執行此操作。」

第三,當tryAgain爲true時,您的do-while循環將繼續,所以您需要while(tryAgain == true),因爲兩個等號用於比較,而一個不是用於比較。

第四,循環繼續,而tryAgain爲true,所以你希望tryAgain爲true,如果他們輸入無效的用戶名或密碼,繼續循環,如果他們輸入正確的,停止循環爲false。

此外,不使用==來比較字符串。 ==檢查兩個對象是否相同,所以用戶永遠不會==「admin」。相反,使用equals()方法來比較字符串。

0
public static void main(String[] args) { 
    Scanner inp = new Scanner(System.in); 
    boolean tryAgain = false; 

    do { 
     System.out.print("\nInput username: "); 
     String user = inp.nextLine(); 
     System.out.print("\nInput password: "); 
     String pass = inp.nextLine(); 
     if (user.equals("admin") && pass.equals("admin")) { 
      System.out.print("Success!"); 
      tryAgain = true; 
      inp.close(); 
     } else { 
      JOptionPane.showMessageDialog(null, 
        "Try again! Invalid username or password!", 
        "Error Logging-In", JOptionPane.ERROR_MESSAGE); 
     } 
    } while (tryAgain == false); 
} 
+0

也關閉掃描器inp.close() – shamik 2013-02-21 10:12:54

0

如果我理解你的願望出來的代碼,有幾個嚴重的錯誤:

首先,如果用戶名和密碼「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); 
     } 
    } 

我當然希望可以幫助,我能夠理清一些混亂!