Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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.lang.NullPointerException_Java_User Interface_Nullpointerexception - Fatal编程技术网

我得到java.lang.NullPointerException

我得到java.lang.NullPointerException,java,user-interface,nullpointerexception,Java,User Interface,Nullpointerexception,我有一个类,在底部实现了smithWaterman算法,我决定把main放在GUI中,然后在矩阵中打印出来。我总是收到NullPointerException。我不知道如何修复它,有人看到错误吗?多谢各位 package main; import java.util.*; import java.util.*; import java.applet.Applet; import java.awt.BorderLayout; import java

我有一个类,在底部实现了smithWaterman算法,我决定把main放在GUI中,然后在矩阵中打印出来。我总是收到NullPointerException。我不知道如何修复它,有人看到错误吗?多谢各位

    package main;

    import java.util.*;
    import java.util.*;
    import java.applet.Applet;
    import java.awt.BorderLayout;
    import java.awt.Container;
    import java.awt.List;
    import java.lang.Math;
    import javax.swing.DefaultListModel;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JList;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.JTextField;
    import javax.swing.JTextPane;
    import javax.swing.ListModel;
    import javax.swing.table.AbstractTableModel;
    import javax.swing.table.TableColumn;
    import javax.swing.table.TableModel;
    import java.lang.Math;

    /**
     * Smith-Waterman Algorithm:
     * 
     * @author Jomana Sherif Final Project SE 165 Fall2012
     */
    public class smithWaterman2 {

        // Initializing the two array lists of the input
        StringBuffer store1 = new StringBuffer(0);
        StringBuffer store2 = new StringBuffer(0);
        String input1 = null;
        String input2 = null;
        double cell[][];
        double matchValue = 1.0;
        double misMatchValue = -0.3;
        double diagonal = 0.0;
        double gapValue = 0.3;
        double max = 0.0;
        int maxacross = 0;
        int maxdown = 0;

        /**
         * Print Matrix
         * 
         * @param args
         */
        public void printMatrix() {
            System.out.print(" | ");
            for (int i = 0; i < input2.length(); i++) {
                System.out.print(input2.charAt(i) + "  | ");

            }
            System.out.println("  ");
            for (int across = 0; across < input1.length(); across++) {

                for (int down = 0; down < input2.length(); down++) {
                    if (down == 0) {
                        System.out.print(input1.charAt(across) + "|");
                    }
                    System.out.printf("%1$.1f", cell[across][down]);

                    System.out.print(" |");
                }
                System.out.println(" ");
            }

        }

        public void generate() {
            /**
             * Creating the NxN matrix
             * 
             * @param args
             */

            cell = new double[input1.length()][input2.length()];

            /**
             * Computation
             * 
             * @param args
             */
            for (int across = 0; across < input1.length(); across++) {
                for (int down = 0; down < input2.length(); down++) {
                    // Factor 1-3 goes here

                    /**
                     * Factor 1
                     */
                    double match = 0.0;
                    double f2 = 0.0;
                    double f3 = 0.0;

                    if (input1.charAt(across) == (input2.charAt(down))) {
                        match = matchValue;

                    } else {
                        match = misMatchValue;
                    }
                    // diagonal
                    if (across < 1 || down < 1) {
                        diagonal = 0;
                    } else {
                        diagonal = cell[across - 1][down - 1];
                    }
                    double f1 = diagonal + match;

                    /**
                     * Factor 2
                     */
                    for (int k = across - 1; k >= 0; k--) {
                        if (cell[k][down] != 0) {
                            f2 = cell[k][down] - (gapValue * (across - k));
                        }
                    }
                    /**
                     * Factor 3
                     */
                    for (int l = down - 1; l >= 0; l--) {
                        if (cell[across][l] != 0) {
                            f3 = cell[across][l] - (gapValue * (down - l));
                        }

                    }
                    double cellValue = Math.max(Math.max(Math.max(f1, f2), f3), 0);
                    cell[across][down] = cellValue;
                    if (cellValue >= max) {
                        max = cellValue;
                        maxacross = across;
                        maxdown = down;
                    }

                }

            }
            System.out.println("Max equals:" + max);
            System.out.println("Max down:" + maxacross);
            System.out.println("Max across:" + maxdown);

        }

        /**
         * Optimal Solution Calculation
         */
        public void optimal() {

            int x = maxacross;
            int y = maxdown;
            // starting from the max
            store1.append(input1.charAt(x));
            store2.append(input2.charAt(y));

            while (x > 0 && y > 0) {

                double left = cell[x - 1][y];
                double diagonal = cell[x - 1][y - 1];
                double up = cell[x][y - 1];
                if (left <= diagonal && up <= diagonal) {
                    x = x - 1;
                    y = y - 1;
                    store1.append(input1.charAt(x));
                    store2.append(input2.charAt(y));
                } else if (left >= diagonal && left >= up) {
                    x = x - 1;
                    y = y;
                    store1.append(input1.charAt(x));
                    store2.append('-');
                } else if (up >= diagonal && left <= up) {
                    x = x;
                    y = y - 1;
                    store1.append('-');
                    store2.append(input2.charAt(y));
                }

            }
            store1.reverse();
            store2.reverse();
            System.out.println("store1:" + store1);
            System.out.println("store2:" + store2);

        }

        /**
         * Main Method
         */

        public static void main(String[] args) {

            smithWaterman2 sw = new smithWaterman2();
            sw.generate();
            sw.printMatrix();
            sw.optimal();


        }
    }
packagemain;
导入java.util.*;
导入java.util.*;
导入java.applet.applet;
导入java.awt.BorderLayout;
导入java.awt.Container;
导入java.awt.List;
导入java.lang.Math;
导入javax.swing.DefaultListModel;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JList;
导入javax.swing.JOptionPane;
导入javax.swing.JPanel;
导入javax.swing.JScrollPane;
导入javax.swing.JTable;
导入javax.swing.JTextField;
导入javax.swing.JTextPane;
导入javax.swing.ListModel;
导入javax.swing.table.AbstractTableModel;
导入javax.swing.table.TableColumn;
导入javax.swing.table.TableModel;
导入java.lang.Math;
/**
*史密斯-沃特曼算法:
* 
*@作者Jomana Sherif最终项目SE 165 2012年秋季
*/
公共级史密斯沃特曼2{
//初始化输入的两个数组列表
StringBuffer store1=新的StringBuffer(0);
StringBuffer store2=新的StringBuffer(0);
字符串input1=null;
字符串input2=null;
双细胞[];
双匹配值=1.0;
双错配值=-0.3;
双对角线=0.0;
双间隙值=0.3;
双最大值=0.0;
int maxcross=0;
int maxdown=0;
/**
*打印矩阵
* 
*@param args
*/
公共空白打印矩阵(){
系统输出打印(“|”);
for(int i=0;i=0;k--){
如果(单元格[k][down]!=0){
f2=单元格[k][down]-(GAP值*(跨-k));
}
}
/**
*因素3
*/
对于(int l=down-1;l>=0;l--){
如果(单元格[跨][l]!=0){
f3=单元格[跨][l]-(gapValue*(向下-l));
}
}
双单元值=数学最大值(数学最大值(数学最大值(f1,f2),f3),0);
单元格[横过][向下]=单元格值;
如果(单元值>=最大值){
最大值=单元值;
maxcross=cross;
maxdown=down;
}
}
}
System.out.println(“Max等于:”+Max);
System.out.println(“最大向下:+maxCross”);
System.out.println(“最大跨距:+maxdown”);
}
/**
*最优解计算
*/
公共空间优化(){
int x=maxcross;
int y=maxdown;
//从最大值开始
store1.append(input1.charAt(x));
store2.append(input2.charAt(y));
而(x>0&&y>0){
左双=单元格[x-1][y];
双对角线=单元格[x-1][y-1];
双向上=单元[x][y-1];
如果(左=上){
x=x-1;
y=y;
store1.append(input1.charAt(x));
store2.追加('-');

}否则,如果(向上>=diagonal&&left
input2
为空,但在generate方法中的第一个调用是:

cell = new double[input1.length()][input2.length()];
您正在调用
input2.length();
当您尝试对空指针执行任何操作时,它会导致
nullpointerexception


你的代码有很多地方容易出现
NullPointerException
。请确保在调用任何操作时,引用不是
null

你能发布堆栈跟踪吗?并将代码中的行指向异常。使代码更干净,删除