繁体   English   中英

用于循环麻烦以打印多个值

[英]For loop troubling for printing multiple values

因此,问题是:编写一个程序,该程序读取输入值的序列并使用星号显示值的条形图。 您可以假设所有值均为正。 首先算出最大值。 该值的标尺应绘制40个星号。 较短的条应按比例使用较少的星号。 例如。

***********************
*********
****************************************
****
*******************

这是我的代码如下:

    int count = 0;
    //Finds largest Value
    int largestValue = numbersArray[0];
    for (int i = 1; i < numbersArray.length; i++) {
        if (numbersArray[i] > largestValue) {
            largestValue = numbersArray[i];
            count++;
        }
    }
    //Prints number of asterisks
    final int MAX = 40;
    String asterisks = "****************************************";
    for (int i = 0; i < count + 2; i++) {
        System.out.print(numbersArray[i]);
        if (numbersArray[i] == largestValue) {
            System.out.print(asterisks);
        } //if (numbersArray[i] != largestValue) {
        else {
            for (int j = 0; j < (40 * numbersArray[i] / largestValue); j++) {
                System.out.print("*");
            }
        }
        System.out.println();
  }

此代码似乎无法正常运行。 如果我按以下顺序输入值:5 8 6 4 7,它将只打印5和8的星号,而不打印其余的星号。 基本上,它会打印星号直到值最大为止。

我找不到我的代码有什么问题。 任何帮助将不胜感激!

感谢您阅读<3

首先,您不需要对变量进行count -它对您没有任何帮助,并且由于某种原因您会限制自己(每次发现较大的元素时都会增加,因此,由于不超过8,因此只增加一次)。

您应该做的就是像您一样找到最大的值,然后像您一样在整个数组上运行并显示与该值成比例的每个元素(但是对于实际的最大值没有特殊情况-这是可怕的) 。

另外,您应该注意,将两个整数相除会得到一个integer ,这不是您想要的,因此您必须将其中一个强制转换为floatdouble

//finds largest Value
int largestValue = numbersArray[0];
for (int i = 1; i < numbersArray.length; i++) {
    if (numbersArray[i] > largestValue) {
        largestValue = numbersArray[i];
    }
}

//Prints number of asterisks
final int MAX = 40;
for (int i = 0; i < numbersArray.length; i++) {
    int portion = (int)(MAX * (numbersArray[i] / (float)largestValue));
    for (int j = 0; j < portion; j++) {
        System.out.print("*");
    }
    System.out.println();
}

因此,您会发现最大值是8。

然后,对于5,您将执行5/8,即0.625,然后乘以MAX (40),即25,因此您将打印25 *

然后对于8/8 = 1.0 * MAX = 40 8 8/8 = 1.0 * MAX = 40那么您将打印整个40 *

对于6/8 = 0.75 * MAX = 30 ,您将打印30 * ,依此类推。

请注意,如果要微调,可以使用Math.round而不是简单地将portion强制转换为int(这将截断浮点数)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM