我的程序用数字填充整数数组,我称之为计数数组:
int[] array count = {5, 4, 3, 0};
现在我想使用for循环以水平方式打印我的数组。我想在asteriks中打印我的所有值,例如:
*
* *
* * *
* * *
* * *
count(0) count(1) count(2) count(3)
首先,我想知道我的数组的最大值是什么。如果此最大值=匹配,则打印为asteriks否则为空格。但是我不能只循环,并且执行maxint - 1,并检查是否存在匹配,因为那时我只会获得每个数组的最大值的星号,并且休息空间。
所以我试着解决这个问题并从每个最小值开始并向上工作。
for (int k = 0; k <= 6; k++) {
System.out.println("NEXTLINE");
maxInt = (maxInt - maxInt) + k;
for (int i = 0; i < controleArray.length; i++ ) {
int graphLetter = letterCount[i];
for (int j = 0; j < 25; j++) {
//System.out.println("TESTinner ");
if (graphLetter > maxInt) {
System.out.print(" * ");
break;
} if (graphLetter <= maxInt) {
System.out.print(" ");
break;
}
}
到目前为止,这段代码正在计算我的数组的每个值并打印星号。然而,有被打印的颠倒。所以输出看起来像这样。
* * * NEXTLINE
* * * NEXTLINE
* * * NEXTLINE
* * NEXTLINE
* NEXTLINE
为什么会这样?什么是更好的方式来看待这个解决方案?
答案 0 :(得分:1)
for (int k = 6; k >= 0; k--) {
System.out.println("NEXTLINE");
maxInt = (maxInt - maxInt) + k;
for (int i = 0; i < controleArray.length; i++ ) {
int graphLetter = letterCount[i];
for (int j = 0; j < 25; j++) {
//System.out.println("TESTinner ");
if (graphLetter > maxInt) {
System.out.print(" * ");
break;
} if (graphLetter <= maxInt) {
System.out.print(" ");
break;
}
}
试试这个。
答案 1 :(得分:1)
maxInt = (maxInt - maxInt) + k;
(maxInt - maxInt)总是为零,所以这里出了点问题。
你可以使用value>=maxInt
而不是==
作为触发器使用maxInt,然后就像你说的那样循环。
然后你只需要两个循环:外部一个迭代每一行,内部一个循环,如图:
//Given the max value of the graph maxInt
for (int i=maxInt;i>0;i--) {
for (int j=0;j<count.length;j++) {
if (count[j]>=i) {
System.out.print(" * ");
} else {
System.out.print(" ");
}
}
System.out.println("NEWLINE");
}
我认为这种方式更优雅(因为它更简单易懂。