簡體   English   中英

我的“執行”循環在做什么?

[英]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.

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