0

2 つのファイルを読み込んでいますが、ファイル 1 の各行について、ファイル 2 のすべての行を合計したいと考えています。これまでのところ、以下のコードを作成しましたが、ファイルの最初の行に対してのみ実行します。以下は私のコードとサンプルファイルです。私が得ていることに注意してくださいjava.util.NoSuchElementException

 import java.io.*;
 import java.util.Scanner;
 import java.util.StringTokenizer;
    public class knn {
    public static void main (String[]args)throws IOException{
      Scanner in = new Scanner(new FileInputStream("knn.txt"));
      Scanner in2 = new Scanner(new FileInputStream("knn2.txt"));
        while(in.hasNextLine()){
           String linetoprocess = in.nextLine();
           StringTokenizer st = new StringTokenizer(linetoprocess, " :");
             while(in2.hasNextLine()){
                String linetoprocess2 = in2.nextLine();
                StringTokenizer st2 = new StringTokenizer(linetoprocess2, " :");
                System.out.print("("+st.nextToken()+","+st2.nextToken()+"), ");
                System.out.print("("+st.nextToken()+","+st2.nextToken()+"), ");
                System.out.print("("+st.nextToken()+","+st2.nextToken()+"), ");
                System.out.print("("+st.nextToken()+","+st2.nextToken()+"), ");
                System.out.print("("+st.nextToken()+","+st2.nextToken()+"), ");
                System.out.print("("+st.nextToken()+","+st2.nextToken()+"), ");
                System.out.print("("+st.nextToken()+","+st2.nextToken()+"), ");
                System.out.print("("+st.nextToken()+","+st2.nextToken()+"), ");
               System.out.println("("+st.nextToken()+","+st2.nextToken()+")");

            }
        }
    }

knn.txt

1 1:5.1 2:3.5 3:1.4 4:0.2
1 1:4.9 2:3.0 3:1.4 4:0.2
1 1:4.7 2:3.2 3:1.3 4:0.2

knn2.txt

1 1:5.4 2:3.7 3:1.5 4:0.2
1 1:4.8 2:3.4 3:1.6 4:0.2
1 1:4.8 2:3.0 3:1.4 4:0.1
1 1:4.3 2:3.0 3:1.1 4 :0.1

4

2 に答える 2

0

StringTokenizer は時代遅れになり、String.split(...) が支持されました。

ただし、コードを修正する限り、StringTokenizer.hasMoreTokens の周りに別のコードを追加することをお勧めします

于 2012-04-03T18:01:12.933 に答える
0

内側の while ループの前に st.nextToken() を呼び出して、後で使用できる変数に格納する必要があることがわかりました。ご提案いただきありがとうございます。完全なコードは以下のとおりです。

import java.io.*;
 import java.util.Scanner;
 import java.util.StringTokenizer;
 public class knn {
 public static void main (String[]args)throws IOException{
    Scanner in = new Scanner(new FileInputStream("knn.txt"));

    while(in.hasNextLine()){
        String linetoprocess = in.nextLine();
        StringTokenizer st = new StringTokenizer(linetoprocess, " :");
        Scanner in2 = new Scanner(new FileInputStream("knn2.txt"));
        String a = st.nextToken();
        String b = st.nextToken();
        String c = st.nextToken();
        String d = st.nextToken();
        String e = st.nextToken();
        String f = st.nextToken();
        String g = st.nextToken();
        String h = st.nextToken();
        String i = st.nextToken();

        while(in2.hasNextLine()){
        String linetoprocess2 = in2.nextLine();
        StringTokenizer st2 = new StringTokenizer(linetoprocess2, " :");
        System.out.print("("+a+","+st2.nextToken()+"), ");
        System.out.print("("+b+","+st2.nextToken()+"), ");
        System.out.print("("+c+","+st2.nextToken()+"), ");
        System.out.print("("+d+","+st2.nextToken()+"), ");
        System.out.print("("+e+","+st2.nextToken()+"), ");
        System.out.print("("+f+","+st2.nextToken()+"), ");
        System.out.print("("+g+","+st2.nextToken()+"), ");
        System.out.print("("+h+","+st2.nextToken()+"), ");
        System.out.println("("+i+","+st2.nextToken()+")");

        }
    }
}

}

于 2012-05-04T06:29:07.053 に答える