public static void processQuestionData()
{
double[] cake = {3.6, 7.8, 15.8}
double carrot = 15.8
for (int i = 0; i < cake.length; i++)
{
drawBar(cake[i], carrot);
}
public static void drawBar(double value, double max )
{
final int MAX_STARS = 20
String BAR_REP = "*";
double correctRatio = (value / max) * MAX_STARS;
if (correctRatio == MAX_STARS)
{
for (int index = 0; index < MAX_STARS; index++)
{
System.out.print(BAR_REP);
}
}
else if (correctRatio < MAX_STARS)
{
for (int index = 0; index < MAX_STARS; index++)
{
System.out.print(BAR_REP);
}
}
}
我希望给定一个值和一个max作为double类型参数,使用*表示值来绘制一个条,缩放以使最大值等于常量MAX_STARS。我无法解决我的代码有什么问题?
Output should be
****
*********
********************
第一颗星得到(3.6 / 15.8)* 20 = 4
第三颗星得到(15.8 / 15.8)* 20 = 20
我该怎么做?
答案 0 :(得分:0)
您的代码中的少量更改将使其正常运行
我觉得你的代码可能没有正确显示输出,因为缺少System.out.println();声明(我已在代码的最后一行添加)。您执行的条件检查也是多余的。而不是检查=和&lt;单独你可以检查一个块本身的&lt; =。
public static void processQuestionData()
{
double[] cake = {3.6, 7.8, 15.8};
double carrot = 15.8;
for (int i = 0; i < cake.length; i++){
drawBar(cake[i], carrot);
}
}
public static void drawBar(double value, double max ){
final int MAX_STARS = 20;
String BAR_REP = "*";
double correctRatio = (value / max) * MAX_STARS;
if (correctRatio <= MAX_STARS){
for (int index = 0; index < correctRatio; index++){
System.out.print(BAR_REP);
}
}
System.out.println();
}
答案 1 :(得分:0)
这是一个有效的代码:
public static void drawBar(double value, double max )
{
final int MAX_STARS = 20;
final double ratio = value / max;
if (Double.compare(ratio, 1.0) > 0)
return;
final int nrElements = (int) (ratio * MAX_STARS);
final char[] array = new char[nrElements];
Arrays.fill(array, '*');
System.out.println(new String(array));
}
注意:
MAX_STARS
可以是班级private static final int
; value / max
是否大于1; double
值之间进行比较,则应使用Double.compare()
,如上所示;某些合法double
值彼此之间不==
,例如Double.NaN
; private static final
创建一个包含20颗星的writer
数组来进一步优化,并且每次都打印一个子数组。