我正试图通过输入一个值并舍入它来制作直方图。四舍五入的值应该打印出星号的个数。
我执行了以下代码并输入了一个值,但是,输出为空。
public class Histogram
{
public static void main(String args[])
{
histogram obj = new histogram();
obj.histogram(13.5);
}
}
class histogram
{
public void histogram(double num)
{
int roundNum = (int)(num);
if (roundNum == 14)
{
System.out.println("**************" + num);
}
if (roundNum == 3)
{
System.out.println("***" + num);
}
if (roundNum == 16)
{
System.out.println("****************" + num);
}
if (roundNum == 0)
{
System.out.println("" + num);
}
if (roundNum == 1)
{
System.out.println("*" + num);
}
}
}
在Java中,typecasting
从原语类型double
变为原语类型int
可以简单地认为是去掉小数点部分.
例如,
System.out.println((int) 13.1); // prints 13
System.out.println((int) 13.5); // prints 13
System.out.println((int) 13.9); // prints 13
因此,当调用obj.histogram(13.5);
时,函数参数num
为13.5
,操作int roundNum = (int)(num);
与int roundNum = (int)(13.5);
相同,并将13
赋值给变量roundNum
。
由于没有if statements
处理这种情况(roundNum
为13
),因此不生成输出。
另一方面,为了反复检查相同的变量而硬编码大量的if statements
通常会导致不必要的复杂、低效和难以阅读的代码。通过使用roundNum
变量,您能想到更好的方法来为直方图打印"*"
字符吗?(提示:试试for loops
)
改变int roundNum = (int)(num);to int round = Math.round((float)num);它应该给你想要的输出。