在java中打印星星

时间:2014-03-15 18:35:16

标签: java

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

我该怎么做?

2 个答案:

答案 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数组来进一步优化,并且每次都打印一个子数组。