如何将整数0-80转换为点坐标(0,0) - > (8,8)?

时间:2017-03-12 21:52:10

标签: java for-loop integer coordinates point

我编写了一个Sudoku求解程序并且有一个双循环用于迭代从(0,0)到(8,8)的所有坐标点,总共9x9 = 81个单元格。我尝试使用一串数字将我的值写入单元格,但除.charAt(i)之外无法找到任何有用的方法,但这些方法无法正常工作。

我使用双循环(for i = 0; i < 9; i++)(for j = 0; j < 9; j++)来遍历我的坐标new Point(i,j)

有没有人知道如何将整数从0-80转换为点坐标形式(最好没有双循环)。

                StringBuilder sb = new StringBuilder();

                for (int i = 0; i < 9; i++) {
                    for (int j = 0; j < 9; j++) {
                        if (i == 0 && j == 0) {
                            sb.append(
                                    sudokuPuzzle.getSudokuCell(new Point(j, i)).toString().substring(76, 77));
                        } else if (i == 0 && j == 1 || i == 1 && j == 0) {
                            sb.append(
                                    sudokuPuzzle.getSudokuCell(new Point(j, i)).toString().substring(77, 78));
                        } else if (i == 0 && j < 9 || i == 1 && j == 1 || i >= 2 && j == 0) {
                            sb.append(
                                    sudokuPuzzle.getSudokuCell(new Point(j, i)).toString().substring(78, 79));
                        } else if (i == 1 && j < 9 || i >= 2 && j == 1) {
                            sb.append(
                                    sudokuPuzzle.getSudokuCell(new Point(j, i)).toString().substring(79, 80));
                        } else if (i >= 2 && j < 9 || i >= 2 && j == 1) {
                            sb.append(
                                    sudokuPuzzle.getSudokuCell(new Point(j, i)).toString().substring(80, 81));
                        }
                    }
                }
                System.out.println(sb);


                // for all sudoku cells
                for (int i = 0; i < 9; i++) {
                    for (int j = 0; j < 9; j++) {
                        System.out.println(sb.charAt(i));
                        int nextValue = sb.charAt(i);

                        if (nextValue != 0) {
                            // get next sudoku cell
                            SudokuCell sudokuCell = sudokuPuzzle.getSudokuCell(new Point(j, i));
                            // set values
                            sudokuCell.setValue(nextValue);
                            sudokuCell.setIsInitial(true);
                            sudokuPuzzle.removePossibleValue(sudokuCell);
                            sudokuCell.clearPossibleValues();
                            sudokuFrame.repaintSudokuPanel();
                        }
                    }
                }

1 个答案:

答案 0 :(得分:3)

只需使用映射i -> (i / 9, i % 9),它对应于您期望的法线贴图。