对于打印多个值的循环问题

时间:2016-04-25 05:06:29

标签: java

所以问题是: 编写一个程序,读取一系列输入值,并使用星号显示值的条形图。您可以假设所有值都是正数。首先找出最大值。该值的条形应该用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的星星,而不是其余的。基本上它会打印星形值,直到最大数字。

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

感谢阅读&lt; 3

1 个答案:

答案 0 :(得分:6)

首先,你不需要count变量 - 它对你没有任何帮助,你出于某种原因限制自己(每当你找到一个更大的元素时你就增加,所以你只增加一次,因为没什么大于8)。

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

另外,你应该注意两个整数的除法会产生integer,这不是你想要的,所以你必须将其中一个强制转换为float或{{1 }}

double

所以你会发现最大的值是8。

然后对于5,你将做5/8,这是0.625,而//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(); } (40)将是25,所以你将打印25 MAX

然后是8 - *所以你打印整个40 8/8 = 1.0 * MAX = 40

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

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