Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.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 Android应用程序线程异常空指针_Java_Android_Android Layout_Android Intent_Tablelayout - Fatal编程技术网

Java Android应用程序线程异常空指针

Java Android应用程序线程异常空指针,java,android,android-layout,android-intent,tablelayout,Java,Android,Android Layout,Android Intent,Tablelayout,我一直在尝试让这个数独解算器工作,调试器给了我这个错误。查看错误,我的数独类中有一个NullPointerException。但我不明白我的方法到底出了什么问题 更新: 01-06 16:56:25.124: E/AndroidRuntime(12733): FATAL EXCEPTION: main 01-06 16:56:25.124: E/AndroidRuntime(12733): Process: com.nom.sudokuhint, PID: 12733 01-06 16:56:2

我一直在尝试让这个数独解算器工作,调试器给了我这个错误。查看错误,我的数独类中有一个NullPointerException。但我不明白我的方法到底出了什么问题

更新:

01-06 16:56:25.124: E/AndroidRuntime(12733): FATAL EXCEPTION: main
01-06 16:56:25.124: E/AndroidRuntime(12733): Process: com.nom.sudokuhint, PID: 12733
01-06 16:56:25.124: E/AndroidRuntime(12733): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.nom.sudokuhint/com.nom.sudokuhint.MainActivity}: java.lang.NullPointerException
01-06 16:56:25.124: E/AndroidRuntime(12733):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2121)
01-06 16:56:25.124: E/AndroidRuntime(12733):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
01-06 16:56:25.124: E/AndroidRuntime(12733):    at android.app.ActivityThread.access$800(ActivityThread.java:135)
01-06 16:56:25.124: E/AndroidRuntime(12733):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
01-06 16:56:25.124: E/AndroidRuntime(12733):    at android.os.Handler.dispatchMessage(Handler.java:102)
01-06 16:56:25.124: E/AndroidRuntime(12733):    at android.os.Looper.loop(Looper.java:136)
01-06 16:56:25.124: E/AndroidRuntime(12733):    at android.app.ActivityThread.main(ActivityThread.java:5017)
01-06 16:56:25.124: E/AndroidRuntime(12733):    at java.lang.reflect.Method.invokeNative(Native Method)
01-06 16:56:25.124: E/AndroidRuntime(12733):    at java.lang.reflect.Method.invoke(Method.java:515)
01-06 16:56:25.124: E/AndroidRuntime(12733):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
01-06 16:56:25.124: E/AndroidRuntime(12733):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
01-06 16:56:25.124: E/AndroidRuntime(12733):    at dalvik.system.NativeStart.main(Native Method)
01-06 16:56:25.124: E/AndroidRuntime(12733): Caused by: java.lang.NullPointerException
01-06 16:56:25.124: E/AndroidRuntime(12733):    at com.nom.sudokuhint.Sudoku.stringify(Sudoku.java:44)
01-06 16:56:25.124: E/AndroidRuntime(12733):    at com.nom.sudokuhint.Sudoku.<init>(Sudoku.java:21)
01-06 16:56:25.124: E/AndroidRuntime(12733):    at com.nom.sudokuhint.MainActivity.<init>(MainActivity.java:17)
01-06 16:56:25.124: E/AndroidRuntime(12733):    at java.lang.Class.newInstanceImpl(Native Method)
01-06 16:56:25.124: E/AndroidRuntime(12733):    at java.lang.Class.newInstance(Class.java:1208)
01-06 16:56:25.124: E/AndroidRuntime(12733):    at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
01-06 16:56:25.124: E/AndroidRuntime(12733):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2112)
01-06 16:56:25.124: E/AndroidRuntime(12733):    ... 11 more
Sudoku.java

package com.nom.sudokuhint;

public class Sudoku {
int matrix[][];
String solveable;
String start[][];
String end[][];
String attempt[][];
String editList[];

public Sudoku() {
    matrix = new int[][] {
            { 0, 0, 0, 0, 0, 0, 0, 6, 0 }, // evil level just to start
            { 8, 0, 2, 0, 0, 3, 0, 0, 0 }, { 6, 0, 0, 8, 9, 0, 0, 3, 0 },
            { 0, 1, 0, 9, 0, 0, 7, 0, 4 }, { 0, 0, 0, 0, 8, 0, 0, 0, 0 },
            { 7, 0, 5, 0, 0, 2, 0, 9, 0 }, { 0, 2, 0, 0, 3, 8, 0, 0, 5 },
            { 0, 0, 0, 4, 0, 0, 1, 0, 2 }, { 0, 4, 0, 0, 0, 0, 0, 0, 0 } };
    stringify(matrix, start);
    stringify(matrix, attempt);
    solveMatrix();
    stringify(attempt, editList);
}

static void stringify(int[][] cells, String[][] data) {
    data = new String[9][9];

    for (int i = 0; i < 9; i++) {
        for (int j = 0; j < 9; j++) {
            if (cells[i][j] == 0) {
                data[i][j] = " ";
            } else {
                data[i][j] = String.valueOf(cells[i][j]);
            }
        }
    }
}

public void stringify(String[][] Old, String[] data) {
    data = new String[81];
    int c = 0;

    for (int i = 0; i < 9; i++) {
        for (int j = 0; j < 9; j++) {
            data[c] = Old[i][j];
            c++;
        }
    }
}

public boolean solveMatrix() {
    if (solve(0, 0, matrix)) {
        stringify(matrix, end);
        return true;
    } else {
        return false;
    }
}

public String checkMatrix() {
    int count = 0;
    String temp = "";
    for (int i = 0; i < 9; i++) {
        for (int j = 0; j < 9; j++) {
            if (attempt[i][j] != end[i][j] && attempt[i][j] != "Hint?"
                    && attempt[i][j] != " ") {
                count++;
            }
        }
    }
    if (count != 0) {
        temp = "So far you have " + String.valueOf(count) + " mistakes";
    } else {
        temp = "Nice, no mistakes so far";
    }
    return temp;
}

public String hintMatrix(int x) {
    int i = (x / 9);
    int j = (x % 9);
    attempt[i][j] = end[i][j];
    return attempt[i][j];
}

public void hintMatrix() {

}

public void setMatrix(int i, int j, String data) {
    attempt[i][j] = data;
}

static boolean solve(int i, int j, int[][] cells) {
    if (i == 9) {
        i = 0;
        j++;
        if (j == 9) {
            return true;
        }
    }

    if (cells[i][j] != 0) {
        return solve(i + 1, j, cells);
    }

    for (int val = 0; val < 9; val++) {
        if (legal(i, j, val, cells)) {
            cells[i][j] = (val + 1);
            if (solve(i + 1, j, cells)) {
                return true;
            }
        }
    }

    cells[i][j] = 0;
    return false;
}

static boolean legal(int i, int j, int val, int[][] cells) {
    for (int k = 0; k < 9; k++) {
        if ((val + 1) == cells[k][j]) {
            return false;
        }
    }

    for (int k = 0; k < 9; k++) {
        if ((val + 1) == cells[i][k]) {
            return false;
        }
    }

    int boxRowOffset = (i / 3) * 3;
    int boxColOffset = (j / 3) * 3;
    for (int k = 0; k < 3; k++) {
        for (int m = 0; m < 3; m++) {
            if ((val + 1) == cells[boxRowOffset + k][boxColOffset + m]) {
                return false;
            }
        }
    }

    return true;
}
}

您需要在扩展布局后检索UI元素,否则findViewById将返回null,因此行表.addViewcurrentRow;上的NPE将返回null

将其更改为:

TableLayout table;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main); //inflate the layout
    table = (TableLayout) findViewById(R.id.sudokuPuzzle); //it's ok now

这是你的问题线:

TableLayout table = (TableLayout) findViewById(R.id.sudokuPuzzle);

移动表格=TableLayout findViewByIdR.id.sudokuPuzzle;在调用setContentView后进入onCreate,而不仅仅是无用的部分。请提供完整的stacktrace,以便我们可以看到错误是什么。此外,利用这个机会实际读取错误,您将看到什么是空的,您会想知道为什么,因为您给了它一个值,然后你就可以理解为什么邹祖和拉格哈夫·苏德给出的答案是有意义的了。谢谢你,原来是我的课,我以前做过,我把它改了回去,但还是有同样的错误