Java 用于打印多个值的循环问题

Java 用于打印多个值的循环问题,java,Java,因此,问题是: 编写一个程序,读取一系列输入值,并用星号显示值的条形图。您可以假设所有值都为正值。首先计算出最大值。该值的条形图应使用40个星号绘制。较短的条应按比例使用较少的星号。 例如 下面是我的代码: int count = 0; //Finds largest Value int largestValue = numbersArray[0]; for (int i = 1; i < numbersArray.length; i++) {

因此,问题是: 编写一个程序,读取一系列输入值,并用星号显示值的条形图。您可以假设所有值都为正值。首先计算出最大值。该值的条形图应使用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();
  }
int count=0;
//找到最大值
int largestValue=numbersArray[0];
for(int i=1;i最大值){
最大值=数字阵列[i];
计数++;
}
}
//打印星号的数量
最终int最大值=40;
字符串星号=“****************************************”;
对于(int i=0;i
这段代码似乎运行不正常。 如果我按顺序输入值:5 8 6 4 7,它只会打印5和8的星星,而不会打印其余的。基本上,它会打印数值的星星,直到最大的数字

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


感谢您阅读首先,您不需要
计算变量-它对您没有任何帮助,并且您出于某种原因限制了自己(您每次发现较大的元素时都会递增,因此您只需递增一次,因为没有大于8的元素)

你应该做的是找到最大的值,就像你做的那样,然后在整个数组中运行,并显示与该值成比例的每个元素,就像你做的那样(但是没有实际最大值的特例-这太糟糕了)

另外,您应该注意,两个整数的除法将产生一个
整数
,这不是您想要的,因此您必须将其中一个整数转换为
浮点
双精度

//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();
}
//查找最大值
int largestValue=numbersArray[0];
for(int i=1;i最大值){
最大值=数字阵列[i];
}
}
//打印星号的数量
最终int最大值=40;
for(int i=0;i
你会发现最大值是8

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

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

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


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

numbersArray[i]/largestValue
将执行整数division@Priyamal胡乱猜测是没有帮助的。如果你不知道,就不要猜测。@ScaryWombat但它是
40*numbersArray[i]/largestValue
,所以整数除法不是问题(
40*6/8==30
即使使用整数除法)@是的,不是回答,只是评论。@Ori Lentz很好,但我看不到(浮动)如果您不改变求值顺序,则需要使用括号进行强制转换。40*5/8仍然是25。而且,您也不需要将结果强制转换为int。@TonyWebdle之所以需要强制转换,只是因为我将除法包装在括号中以澄清过程/计算。在您的示例中,首先乘法不是aken,这就是它工作的原因(即
40*(5/8)=0
不带石膏)@OriLentz干得不错!我看了你的个人资料,上面说你已经编程很长时间了。你能给我推荐一些我可以在线学习编程的网站吗?我对Java编程非常陌生。@Burhan谢谢。我能请你也接受答案吗?关于教程,我不知道有什么具体的推荐,但是肯定有无数的东西。为了真正理解这些概念,我建议将重点放在面向对象上。@OriLentz好的,谢谢。我也是StackOverFlow的新手,所以我仍然习惯于:P
//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();
}