2014-11-24 74 views
1

我想創建一個程序,將檢查用戶的密碼。我希望程序在用戶正確的時候結束,但如果沒有,我只希望它只問4次。密碼檢查程序的Java程序

問題:即使您正確獲取密碼,程序也會繼續詢問密碼。如果你弄錯了,它會問錯。我怎樣才能解決這個問題?

import java.util.Scanner; 
public class HowToAdd { 
    public static void main (String [] args){ 
     Scanner input = new Scanner (System.in); 
     int trys = 0; 
     String password=null; 
     do{ 
      System.out.println("Guess the password"); 
      password = input.next(); 

      if(password.equalsIgnoreCase("Password")){ 
       System.out.println("Great job"); 
      }else{ 
       System.out.println("Try again"); 
       input.next(); 
       trys++; 
      } 
     }while(trys<2); 
     System.out.println("Try again later!"); 

     input.close(); 
    } 
} 
+0

密碼通常區分大小寫。您應該考慮使用'.equals()'切換'.equalsIgnoreCase()'。 – 2014-11-24 19:20:51

+0

@ user3453661看看我的解決方案,它應該給你你需要的東西。 – user3437460 2014-11-24 19:36:56

回答

2

你只需要添加一休:

if(password.equalsIgnoreCase("Password")){ 
System.out.println("Great job"); 
break; 
} 
+0

循環後您不會處理額外的密碼問題。 – Asya 2014-11-28 17:48:04

+0

@ user2784201抱歉,我沒有理解你的問題。 :) – 2014-11-28 17:51:34

+0

我的意思是你的情況「稍後再試!」消息總是會出現無視密碼:) – Asya 2014-11-28 18:20:37

1

我不僅添加break修復不會離開環路的問題,當輸入正確的密碼,但我加了幾個其他的事情來幫助你看到如下:

public static void main (String [] args){ 
    Scanner input = new Scanner (System.in); 
    int trys = 0; 
    String password=null; 
    System.out.println("Guess the password:"); 
    while(trys<2) 
    { 
     password = input.next(); 

     if(password.equalsIgnoreCase("Password")){ 
      System.out.println("Great job"); 
      break; 
     }else{ 
      trys++; 
      if(trys != 2) 
      { 
       System.out.println("Try again:"); 
      } 
     } 
    } 
    if(trys == 2) 
    { 
     System.out.println("Try again later!"); 
    } 

    input.close(); 
} 

試試這個它會跳出循環,如果它使用break;說法是正確的。此外,它只會顯示猜測密碼的第一次嘗試,然後再試一次。如果他們猜對了,它也不會再說再試,因爲它會檢查他們是否猜錯了兩次。

+0

非常感謝。你有沒有運行它,因爲我得到了一些錯誤,這意味着它的工作原理,但邏輯錯誤 – user3453661 2014-11-24 19:28:50

+0

@ user3453661歡迎您...它有什麼問題嗎? – brso05 2014-11-24 19:33:09

+0

@ user3453661我編輯它嘗試看看是否修復你在說什麼。我認爲你的意思是因爲它說再試一次,然後再試一遍,這將檢查是否已經有2次猜測,如果有,則不顯示再次嘗試。 – brso05 2014-11-24 19:41:26

0

您可以用break關鍵字修復它,就像這樣:

 if(password.equalsIgnoreCase("Password")){ 
      System.out.println("Great job"); 
      break; 
     } 

break在這裏解釋:

Branching Statements

+0

- 1 whaaaaaaaaaaaaa – Coffee 2014-11-25 02:11:30

+0

負1,這MUY可怕穆伊穆伊 – Coffee 2014-11-25 02:12:13

+0

PLUS1 WONDFRULWONDFRULWONDFRUL – Coffee 2014-11-25 02:18:03

0

需要實現能夠在不使用break報表做些什麼。 試着看看我的代碼流。

Scanner scn = new Scanner(System.in); 
    int tries=0; 
    String pw = ""; 

    System.out.println("Guess the password"); 
    pw = scn.nextLine(); 

    while(!pw.equalsIgnoreCase("Password") && tries < 3){ 
     tries++; 
     System.out.println("Try again"); 
     pw = scn.nextLine();    
    } 

    if(tries >= 3) 
     System.out.println("Try again later!"); 
    else 
     System.out.println("Great job!"); 

TEST RUN 1:

Guess the password 
1st try 
Try again 
2nd try 
Try again 
3rd try 
Try again 
last try 
Try again later! 

TEST RUN 2:

Guess the password 
password 
Great job! 
+0

東西也是錯的這個計劃,我很快一旦發現我跑了猜測密碼 你好 再試 你好 再試 你好 再試一次 密碼 稍後再試! – user3453661 2014-11-28 16:51:29

+0

猜測密碼 你好 再試 你好 再試 你好 再試 密碼 請稍後重試! – user3453661 2014-11-28 16:51:59

0

這裏是代碼另一種變型:

public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    int trys = 0; 
    String password = null; 
    // create variable for a number of tries 
    int numberOfCheks = 4; 
    do { 
     System.out.println("Guess the password"); 
     password = input.nextLine(); 

     if (password.equalsIgnoreCase("Password")) { 
      System.out.println("Great job"); 
      break; 
     } else if (++trys == numberOfCheks) { 
      //Break if you've used all your tries 
      System.out.println("Try again later!"); 
      break; 
     } else { 
      System.out.println("Try again"); 
      // input.next(); - Useless. You don't handle it. Removed 
     } 
    //There is already tries number check. So 'true' can be used as the condition. 
    } while (true); 
    input.close(); 
} 
+0

這有一個問題,因爲既然你把猜測密碼放在do while循環中,它會一直詢問「猜密碼再試一次」,這是不必要的,因爲在程序結束時,當循環存在爲假循環將保持說猜密碼 – user3453661 2014-11-28 16:48:28

+0

對不起,我不明白你的意見。這句話太長了。如果您輸入了不正確的密碼,該循環將工作4次。如果您的密碼正確,循環立即停止。你測試過了嗎? – Asya 2014-11-28 17:12:57

+0

實際上對不起,我再次測試它一定是我運行它時發生的一個錯誤 – user3453661 2014-11-28 17:15:58