2016-11-12 56 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?"); 
    } 
} 

} 

下面是從文件coma.in

3 
1495 Constantinople 
1962 JFK 
1990 USSR 
+0

你確定'temp'擁有多個元素嗎?你應該首先檢查'split'調用實際上是否分割了一些東西(並且不返回一個大小爲1的數組) – UnholySheep

+0

問題在於你的輸入數據 – developer

+0

請提供一些文件 –

回答

1

輸入的問題是最有可能與您的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),您必須添加另一個sc.nextLine()以實際使用2之後的(空)字符串才能到達下一行。然後您可以拆分空字符串這反過來又導致ArrayIndexOutOfBoundsException作爲結果數組只是長度1的:由於對nextIntnextFloat這種行爲的

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

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

。等方法,我傾向於使用nextLineparse...方法偏愛:

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

您可以更換:

NUM_LINES=sc.nextInt(); 

由:

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

它會正常工作。