2016-11-12 17 views
0

私のコードでは、入力ファイル、それに含まれる文字列、空白があればどこでも分割して文字列を別々に出力することになっています。私は、変数に分割し、それらの文字列を割り当てるために、配列を使用してみましたので、私はそれらをプリントアウトしたいが、私は取得しておくとき、私はそれらにアクセスできるような方法は、配列のインデックスから文字列を取得しても動作しません

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 100 
at Coma.main(Coma.java:26) 

誰かが私を助けてくださいことはできますか? StackOverflowを初めて使用したので、この質問の書式を間違えてください。

ここに私のコードは

import java.io.File; 
import java.util.Scanner; 
import java.io.*; 
import java.util.*; 
import java.lang.ArrayIndexOutOfBoundsException; 

public class Coma { 

public static void main(String[] args)throws IOException { 
    // TODO Auto-generated method stub 
    String SENTENCE; 
    int NUM_LINES; 
    Scanner sc= new Scanner(new File("coma.in")); 
    NUM_LINES=sc.nextInt(); 

    for(int i=0;i<NUM_LINES;i++){ 
     SENTENCE=sc.nextLine(); 
     String [] temp; 
     String delimiter=" "; 
     temp=SENTENCE.split(delimiter); 
     String year= temp[0]; 
     String word=temp[1]; 

     System.out.println("Nurse: Sir you've been in a coma since " + year  + "\nMe: How's my favorite " + word + " doing?"); 
    } 
} 

} 

です。ここ

3 
1495 Constantinople 
1962 JFK 
1990 USSR 
+0

あなたは 'temp'が複数の要素を保持していると確信していますか?最初に 'split'呼び出しが実際に何かを分割していることを確認してください(サイズ1の配列は返されません) – UnholySheep

+0

問題は入力データにあります – developer

+0

ファイルからいくつかの行を入力してください –

答えて

1

coma.inファイルからの入力は、問題があなたのcoma.inファイル形式と最も可能性があります。正しいファイルを想定ししかし は、そのようにフォーマット:

data.txtを

20チーム

10犬

あなたはこれにあなたのコードを簡素化できます。

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.Scanner; 

public class ReadFile { 

    public static void main(String[] args) throws FileNotFoundException { 
     Scanner sc = new Scanner(new File("data.txt")); 
     // default delimiter is whitespace (Character.isWhitespace) 
     while (sc.hasNext()) { // true if another token to read 
      System.out.println("Nurse: Sir you've been in a coma since " 
        + sc.next() + "\nMe: How's my favorite " 
        + sc.next() + " doing?"); 
     } 
    } 

} 
1

あなたのファイル形式がかなったようなものであると仮定すると:

2 
1981 x 
1982 y 

その後

sc.nextInt(); // only moves sc past the next token, NOT beyond the line separator 

のみ2を読んで、右が停止し、は改行を消費しませう!したがって、次の行(1981 x)を読むためには、次の行に到達するために2の後に(空の)文字列を実際に消費するために別のsc.nextLine()を追加する必要があります。そのためnextIntnextFloatのこの動作の

//... 
NUM_LINES=sc.nextInt(); 
sc.nextLine(); // add this line; 

for(int i=0;i<NUM_LINES;i++){ 
    SENTENCE=sc.nextLine(); 
    //... 

:あなたはその後、順番に結果の配列は、長さだけ1であるようArrayIndexOutOfBoundsExceptionにつながる空の文字列を分割しています。

NUM_LINES=sc.nextInt(); 

によって:

NUM_LINES=Integer.parseInt(sc.nextLine().strip()); 
1

あなたは置き換えることができますなどの方法が、私はnextLineparse...メソッドを使用して好む傾向にある

NUM_LINES=Integer.valueOf(sc.nextLine()); 

そしてそれは正常に動作します。

関連する問題