我正在尝试编写一个简单的解析算法来解析以下数据:
输入:
3 9 6
1 1 1.0
1 2 2.0
1 3 3.0
2 1 4.0
2 2 5.0
2 3 6.0
3 1 7.0
3 2 8.0
3 3 9.0
1 1 1.0
1 3 1.0
2 2 1.0
3 1 1.0
3 2 1.0
3 3 1.0
预期输出:
A has 9 non-zero entries:
1: (1, 1.0) (2, 2.0) (3, 3.0)
2: (1, 4.0) (2, 5.0) (3, 6.0)
3: (1, 7.0) (2, 8.0) (3, 9.0)
B has 5 non-zero entries:
1: (1, 1.0) (3, 1.0)
3: (1, 1.0) (2, 1.0) (3, 1.0)
第一行提供以下数据:3 =矩阵的大小(3×3),9 =第一矩阵的非零值的数量,以及6 =第二矩阵的值的数量。接下来的9组线是要在第一个矩阵中输入的值。最后6行是要在第二个矩阵中输入的值。程序解析第一行,第一个矩阵的9个值和第二个矩阵的6个值,但是我的程序永远不会终止并陷入连续循环中,我无法理解为什么,任何帮助都会非常感激!
import java.io.*;
import java.util.Scanner;
class Sparse{
public static void main(String[] args) throws IOException{
Scanner in = null;
PrintWriter out = null;
String line = null;
String[] token = null;
int i, j, k, n = 0;
int lineNumber = 0;
double x = 0;
if(args.length < 2){
System.out.println("Usage: FileIO infile outfile");
System.exit(1);
}
in = new Scanner(new File(args[0]));
out = new PrintWriter(new FileWriter(args[1]));
int size = in.nextInt();
int nnzA = in.nextInt();
int nnzB = in.nextInt();
Matrix A = new Matrix(size);
Matrix B = new Matrix(size);
in.nextLine();
for (i = 0; i < nnzA; i++){
j = in.nextInt();
k = in.nextInt();
x = in.nextDouble();
A.changeEntry(j,k,x);
}
in.nextLine();
while (in.hasNextLine()){
if (in.hasNext()){
j = Integer.parseInt(in.next());
k = Integer.parseInt(in.next());
x = Double.parseDouble(in.next());
B.changeEntry(j,k,x);
}else{
in.close();
break;
}
}
out.println("A has " + A.getNNZ() + " non-zero entries:");
out.println(A);
out.println("A has " + B.getNNZ() + " non-zero entries:");
out.println(B);
}
}
答案 0 :(得分:-1)
原来问题不在我的解析中,而在我的一个toString方法中用于打印矩阵。解析函数现在没有问题,(我确实在第二个循环中切换回使用for循环而不是while循环。)。