2

私はかなり単純なことを試みています。

次の入力を 1 行ずつ読み取って、行ArrayListごとに整数の を作成する必要があります。

2 5 10
3 5 15

次のコードを使用して処理しようとしています

while((newLine=f.readLine()) != null){
    for(int k=0; k<newLine.length(); k++){
        StringTokenizer st = new StringTokenizer(newLine);
        int i1 = Integer.parseInt(st.nextToken()); 
        System.out.println("Adding to list"+i1);
        input.add(i1);
    }
}

ご覧のとおり、次のトークンに移動するのではなく、毎回再初期化stしています。newLine私が意図していることをどのように達成できるかについて何か考えはありますか?

4

3 に答える 3

1

ループ内のArrayList複数回に最初のトークンを追加しています。forトークンを繰り返すだけです:

while ((newLine=f.readLine()) != null){
   StringTokenizer st = new StringTokenizer(newLine);
   while (st.hasMoreTokens()) {
      int number = Integer.parseInt(st.nextToken()); 
      input.add(number);
   }
}
于 2013-04-21T00:55:40.383 に答える
1

トークナイザー ステートメントは直接外側のループにある必要があります。

while((newLine=f.readLine())!=null){
     StringTokenizer st = new StringTokenizer(newLine);  //this must be once for every line. not for every character in each line
     while(st.hasNext()){

         int i1 = Integer.parseInt(st.nextToken()); 
         System.out.println("Adding to list"+i1);
         input.add(i1);
     }
}
于 2013-04-21T00:56:17.227 に答える
1

行の長さを繰り返す必要はありません。代わりに、トークナイザーによって返されたすべてのトークンを反復処理してリストに入れる必要があります.1行で完了したら、そのリストを別のリストに入れるため、リストのリストになります

List<List<Integer>> linesOfIntegers = new ArrayList<>(); 

while((newLine = f.readLine()) != null) {
    StringTokenizer st = new StringTokenizer(newLine);
    List<Integer> lineOfIntegers = new ArrayList<>();
    while(st.hasMoreTokens()) {
        lineOfIntegers.add(Integer.parseInt(st.nextToken()));
    }
    linesOfIntegers.add(lineOfIntegers);
}

for(List<Integer> lineOfIntegers : linesOfIntegers) {
    System.out.println(lineOfIntegers);
}

出力

[2, 5, 10]
[2, 5, 15]
于 2013-04-21T00:58:07.027 に答える