如何将数字从整数数组重新对齐到jtable?

0aydgbwb  于 2021-08-20  发布在  Java
关注(0)|答案(2)|浏览(373)

对不起,糟糕的表达让人困惑,我再次编辑我的问题。
有一个整数数组,它包含29个数字,这29个数字由0到10组成。
例如:integer[]num={0,3,4,5,6,1,3,10,4,3,1,0,2,3,4,1,0,8,7,6,6,5,8,9,0,5,10,8}我想将这些数字重新排列成jtable(限制6行,10列)。
如果0<=数字<5,我将称之为“小”数字;
如果5<=数字<10,我将称之为“大”数字;
如果号码=10,我就叫他们“p”号。
总之,这29个数字由3种类型的数字(“samll”、“big”、“p”)组成。在数组num中,我们可以看到前三个数字属于“小”数字,因此它们在c1中逐个显示,第四个是5,它是“大”数字,因此它跳转到下一列,转到c2,c1的剩余单元格将不再使用。如果同一类型的数字超过6,它将向右转到下一个最近的单元格继续显示(参见第二个示例图像)。其他数组数字的逻辑相同,循环数组数字,然后根据jtable中的数字类型显示数字。最终结果是我想要的jtable,你可以看到下面我发布的示例图像。任何人张贴的样本代码将非常有助于我,提前感谢!

在第二个示例图像下方,红色下划线数字总计为6以上的10个“小”数字,因此转到右侧最近的单元格继续显示。绿色下划线表示总共7个“大”数字,因为c6中的第六个单元格已被占用,所以它向右转到第五个单元格后的继续显示

bksxznpy

bksxznpy1#

我编写代码只是为了创建6x10 int 矩阵。
这是我的许多测试中的一个测试的输出。

0  5  1 10  4  8  0  5 10  8
  3  6  3     3  7            
  4           1  6            
              0  6            
              2  5  8  9      
              2  3  4  1  0

oracle提供了一个有用的教程,使用jfc/swing创建gui,它将帮助您学习如何创建swing gui。跳过netbeans部分。
您将需要使用 JTable 显示矩阵。
在解决创建矩阵这样的问题时,将其分解为多个步骤会有所帮助。继续将其分解为多个步骤,直到可以对每个步骤进行编码。
这项任务非常复杂,我必须打印调试输出以确保取得进展。不要害怕放很多东西 System.out.printSystem.out.println 代码中的语句。您可以像我一样使用调试布尔值来关闭额外的打印语句。
下面是创建6x10矩阵的完整可运行代码。我没有检查超过10个值子集。我把它留给你了。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class RealignNumbers {

    private static final boolean DEBUG = false;

    public static void main(String[] args) {
        RealignNumbers rn = new RealignNumbers();
        int[] numbers = { 0, 3, 4, 5, 6, 1, 3, 10, 4, 3, 1, 0, 2, 2, 3, 4, 1, 0, 
                8, 7, 6, 6, 5, 8, 9, 0, 5, 10, 8 };
        int[][] matrix = rn.realignNumbers(numbers);
        printMatrix(matrix);
    }

    private static void printMatrix(int[][] matrix) {
        for (int row = 0; row < matrix.length; row++) {
            for (int column = 0; column < matrix[row].length; column++) {
                if (matrix[row][column] >= 0) {
                    String display = String.format("%3d", matrix[row][column]);
                    System.out.print(display);
                } else {
                    System.out.print("   ");
                }
            }
            System.out.println();
        }
    }

    public int[][] realignNumbers(int[] numbers) {
        List<List<Integer>> matrixList = splitInput(numbers);
        printList(matrixList);

        int[][] matrix = fillMatrix(matrixList);
        return matrix;
    }

    private List<List<Integer>> splitInput(int[] numbers) {
        List<List<Integer>> matrixList = new ArrayList<>();
        int number = numbers[0];
        boolean isSmall = number < 5;
        List<Integer> numberList = new ArrayList<>();
        numberList.add(Integer.valueOf(number));

        for (int index = 1; index < numbers.length; index++) {
            if (numbers[index] == 10) {
                // Finish prior List if exists
                if (numberList.size() > 0) {
                    matrixList.add(numberList);
                    numberList = new ArrayList<>();
                }
                // Create numberList for 10
                numberList.add(Integer.valueOf(numbers[index]));
                matrixList.add(numberList);
                // Start new List
                numberList = new ArrayList<>();
            } else {
                boolean small = numbers[index] < 5;
                if (isSmall == small) {
                    // Add number to List
                    numberList.add(Integer.valueOf(numbers[index]));
                } else {
                    // Number is different; end list and start new List
                    matrixList.add(numberList);
                    numberList = new ArrayList<>();
                    numberList.add(Integer.valueOf(numbers[index]));
                    isSmall = small;
                }
            }
        }

        if (numberList.size() > 0) {
            matrixList.add(numberList);
        }

        return matrixList;
    }

    private void printList(List<List<Integer>> matrixList) {
        if (DEBUG) {
            int count = 1;
            for (List<Integer> numberList : matrixList) {
                String display = String.format("%2d", count++);
                System.out.print("List " + display + " ");
                for (int number : numberList) {
                    display = String.format("%3d", number);
                    System.out.print(display);
                }
                System.out.println();
            }
        }
    }

    private int[][] fillMatrix(List<List<Integer>> matrixList) {
        int masterColumn = -1;
        int length = 6;
        boolean firstTimeSwitch = true;

        int[][] matrix = new int[length][10];
        for (int[] row : matrix) {
            Arrays.fill(row, -1);
        }

        for (List<Integer> numberList : matrixList) {
            masterColumn++;
            int column = masterColumn;
            int row = 0;
            for (int number : numberList) {
                if (DEBUG) {
                    System.out.println("row " + row + " column " + column);
                }
                matrix[row][column] = number;
                // Check if we hit the last row
                // If so, increment columns
                if (row < (length - 1)) {
                    row++;
                } else {
                    if (firstTimeSwitch) {
                        length--;
                        firstTimeSwitch = false;
                    }
                    column++;
                }
            }

            if (length < 6) {
                firstTimeSwitch = true;
            }
        }

        return matrix;
    }

}
eqoofvh9

eqoofvh92#

如果您真的想这样做,那么可以考虑一个非常类似于2d数组的jtable,例如, int[][] yourArray = new int[6][10]; .
所以你名单上的第一个数字是 yourArray[0][0] = 0 ,接下来的两个在同一列上 yourArray[1][0] = 3yourArray[2][0] = 4 ,下一个数字5进入新列 yourArray[0][1] = 5 等等
因此,在转向时,您可以在循环内部执行类似操作,将数字放入jtable:

if(row > rowCount) {
    col++;
    yourTableModel.setValueAt(number, row, col);
}

但为了确保转弯时没有重叠,还应使用:

//Insert value if able
if(yourTableModel.getValueAt(row, col) != null){
    row++;
    yourTableModel.setValueAt(number, row, col);
}
//Move to next col if not able to fit the number within the row
else{
    col++;
    yourTableModel.setValueAt(number, row, col);
}

相关问题