Java 无法从循环中获取所需的输出

Java 无法从循环中获取所需的输出,java,Java,我试图从数组中获取特定的输出模式,但似乎无法获取我要查找的内容,现在确定原因。链接是所需的输出。如果格式不好,很抱歉。数组大小由用户输入 public class A3_Q2 { int [][] pattern2 = new int[arraySize][arraySize]; number = 1; int i; int j; int newNumber = arraySize-1; for (i = 0; i < arraySi

我试图从数组中获取特定的输出模式,但似乎无法获取我要查找的内容,现在确定原因。链接是所需的输出。如果格式不好,很抱歉。数组大小由用户输入

public class A3_Q2 { 

    int [][] pattern2 = new int[arraySize][arraySize];

    number = 1;
    int i;
    int j;
    int newNumber = arraySize-1;

    for (i = 0; i < arraySize; i++) 

    {

        if (i == 0)
        {

            for (j = 0; j < arraySize; j++)
            {
                pattern2[i][j] = number;
                System.out.printf("%3d", pattern2[i][j]);
                number++;
            }

        }

        else 
        {
            for(j = 0; j < i; j++)
            {
                pattern2[i][j] = number + newNumber;
                System.out.printf("%3d", pattern2[i][j]);
                newNumber++;
            }
            newNumber = arraySize-1;
            while(j < arraySize)
            {
                pattern2[i][j] = number;
                System.out.printf("%3d", pattern2[i][j]);
                number++;
                j++;
            }


        }
        System.out.println(""); 
   }
此图显示了高亮显示的无序单元格:


无需单独处理特定行。应使用可普遍使用的模运算符的公式计算值

这应该可以做到:

for (i = 0; i < arraySize; i++) {
    for (j = 0; j < arraySize; j++) {
        int value = i * arraySize + (j - i + arraySize + 1) % arraySize;
        if (value % arraySize == 0) {
            value += arraySize;
        }
        pattern2[i][j] = value;
        System.out.printf("%3d", pattern2[i][j]);
    }
    System.out.println("");
}
for(i=0;i
正如我在评论中所建议的,您试图一次做太多的事情,这使得逻辑(和逻辑错误)很难看到。 将每个部分分解成自己的方法可以使事情变得更容易

所有这些循环和条件隐藏了只需要三个任务:

  • 创建网格
  • 填充网格
  • 打印网格
  • 这种奇怪的非顺序输出意味着“填充网格”对于一种方法来说实际上太大了

    填充网格通常需要填充每一行。 此网格还需要将每行的值向右旋转一次。。。 也就是说,比上一行多出一行。 这与用行填充网格无关,所以这是其他方法的问题

    (想想看,我本可以把
    rowStartValue
    也硬塞到另一个方法上。)

    现在网格已满,打印变得很容易:

    private static void printPattern(final int[][] pattern) {
        for (final int[] row : pattern) {
            for (final int element : row) {
                System.out.printf("%3d", element);
            }
            System.out.println();
        }
        return;
    }
    

    row
    offset
    替换
    i
    j
    等变量也有很大帮助。

    此代码无法编译。什么是
    number
    类型,或者你的方法在哪里?你的实际输出是什么?看起来你有两个作业,所以写两个方法:第一个用值填充数组,第二个打印数组。让你偏离正轨的是在同一块代码中混合计算、数组初始化和输出。(如果出于某种原因,您必须将所有内容保存在同一方法中,至少要按顺序执行作业:初始化所有内容,然后打印所有内容。)
    private static void fillPattern(int[][] pattern) {
        final int rowCount = pattern.length;
        for (int rowOffset = 0; rowOffset < rowCount; rowOffset++) {
            final int[] row = pattern[rowOffset];
            // Numbers in grid start at 1, not 0.
            final int rowStartValue = rowOffset * row.length + 1;
            fillRow(row, rowOffset, rowStartValue);
        }
        return;
    }
    
    private static void fillRow(int[] row, final int offset, final int value) {
        for (int addend = 0; addend < row.length; addend++) {
            final int rowIndex = (offset + addend) % row.length;
            row[rowIndex] = value + addend;
        }
        return;
    }
    
    private static void printPattern(final int[][] pattern) {
        for (final int[] row : pattern) {
            for (final int element : row) {
                System.out.printf("%3d", element);
            }
            System.out.println();
        }
        return;
    }