Чтение из двух файлов и получение кросс-произведения - PullRequest
0 голосов
/ 03 апреля 2012

Я читаю два файла и хочу для каждой строки в файле один суммировать все строки в файле два.Пока что я написал код ниже, но он делает это только для первой строки в файлах.Ниже мой код и примеры файлов.Примечание Я получаю 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

Ответы [ 2 ]

0 голосов
/ 04 мая 2012

Я понял, что должен был вызвать st.nextToken () перед внутренним циклом while и сохранить их в переменной, которую я смогу использовать позже. Спасибо за ваши предложения. Полный код ниже.

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()+")");

        }
    }
}

}

0 голосов
/ 03 апреля 2012

StringTokenizer вышел из моды, в пользу String.split (...)

Но что касается исправления вашего кода, я бы посоветовал вам добавить еще один, в то время как StringTokenizer.hasMoreTokens

...