我得到java.lang.NullPointerException
我有一个类,在底部实现了smithWaterman算法,我决定把main放在GUI中,然后在矩阵中打印出来。我总是收到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
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&&leftinput2
为空,但在generate方法中的第一个调用是:
cell = new double[input1.length()][input2.length()];
您正在调用input2.length();
当您尝试对空指针执行任何操作时,它会导致nullpointerexception
你的代码有很多地方容易出现NullPointerException
。请确保在调用任何操作时,引用不是null
你能发布堆栈跟踪吗?并将代码中的行指向异常。使代码更干净,删除