2016-11-12 5 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

Предполагая, что ваш формат файла STH нравится:

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:

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

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

Из-за такого поведения nextInt, nextFloat. и т.д. методы, я, как правило, предпочитают использовать nextLine и parse... методы:

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

Вы можете заменить:

NUM_LINES=sc.nextInt(); 

по:

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

И это будет работать нормально.

Смежные вопросы