2

我的程序用数字填充了一个整数数组,我称之为计数数组:

int[] array count = {5, 4, 3, 0};

现在我想使用 for 循环以图形方式水平打印我的数组。我想用星号打印我所有的值,一个例子是:

   *     
   *        *
   *        *        *
   *        *        *
   *        *        *
count(0) count(1) count(2) count(3)

首先,我想找出我的数组的最大值是多少。如果此最大值 = 匹配,则我打印为星号,否则为空格。但是,我不能只是循环,然后执行 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

为什么会这样?有什么更好的方法来看待这个解决方案?

4

2 回答 2

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; 
                }
            }

试试这个。

于 2013-09-16T08:53:53.577 回答
1
 maxInt = (maxInt - maxInt) + k;

(maxInt - maxInt) 始终为零,所以这里有问题。

您可以将 maxInt 用作触发器,使用value>=maxIntinstead ==,然后您可以循环,如您所说。

然后你只需要两个循环:外部循环为每条线迭代,内部循环为图表的每个条形,类似于:

//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");
}

我认为这种方式更优雅(因为它更简单,更容易理解。

于 2013-09-16T09:14:17.273 回答