簡體   English   中英

Java循環條件問題

[英]Issue with Java Loop Conditions

我正在為分配工作Java循環。 我不得不寫一個從三個國家人口開始的循環,每個國家提高/降低,直到一個國家低於其他兩個國家,並打印人口,以及達到該結果所花費的年數。

我正在使用具有正確代碼的兩個條件,但是當條件正確時,它們的行為不正確。 循環必須運行,直到墨西哥和日本人口高於美國人口,所以這就是我正在使用的:

如果我使用這個條件 - mexpop> usapop && jappop> usapop循環不運行,因為美國已經高於墨西哥和日本(315,000,000對121,000,000和127,000,000)。

如果我使用這個條件 - mexpop <usapop && jappop <usapop,循環運行但它沒有顯示正確的結果,因為美國流行音樂應該低於墨西哥和日本。

我嘗試的最后一個選項是:usapop <mexpop && usapop <jappop如果我是對的,這個應該可以工作,因為usapop(315,000,000)不大於mexpop或jappop(121,000,000和127,000,000)。

預期的輸出應該是顯而易見的,但這是我得到的:

墨西哥人口為273,286,490。 美國人口為278,014,339。 日本人口為278,115,163。 這一變化耗時78年。

我認為日本流行音樂運氣更高,但即使我使用的是邏輯運算符,它似乎也不符合這兩個條件。

/* Import Java utilities required for the program. */
import java.text.DecimalFormat;

class Population_for {
   public static void main(String[] args) {

   /** Declare variables that will be used in the program. **/
   double usapop, mexpop, jappop;
   int years;

   /** This is the start of the for loop.
     * The first line declares the variables (mexpop, usapop, jappop), the second line declares the conditions (mexpop less than**/
   for(mexpop=121000000, usapop=315000000, jappop=127000000, years=1; mexpop < usapop && jappop < usapop; years++){
      mexpop = mexpop * 1.0105;
      usapop = usapop * 0.9984;
      jappop = jappop * 1.0101;
      DecimalFormat df = new DecimalFormat("###,###,###");
      System.out.println("The Mexican population is "+(df.format(mexpop))+". The United States population is "+(df.format(usapop))+". The Japanese population is "+(df.format(jappop))+". This change took "+years+" year(s).");
      System.out.println("");
   }
   }
}```

您的問題是, iffor循環的if語句中使用了邏輯,那么您就犯了一個不幸的錯誤。 當循環條件為真時, for循環運行。

當你到達日本人口>美國人口時, mex < use && japan < usa不再是真的(因為一個人是假的)。 因此,您需要使用邏輯或( || ),以便循環保持運行,直到它們都為真。

我認為你誤解了邏輯andor運作方式。 A and陳述需要雙方都是真實的,以評估為真,一個或陳述需要任何一方都是真實的,以評估真實。

因此,如果你希望你的for循環在mexpop和jappop都更大時停止,那么usapop你可以用or那樣做。

但更好的方法是編寫一個你正在測試的版本的否定版本,所以如果你想讓你的for循環循環直到美國不再大於其他兩個你可以寫的:

!(mex>usa && jap>use)

直到mex和jap都大於美國才會成立。

暫無
暫無

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

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