[英]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
,这不是您想要的,因此您必须将其中一个强制转换为float
或double
。
//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.