我有以下代码:
int aGrade=7;
int asteriskCount=((aGrade/100)*50);
System.out.print(asteriskCount);
for(int i=0; i<=asteriskCount; i++)
{
System.out.print("*");
}
asteriskCount
的计算结果为零,因此代码只打印一个星号,而不是我预期的四个星号。为什么呢?
答案 0 :(得分:3)
这是由于整数除法。通过使用100.0而不是100的浮动值,使用浮点执行除法。
尝试
int asteriskCount = (int)((aGrade/100.0)*50);
^^^^^
答案 1 :(得分:2)
您的代码存在一些问题:
整数除法:
由于您使用的是整数,因此计算中实际发生的是:
(aGrade/100) -> 0
((aGrade/100) * 50) = (0 * 50) -> 0
如何解决:
您可以使用浮点计算(如其他答案中所述),也可以简单地颠倒操作顺序:
int asteriskCount = ((aGrade * 50) / 100);
这将解决问题,并将导致3而不是0。
缺乏四舍五入:
如上所述,即使您更正了计算,您仍然会得到星号3而不是4.原因是您没有将结果四舍五入。
如何解决:
你可以通过在除法之前加上你除以的一半量来实现整数除法的舍入。为什么这样做?因为它模拟了你正常处理事物的方式,即在分割后增加0.5并修剪剩余部分
在此示例中,计算应如下所示:
int roundUp = (100 / 2);
int asteriskCount = ((aGrade * 50 + roundUp) / 100);
你有它,现在你得到4!
迭代长度不正确:
还有另一个问题会导致您打印出错误的星号,也就是说您的迭代会打印一个星号太多。这就是为什么你现在看到一个星号而不是一个星号(请记住原始计算结果是0)。
当你想要迭代一定次数时,请记住,如果你从0开始,你应该在达到数字之前完成,否则,你需要迭代一次太多。
如何解决:
迭代应该是:
for (int i=0; i<asteriskCount; i++) {
System.out.print("*");
}
祝你好运!
答案 2 :(得分:1)
你可以试试这个:
Double asteriskCount= Double((aGrade/100.0)*50);
问题是整数/整数除法是int。您需要将其强制转换为Double并将其存储为double。
但是如果你想将它存储在一个int中,那么将它转换为int。
int asteriskCount = (int)((aGrade/100.0)*50);
答案 3 :(得分:1)
是的,这是由于整数划分,就像他说的那样。
当你将5除以2时,答案是2.5。但是,如果使用整数来存储答案,则它将显示为2。
同样,当你将7除以100时,你的答案是0.07,因此存储的整数值只是0。
试试这个:
double aGrade = 7;
int asteriskCount = (int)((aGrade/100)*50);
答案 4 :(得分:0)
当您进行这样的除法时aGrade/100
= 7/100
Java只存储结果的整数部分。即7/100 = 0
。因此,将此结果乘以后缀并不重要,答案将始终为零。这称为整数除法。如果您希望此计算返回0.07
,则必须使用double
进行除法。即:(aGrade/100.0)*50
,然后当您乘以50时,要使用for
循环中的结果,请将第二个计算转换为int
:
int asteriskCount = (int)((aGrade/100.0)*50);