簡體   English   中英

循環if語句麻煩

[英]Looping if statement trouble

我剛剛開始開始編程,我的教授正在讓我們編寫一個計算選票的程序。 這個概念正在循環,但是我遇到了麻煩。 該程序應該從用戶那里輸入字符,它將使用這些字符來計數投票。 到目前為止,該程序只能正確執行quit函數,如果我輸入了除指定字符以外的其他任何字符,我將得到一個無限循環。 如果我在開頭輸入“ Y”,“ y”,“ N”或“ n”,即使我嘗試退出也將繼續接受輸入。 提前致謝!

public static void main(String[]args)
    {
    Scanner input = new Scanner(System.in);

    int yesVotes = 0;
    int noVotes = 0;
    int quitVote = 0;
    char vote = 'x';

    System.out.println("Enter 'Y' to vote yes or Enter 'N' to vote no or Enter 'Q' to quit");

    vote = input.next().charAt(0);

    while (quitVote < 1)
    {
     if (vote == 'Y' || vote == 'y')
     yesVotes++;
     else if (vote == 'N' || vote == 'n')
     noVotes++;
     else if (vote == 'Q' || vote == 'q')
     quitVote++;
     else
     System.out.println("Your input is invalid");
    }

    System.out.println("Total yes votes: " + yesVotes);
    System.out.println("Total no votes: " + noVotes);
    }

}

一旦進入while循環,您將不再接受輸入值。

因此解決方案是移動vote = input.next().charAt(0); 在while循環內。

您將得到預期的答案。

public static void main(String[]args)
    {
    Scanner input = new Scanner(System.in);

    int yesVotes = 0;
    int noVotes = 0;
    int quitVote = 0;
    char vote = 'x';

    System.out.println("Enter 'Y' to vote yes or Enter 'N' to vote no or Enter 'Q' to quit");



    while (quitVote < 1)
    {

     vote = input.next().charAt(0);

     if (vote == 'Y' || vote == 'y')
     yesVotes++;
     else if (vote == 'N' || vote == 'n')
     noVotes++;
     else if (vote == 'Q' || vote == 'q')
     quitVote++;
     else
     System.out.println("Your input is invalid");
    }

    System.out.println("Total yes votes: " + yesVotes);
    System.out.println("Total no votes: " + noVotes);
    }
}

這是一種更好的方法。 該代碼被注釋以突出顯示已進行的更改。

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);

    int yesVotes = 0;
    int noVotes = 0;
    //int quitVote = 0; // no need for this
    char vote = 'x';

    System.out
            .println("Enter 'Y' to vote yes or Enter 'N' to vote no or Enter 'Q' to quit");

    while (true) { // keeps on running until you quit
        vote = input.next().charAt(0); // for taking user input (previously you were placing it outside the loop)
        if (vote == 'Y' || vote == 'y')
            yesVotes++;
        else if (vote == 'N' || vote == 'n')
            noVotes++;
        else if (vote == 'Q' || vote == 'q')
            break;
        else
            System.out.println("Your input is invalid...Please try again");
    }

    input.close(); // to close the input stream

    System.out.println("Total yes votes: " + yesVotes);
    System.out.println("Total no votes: " + noVotes);
}

樣本輸出:

Enter 'Y' to vote yes or Enter 'N' to vote no or Enter 'Q' to quit
s
Your input is invalid...Please try again
d
Your input is invalid...Please try again
y
Y
y
n
N
Q
Total yes votes: 3
Total no votes: 2

問題是您不是在每次迭代中都讀取輸入,所以要這樣做

while (quitVote < 1)
{
 System.out.println("Enter 'Y' to vote yes or Enter 'N' to vote no or Enter 'Q' to quit");

 vote = input.next().charAt(0);

 if (vote == 'Y' || vote == 'y')
 yesVotes++;
 else if (vote == 'N' || vote == 'n')
 noVotes++;
 else if (vote == 'Q' || vote == 'q')
 quitVote++;
 else
 System.out.println("Your input is invalid");
}

在一段時間內使用新的字符讀取,否則每次輸入“ Q”或“ q”以外的字符時,都會陷入無限循環。

用這個 :

public static void main(String[]args)
    {
    Scanner input = new Scanner(System.in);;

    int yesVotes = 0;
    int noVotes = 0;
    int quitVote = 0;
    char vote = 'x';

    System.out.println("Enter 'Y' to vote yes or Enter 'N' to vote no or Enter 'Q' to quit");

//    vote = input.next().charAt(0);

    while (quitVote < 1){


        vote = input.next().charAt(0);
     if (vote == 'Y' || vote == 'y'){
        yesVotes++;
     }
     else if (vote == 'N' || vote == 'n'){
         noVotes++;
     }
     else if (vote == 'Q' || vote == 'q'){
         quitVote++;
     }
     else
        System.out.println("Your input is invalid");
    }

    System.out.println("Total yes votes: " + yesVotes);
    System.out.println("Total no votes: " + noVotes);
    }
}

這可能是您的解決方案。 :)

嘗試

while (quitVote < 1)
{
  vote = input.next().charAt(0);
  if (vote == 'Y' || vote == 'y')
    yesVotes++;
  else if (vote == 'N' || vote == 'n')
    noVotes++;
  else if (vote == 'Q' || vote == 'q')
    quitVote++;
  else
    System.out.println("Your input is invalid");
}

讓我解釋一下,另一種解決方案使用charAt(0)我認為這是不對的,如果用戶輸入“ nSKDJSALKD”,它仍然算作“否”和“ yYsd2sdf3”,它仍然算作“是”,但是如果您嘗試這種邏輯,那如果您輸入“ y”或“ Y”,則只會計數為“是”;如果您輸入“ n”或“ N”,則只會計數為“否”;如果您輸入“ q”或“ Q”,並且輸入其他值,也會退出投票字符或字符串,它將顯示您的輸入無效!。

作為程序員,我們需要防止那些人為錯誤。 :)

Scanner in = new Scanner(System.in);
int yesVote = 0;
int noVote = 0;
boolean bool = true;

while(bool){
    System.out.println("Enter 'y' or 'Y' to vote Yes, 'n' or 'N' to vote No, and 'q' or 'Q' to QUIT voting.");
    String input = in.next();
    if(!input.equalsIgnoreCase("q") && !input.equalsIgnoreCase("n") && !input.equalsIgnoreCase("y")){
            System.out.println("Invalid input!");
    }
    else{
        if(input.equalsIgnoreCase("y")){
            System.out.println("You vote Yes!");
            yesVote++;
        }
        else if(input.equalsIgnoreCase("n")){
            System.out.println("You vote No!");
            noVote++;
        }
        else{
            System.out.println("Thanks for Voting!! you may see the result below!");
            bool = false;
        }
    }
}
System.out.println("Total of Yes: "+yesVote);
System.out.println("Total of No: "+noVote);

輸出:

Enter 'y' or 'Y' to vote Yes, 'n' or 'N' to vote No, and 'q' or 'Q' to QUIT voting.
QqQq
Invalid input!
Enter 'y' or 'Y' to vote Yes, 'n' or 'N' to vote No, and 'q' or 'Q' to QUIT voting.
Y
You vote Yes!
Enter 'y' or 'Y' to vote Yes, 'n' or 'N' to vote No, and 'q' or 'Q' to QUIT voting.
N
You vote No!
Enter 'y' or 'Y' to vote Yes, 'n' or 'N' to vote No, and 'q' or 'Q' to QUIT voting.
n
You vote No!
Enter 'y' or 'Y' to vote Yes, 'n' or 'N' to vote No, and 'q' or 'Q' to QUIT voting.
y
You vote Yes!
Enter 'y' or 'Y' to vote Yes, 'n' or 'N' to vote No, and 'q' or 'Q' to QUIT voting.
q
Thanks for Voting!! you may see the result below!
Total of Yes: 2
Total of No: 2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM