有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我想打印一张图表,但我把它打印颠倒了。为什么?

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

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

现在我想使用for循环以图形方式水平打印数组。我想用asteriks打印我的所有值,例如:

   *     
   *        *
   *        *        *
   *        *        *
   *        *        *
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

为什么会发生这种情况?还有什么更好的方法来看待这个解决方案


共 (2) 个答案

  1. # 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; 
                    }
                }
    

    试试这个

  2. # 2 楼答案

     maxInt = (maxInt - maxInt) + k;
    

    (maxInt-maxInt)始终为零,因此这里出现了一些问题

    您可以使用maxInt作为触发器,使用value>=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");
    }
    

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