簡體   English   中英

我不明白為什么我的 Java 程序無法運行

[英]I don't understand why my Java program doesn't run

import java.util.Scanner;
public class Sudoku {
    public static void main(String[] args) {
        int[][] grid = readAPuzzle();
        if (!isValid(grid))
            System.out.println("Invalid Input");
        else if (search(grid)) {
            System.out.println("The solution is found: ");
            printGrid(grid);
        } else
            System.out.println("No solution");
    }
    public static int[][] readAPuzzle() {
        Scanner input = new Scanner(System.in);
        System.out.println("Enter a Soduku puzzle:");
        int[][] grid = new int[9][9];
        for (int i = 0; i < 9; i++)
            for (int j = 0; j < 9; j++)
                grid[i][j] = input.nextInt();
        return grid;
    }
    public static int[][] getFreeCellList(int[][] grid) {
        int numberOfFreeCells = 0;
        for (int i = 0; i < 9; i++)
            for (int j = 0; j < 9; j++)
                if (grid[i][j] == 0)
                    numberOfFreeCells++;
        int[][] freeCellList = new int[numberOfFreeCells][2];
        int count = 0;
        for (int i = 0; i < 9; i++)
            for (int j = 0; j < 9; j++)
                if (grid[i][j] == 0) {
                    freeCellList[count][0] = i;
                    freeCellList[count++][1] = j;
                }
        return freeCellList;
    }
    public static void printGrid(int[][] grid) {
        for (int i = 0; i < 9; i++)
            for (int j = 0; j < 9; j++)
                System.out.print((grid[i][j] + " "));
        System.out.println();
    }
    public static boolean search(int[][] grid) {
        int[][] freeCellList = getFreeCellList(grid);
        int k = 0;
        boolean found = false;
        while (!found) {
            int i = freeCellList[k][0];
            int j = freeCellList[k][1];
            if (grid[i][j] == 0)
                grid[i][j] = 1;
            if (isValid(i, j, grid)) {
                if (k + 1 == freeCellList.length) {
                    found = true;
                } else {
                    k++;
                }
            } else if (grid[i][j] < 9) {
                grid[i][j] = grid[i][j] + 1;
            } else {
                while (grid[i][j] == 9); {
                    grid[i][j] = 0;
                    if (k == 0) {
                        return false;
                    }
                    k--;
                    i = freeCellList[k][0];
                    j = freeCellList[k][1];

                }
                grid[i][j] = grid[i][j] + 1;
            }
        }
        return true;
    }
    public static boolean isValid(int i, int j, int[][] grid) {
        for (int column = 0; column < 9; column++)
            if (column != j && grid[i][column] == grid[i][j])
                return false;
        for (int row = 0; row < 0; row++)
            if (row != i && grid[row][j] == grid[i][j])
                return false;
        for (int row = (i / 3) * 3; row < (i / 3) * 3 + 3; row++)
            for (int col = (j / 3) * 3; col < (j / 3) * 3 + 3; col++)
                if (row != i && col != j && grid[row][col] == grid[i][j])
                    return false;
        return true;
    }
    public static boolean isValid(int[][] grid) {
        for (int i = 0; i < 9; i++)
            for (int j = 0; j < 9; j++)
                if (grid[i][j] != 0 && !isValid(i, j, grid)) return false;
        return true;
    }
}

這是我的代碼。 我不知道這有什么問題。 我試圖讓用戶輸入 Soduku 拼圖,並讓所有空格(由 0 表示)填充正確答案。 我似乎有一個不會讓代碼執行的運行時錯誤,但我不知道它是什么。 Soduku 很爛……另外,我還是一名高中生,所以在使用任何我可能不會理解的術語時請記住這一點。 我想包括一張圖片,但它不允許我。 它說實體太大,但這是另一天的問題。


Enter a Soduku puzzle:
21213
123532653
35426
124
437
54723
362
537
643643436
34673754745
Exception in thread "main" java.util.InputMismatchException: 
For input              string: "34673754745"
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at Sudoku.readAPuzzle(Sudoku.java:22)

在數獨.main(Sudoku.java:6)

是什么出現。 我可以輸入字母和數字而不會出錯,但是當我超過 9 時,它會崩潰。 此外,我似乎可以輸入任意多行的輸入。 我猜它不知道何時實際執行。

根據您提供給程序的輸入,我了解到您沒有編寫上面發布的代碼。 這是因為您不了解該程序的基本要求。

該程序首先輸入 Sudoko 中給出的所有線索。 為此,您必須為給出提示的網格的每個單元格輸入 1 到 9 之間的任何整數,並為空白單元格輸入 0。

現在你輸入了 21213, 123532653, 35426, 124, 437, 54723, 362, 537, 643643436, 34673754745 這些都是非法輸入。 因為條目應該是 0 到 9,並且提供的所有輸入都大於 9。

現在來到你的錯誤。 input.nextInt()嘗試從控制台讀取用戶輸入的下一個int 但是您輸入了一個long值而不是int作為最后一個 Input。 因此,由於該值大於最大整數,即2147483647Scanner類將其視為String而不是整數。 因此,您會收到運行時異常。

您必須並且應該以分號(;)結束包語句

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM