Java循环条件问题

时间:2019-04-14 22:40:02

标签: java loops for-loop math while-loop

我正在为任务进行Java循环。我必须编写一个循环,从三个国家的人口开始,每一个国家提高/降低,直到一个国家比其他两个国家低,然后打印人口以及达到该结果所花费的时间。

我正在使用两个具有正确代码的条件,但是当条件正确时,它们将无法正确执行。这种循环必须一直持续到墨西哥和日本的人口高于美国的人口,所以我正在与之合作:

如果我使用这种条件-mexpop> usapop && jappop> usapop,则循环不会运行,因为美国已经高于墨西哥和日本(315,000,000对121,000,000和127,000,000)。

如果我使用这种条件-mexpop

我尝试的最后一个选项是:usapop

预期的输出应该很明显,但这就是我得到的:

墨西哥人口为273,286,490。美国人口为278,014,339。日本人口为278,115,163。此更改用了78年。

我认为日本流行乐的运气更高,但即使我使用逻辑AND运算符,它似乎也不能满足这两个条件。

/* 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("");
   }
   }
}```

2 个答案:

答案 0 :(得分:0)

您的问题是,您犯了一个不幸的错误,即如果在if循环的for语句中使用了正确的逻辑,则会应用正确的逻辑。 for循环在条件为真时运行。

当您到达日本人口>美国人口的地步时,mex < use && japan < usa不再为真(因为一个为假)。因此,您需要使用逻辑或(||),以便循环继续运行,直到它们都成立为止。

答案 1 :(得分:0)

我认为您误解了逻辑andor的工作方式。 and语句需要双方都为真才能评估为真,而or语句则需要双方都为真才能评估为真。

因此,如果您希望当mexpop和jappop都更大时,for循环停止,那么usapop可以通过or来做到。

更好的办法是编写一个实际测试内容的否定版本,因此,如果您希望for循环循环直到美国不再大于其他两个之一,则可以编写:

!(mex>usa && jap>use)

直到mex和jap都大于美国之前,这都是正确的。