[英]What am I doing wrong with my 'Do' loop?
這里是Java新手,我嘗試對oracle機器進行編程,並且可以正常工作。 但是,詢問用戶是否要繼續的最后一部分沒有用。 我將詢問用戶是否要繼續,如果他們未回答“ Y”,“ y”,“ N”或“ n”,則他們將不得不重新運行測試。 所以我得到的問題是:
What is the question that you want to ask?... agafds
No! And Stop asking me!
Continue asking?(Y/N)...Y
Continue asking?(Y/N)...Y
Continue asking?(Y/N)...Y
Continue asking?(Y/N)...Y
Continue asking?(Y/N)...Y
由此:
import java.util.Scanner;
import java.util.Random;
import static java.lang.System.out;
public class firstClass {
public static void main(String args[]) {
Scanner kbScanner=new Scanner(System.in);
Random intRand=new Random();
String yOn;
do {
int oneten;
out.print("What is the question that you want to ask?... ");
kbScanner.nextLine();
oneten=intRand.nextInt(10)+1;
switch (oneten) {
case 1 :
out.println("Not a chance, buster.");
break;
case 2 :
out.println("Get a life man!");
break;
case 3 :
out.println("Why are you even asking me this?!");
break;
case 4 :
out.println("Depends on your thinking.");
break;
case 5 :
out.println("What are you seeking for?");
break;
case 6 :
out.println("Maybe... But don't trust me...");
break;
case 7 :
out.println("Do I look like I care?");
break;
case 8 :
out.println("Why would you even ask that?");
break;
case 9 :
out.println("The chances are as thin as searching for a needle in a haystack.");
break;
case 10 :
out.println("No! And Stop asking me!");
break;
}
do{
out.print("Continue asking?(Y/N)...");
yOn=kbScanner.nextLine();
}while (!yOn.equals("Y")||!yOn.equals("y")||!yOn.equals("N")||!yOn.equals("n"));
out.println("Continuing");
}while (yOn.equals("Y")||yOn.equals("y"));
}
}
因此:問題是,無論用戶輸入什么,似乎都沒有區別。
!yOn.equals("Y")||!yOn.equals("y")||!yOn.equals("N")||!yOn.equals("n")
如果是Y而不是N,則此條件總是要評估為true,因此它仍然為true,反之亦然。 更改您的||
到&&
。
!yOn.equals("Y")&&!yOn.equals("y")&&!yOn.equals("N")&&!yOn.equals("n")
在您的情況下,我想內部循環應該是這樣的:
do{
out.print("Continue asking?(Y/N)...");
yOn=kbScanner.nextLine();
}while (!yOn.equals("Y")&&!yOn.equals("y")&&!yOn.equals("N")&&!yOn.equals("n"));
在切換情況之后,沒有其他的do..while循環。 僅保留外部循環:
//do{
out.print("Continue asking?(Y/N)...");
yOn=kbScanner.nextLine();
// }while (!yOn.equals("Y")||!yOn.equals("y")||!yOn.equals("N")||!yOn.equals("n"));
// out.println("Continuing");
//Retain the outer do..while condition
}while (yOn.equals("Y")||yOn.equals("y"));
試試這個替換第一個while循環
while (!(yOn.equals("Y")||yOn.equals("y")||yOn.equals("N")||yOn.equals("n")));
所以給你一些提示
1-使用equalsIgnoreCase
代替equals("Y")||!yOn.equals("y")
2-刪除中間部分while
邏輯上應遵循以下步驟
main {
read option
do {
process
read option
} while (continue ?) // validate here
}
嘗試更換
do{
out.print("Continue asking?(Y/N)...");
yOn=kbScanner.nextLine();
}while (!yOn.equals("Y")&&!yOn.equals("y")&&!yOn.equals("N")&&!yOn.equals("n"));
out.println("Continuing");
通過
out.print("Continue asking?(Y/N)...");
yOn=kbScanner.nextLine();
您實際上不需要內部的do-while循環,因為外部循環可以為您做同樣的事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.