簡體   English   中英

Java中的做時循環

[英]Do-While loop in Java

因此,據我了解,do while循環將始終至少運行一次? 但是如果是這種情況,為什么我們需要在循環之外聲明和初始化變量?

以下面的代碼為例:

    do {

    int a = (int) (Math.random() * 13);
    int b = (int) (Math.random() * 13);
    int c = (int) (Math.random() * 13);
    int d = (int) (Math.random() * 13);

    }

    while (a + b + c + d != 24);

這將引發可能尚未初始化a,b,c,d的編譯錯誤。 因為我是Java初學者,所以我確定有一個簡單的原因,但是我似乎找不到它?

非常感謝您對此的任何幫助。

查找變量范圍,因為這是您的問題:您正在嘗試訪問超出其聲明范圍的變量,這里是do-while循環,但這無法完成。

請注意,如果再引入一個變量,您的代碼將起作用:

int sum = 0; // scope is *outside* of do-while loop
do {
  int a = (int) (Math.random() * 13);
  int b = (int) (Math.random() * 13);
  int c = (int) (Math.random() * 13);
  int d = (int) (Math.random() * 13);
  sum = a + b + c + d;
} while (sum != 24);

但是請注意,現在如果您仍然需要訪問a,b,c和d值,則不能。 為此,再次,您應該在循環之前聲明變量。

可以這樣寫

int a = (int) (Math.random() * 13);
int b = (int) (Math.random() * 13);
int c = (int) (Math.random() * 13);
int d = (int) (Math.random() * 13);

while (a + b + c + d != 24){
 a = (int) (Math.random() * 13);
 b = (int) (Math.random() * 13);
 c = (int) (Math.random() * 13);
 d = (int) (Math.random() * 13);
//do something
}
do {

    int a = (int) (Math.random() * 13);
    int b = (int) (Math.random() * 13);
    int c = (int) (Math.random() * 13);
    int d = (int) (Math.random() * 13);

    }

    while (a + b + c + d != 24);

這是一個范圍界定問題。 jls 6.3。 聲明范圍

您要這樣重寫代碼:

int a = 0; //I am being explicit here  
int b = 0;
int c = 0;
int d = 0;
 do {

        a = (int) (Math.random() * 13);
        b = (int) (Math.random() * 13);
        c = (int) (Math.random() * 13);
        d = (int) (Math.random() * 13);

        }

        while (a + b + c + d != 24);

暫無
暫無

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

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