运行代码时得到以下信息,但是我在main方法中调用了solve(4)。 因此,我不确定为什么存在null? 最初我有NQueensProblem q = new NQueensProblem(4); 但这在编译时引发了错误。 任何指导将不胜感激。

NQueensProblem.solve(NQueensProblem.java:at在NQueensProblem.can(NQueensProblem.java:32)在NQueensProblem.solve(NQueensProblem.java:at在NQueensProblem。 Java:76)

public class NQueensProblem {
public int[][] solution;
public NQueensBT(int N) {
    solution = new int[N][N];
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            solution[i][j] = 0;
        }
    }
}
public void solve(int N) {
    if (placeQueens(0, N)) {
        //print the result
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                System.out.print(" " + solution[i][j]);
            }
            System.out.println();
        }
    } else {
        System.out.println("NO SOLUTION EXISTS");
    }
}
public boolean placeQueens(int queen, int N) {
    // will place the Queens one at a time, for column wise
    if (queen == N) {
        //if we are here that means we have solved the problem
        return true;
    }
    for (int row = 0; row < N; row++) {
        // check if queen can be placed row,col
        if (canPlace(solution, row, queen)) {
            // place the queen
            solution[row][queen] = 1;
            // solve for next queen
            if (placeQueens(queen + 1, N)) {
                return true;
            }
            //if we are here that means above placement didn't work
            //BACKTRACK
            solution[row][queen] = 0;
        }
    }
    //if we are here that means we haven't found solution
    return false;
}
// check if queen can be placed at matrix[row][column]
public boolean canPlace(int[][] matrix, int row, int column) {
    // since we are filling one column at a time,
    // we will check if no queen is placed in that particular row
    for (int i = 0; i < column; i++) {
        if (matrix[row][i] == 1) {
            return false;
        }
    }
    // we are filling one column at a time,so we need to check the upper and
    // diagonal as well
    // check upper diagonal
    for (int i = row, j = column; i >= 0 && j >= 0; i--, j--) {
        if (matrix[i][j] == 1) {
            return false;
        }
    }
    // check lower diagonal
    for (int i = row, j = column; i < matrix.length && j >= 0; i++, j--) {
        if (matrix[i][j] == 1) {
            return false;
        }
    }
    // if we are here that means we are safe to place Queen at row,column
    return true;
}
public static void main(String[] args) {
    int N = 4;
    NQueensProblem q = new NQueensProblem(N);
    q.solve(N);
}

}

#1楼 票数:0 已采纳

如果我了解代码以及此处的问题,请尝试以下操作。

public class NQueensProblem {
public int[][] solution;
public NQueensProblem(int N) {
    solution = new int[N][N];
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            solution[i][j] = 0;
        }
    }
}
public void solve(int N) {
    if (placeQueens(0, N)) {
        //print the result
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                System.out.print(" " + solution[i][j]);
            }
            System.out.println();
        }
    } else {
        System.out.println("NO SOLUTION EXISTS");
    }
}
public boolean placeQueens(int queen, int N) {
    // will place the Queens one at a time, for column wise
    if (queen == N) {
        //if we are here that means we have solved the problem
        return true;
    }
    for (int row = 0; row < N; row++) {
        // check if queen can be placed row,col
        if (canPlace(solution, row, queen)) {
            // place the queen
            solution[row][queen] = 1;
            // solve for next queen
            if (placeQueens(queen + 1, N)) {
                return true;
            }
            //if we are here that means above placement didn't work
            //BACKTRACK
            solution[row][queen] = 0;
        }
    }
    //if we are here that means we haven't found solution
    return false;
}
// check if queen can be placed at matrix[row][column]
public boolean canPlace(int[][] matrix, int row, int column) {
    // since we are filling one column at a time,
    // we will check if no queen is placed in that particular row
    for (int i = 0; i < column; i++) {
        if (matrix[row][i] == 1) {
            return false;
        }
    }
    // we are filling one column at a time,so we need to check the upper and
    // diagonal as well
    // check upper diagonal
    for (int i = row, j = column; i >= 0 && j >= 0; i--, j--) {
        if (matrix[i][j] == 1) {
            return false;
        }
    }
    // check lower diagonal
    for (int i = row, j = column; i < matrix.length && j >= 0; i++, j--) {
        if (matrix[i][j] == 1) {
            return false;
        }
    }
    // if we are here that means we are safe to place Queen at row,column
    return true;
}
public static void main(String[] args) {
    int N = 4;
    NQueensProblem q = new NQueensProblem(N);
    q.solve(N);
}
}

  ask by perkinsjr68 translate from so

未解决问题?本站智能推荐:

1回复

线程“main”中的异常java.lang.NullPointerException[java]

我有任务要做,我有一点问题,而且我遇到了错误。 我不知道如何修复它: test.main(test.java:29)处的线程“ main”中的异常java.lang.NullPointerException 这是我的代码:
2回复

Java错误“线程“main”中的异常java.lang.NullPointerException”

错误:“线程“主”中的异常”位于com.vipgamming.Frytree.Game.main(Game.java:47)上的java.lang.NullPointerException” 我不是一个很好的程序员。 只是说和不好的英语。 Game.java: 抱歉,我不知道如何发
3回复

java线程“main”中的异常java.lang.NullPointerException[关闭]

我是Java的新手,刚刚尝试了zetcode.com的教程。 他正在他的教程中解释和展示如何创建一个简单的破砖游戏,我阅读他的教程并按照他的方式对游戏进行编程。 最后它没有工作。 错误是: javax.swing.ImageIcon。(ImageIcon.java:205)中的线程“
3回复

Java:线程“main”java.lang.NullPointerException中的异常

我运行此代码时不断收到此错误,但我不知道如何修复它。 我已经做了大约3个月的Java并且可以使用一些帮助。 基本上该程序要求用户输入每位员工的工资率和工时。 支付率,小时数和员工数是所有将彼此共享相同索引的阵列。 当用户输入员工的工资率和工时时,程序将返回该员工的工资总额。 除了这个错
1回复

线程“main”中的异常java.lang.NullPointerException(Java,Netbeans)

输出:菜单:1.Carregar ficheiro alunos 2.InserirInformaçõespara Alunos 3.Gravaralteraçõesao ficeiro alunos 4.Carregar ficheiro Grelha 5.Mostrar Grelha 6.
1回复

线程“main”中的异常java.lang.NullPointerException错误在Java

我在Java程序中遇到问题,当我尝试创建一个对象数组时。 线程“main”中的异常java.lang.NullPointerException错误是我得到的错误。 我真的可以使用一些帮助,因为我在这个地方被困了几个小时...... 谢谢你的帮助 ! AT SHIP CLASS:
4回复

Java数组上的线程“main”中的异常java.lang.NullPointerException

我从代码中收到此错误: MainClass.main(MainClass.java:20)处的线程“ main”中的异常java.lang.NullPointerException 任何人都可以识别该错误,我认为这与初始化数组有关吗? MainClass.java } Wi
2回复

编码中的线程“main”中的异常java.lang.NullPointerException

我很确定这些问题已被问过无数次,但不幸的是,我找不到答案。 我知道java.lang.NullPointerException意味着该变量具有空值,因此我必须对其进行更改,但我真的不知道。 (StateBasedGame和AppGameContainer是一个名为'Slick'的.jar