我正在为任务进行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("");
}
}
}```
答案 0 :(得分:0)
您的问题是,您犯了一个不幸的错误,即如果在if
循环的for
语句中使用了正确的逻辑,则会应用正确的逻辑。 for
循环在条件为真时运行。
当您到达日本人口>美国人口的地步时,mex < use && japan < usa
不再为真(因为一个为假)。因此,您需要使用逻辑或(||
),以便循环继续运行,直到它们都成立为止。
答案 1 :(得分:0)
我认为您误解了逻辑and
和or
的工作方式。
and
语句需要双方都为真才能评估为真,而or语句则需要双方都为真才能评估为真。
因此,如果您希望当mexpop和jappop都更大时,for循环停止,那么usapop可以通过or
来做到。
更好的办法是编写一个实际测试内容的否定版本,因此,如果您希望for循环循环直到美国不再大于其他两个之一,则可以编写:
!(mex>usa && jap>use)
直到mex和jap都大于美国之前,这都是正确的。