2016-11-27 50 views
0

最後の入力行に問題があります。 Scannerに未完成のため最後の行の番号を読み込ませることはできません。直前の最後の行の後にもう一行入力して入力をコピーすると、問題はありませんが、余分な行はありません。スキャナに未完線を強制的に読み取らせる方法

Link to problem

入力の例:

2 
1 1 
9 9 
4 
4 5 
6 5 
2 5 
3 4 

-1 

私はsc.nextInt()sc.next()sc.nextLine()を試したし、何も-1に到達することはできません。 sc.hasNextsc.hasNextIntなども待っています。取得しようとする前に

while(true) 
    { 
     line = sc.nextLine(); 
     try { 
      a = Integer.parseInt(line); 
     } 
     catch (NumberFormatException e) { 
     } 

     if(a == -1) 
     { 
      break; 
     } 

     rr = new int[a][2]; 

     for(int i = 0; i < a; i++) 
     { 
      line = sc.nextLine(); 
      numbers = line.split(" "); 

      try { 
       rr[i][0] = Integer.parseInt(numbers[0]); 
       rr[i][1] = Integer.parseInt(numbers[1]); 
      } 
      catch (NumberFormatException e) { 
      } 

     } 

     b = sc.nextInt(); 

     sc.nextLine(); 

     tt = new int[b][2]; 

     for(int i = 0; i < b; i++) 
     { 
      line = sc.nextLine(); 
      numbers = line.split(" "); 

      try { 
       tt[i][0] = Integer.parseInt(numbers[0]); 
       tt[i][1] = Integer.parseInt(numbers[1]); 
      } 
      catch (NumberFormatException e) { 
      } 

     } 
     sc.nextLine(); 

    } 
+1

すべての行をnextLineで読み込みます。 2番目のステップとして整数を解析してください –

+1

試みましたが、残念ながらそれは仕事をしませんでした。おそらく、行末や何かを待ちます。 –

+0

これを試してみようhttp://stackoverflow.com/questions/5868369/how-to-read-a -large-text-file-line-using-javaは助けてください –

答えて

0

-1あなたは別のスキャナーが区切り文字/ N(改行)を使用し、それは-1とその前の最後の行の間に余分な区切りを削除している可能性があります。それから、.nextLine()または.nextInt()を使ってスキャンするだけです。

+0

それは同じものではありません.nextLine()は同じ場所にありますか? –

+0

.nextLine()は、次の行にあるものを返します。私が提案しているのは、スキャナを設定して空白行を検索し、ファイルを編集して空白行を含まないようにすることです。その後、それは通過し、必要な整数を取得します。もう1つの空の行と他の数とを分けることがなくなるため、-1になることは問題ありません。 –

1
while(true) { 
    // read the line.. 
    line = sc.nextLine().trim(); 
    // check if it's a blank line... 
    // blank line means new test case.. Take the value of n 
    if (line.length() == 0) line = sc.nextLine().trim(); 

    // now parse the value of n.. If it's -1 then end of input 
    a = Integer.parseInt(line); 
    if (a==-1) break; 

    // rest of your input 
} 

このようbの値を取る:

b = Integer.parseInt(sc.nextLine().trim()); 

そしてbの下側からとwhileループの下から '余分な' sc.nextLine()を削除します。その場合は上部で処理されます。

+0

どちらも機能しません。私はそれをデバッグしようとしたが、if(line.length()== 0)行= sc.nextLine(); –

+0

次のサイトを使用してください:http://uhunt.felix-halim.net/id/377362 https://www.udebug.com/UVa/12389私は自分の答えを編集しました。あなたはおそらくあなたがそれを解析する前に文字列をトリムする必要があります。 – rafid059

関連する問題