我的解析算法问题(java)

时间:2014-02-08 09:08:32

标签: java parsing matrix

我正在尝试编写一个简单的解析算法来解析以下数据:

输入:

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);
  }
}

1 个答案:

答案 0 :(得分:-1)

原来问题不在我的解析中,而在我的一个toString方法中用于打印矩阵。解析函数现在没有问题,(我确实在第二个循环中切换回使用for循环而不是while循环。)。