Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我不知道';我不明白为什么我的Java程序没有';跑不动 在Sudoku.main(Sudoku.java:6)_Java_Runtime_Sudoku - Fatal编程技术网

我不知道';我不明白为什么我的Java程序没有';跑不动 在Sudoku.main(Sudoku.java:6)

我不知道';我不明白为什么我的Java程序没有';跑不动 在Sudoku.main(Sudoku.java:6),java,runtime,sudoku,Java,Runtime,Sudoku,这就是出现的情况。 我可以输入字母和数字而不会出错,但当我超过9时,它就会崩溃。而且,我似乎能够输入任意多行输入。我想它不知道什么时候真正执行 您必须并且应该以分号(;)结束package语句。根据您提供给程序的输入,我知道您没有编写上面发布的代码。这是因为您不了解该计划的基本要求 程序首先输入Sudoko中给出的所有线索。为此,必须为给出提示的网格的每个单元格输入1到9之间的任何整数,并为空白单元格输入0 现在您已经输入了21213、123532653、35426、124、437、54723、

这就是出现的情况。
我可以输入字母和数字而不会出错,但当我超过9时,它就会崩溃。而且,我似乎能够输入任意多行输入。我想它不知道什么时候真正执行

您必须并且应该以分号(;)结束package语句。

根据您提供给程序的输入,我知道您没有编写上面发布的代码。这是因为您不了解该计划的基本要求

程序首先输入Sudoko中给出的所有线索。为此,必须为给出提示的网格的每个单元格输入1到9之间的任何整数,并为空白单元格输入0

现在您已经输入了21213、123532653、35426、124、437、54723、362、537、643643436、34673754745,这些都是非法条目。因为条目应该是0到9,并且提供的所有输入都大于9


现在来谈谈你的错误。行
input.nextInt()
尝试从控制台读取用户输入的下一个
int
。但是您输入了一个
long
值,而不是
int
作为最后一个输入。因此,由于该值大于最大整数,即2147483647
Scanner
类将其视为
String
,而不是整数。因此,您得到了运行时异常。

您能分享您得到的错误消息吗?请发布堆栈跟踪或错误消息。。。请正确格式化您的代码。即使专业人士也会犯愚蠢的错误,这就是我们在这里的原因,但请阅读我们的,这会使我们更容易帮助您。例外情况会告诉您您的错误。你想得到<代码> int >代码>,它的代码限制为<代码> 2147483647 >代码>,如果你试图通过大于这个java的任何数字,它会把它看作字符串。您已尝试通过
34673754745
。这远远大于
int
的最大限制。
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;
    }
}
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)