2014-11-15 2 views
0
import java.util.Scanner; 

class HistogramChart 
{ 
    public static void main(String[] args) 
    { 
     Scanner scan = new Scanner(System.in); 

     System.out.println("Please enter the population of data: "); 
     int populationOfData = scan.nextInt(); 

     System.out.println("Please enter data separated by spaces: "); 
     String data = scan.next(); 

     int indexWhiteSpace = data.indexOf(" "); 

     int[] dataArray = new int[populationOfData]; 
     int tempInt = 0; 

     for(int index = 0; index < populationOfData; index++) 
     { 
     String tempString = data.substring(0, indexWhiteSpace); 
     data = data.substring(indexWhiteSpace+1, data.length()); 
     tempInt = Integer.parseInt(tempString); 

     dataArray[index] = tempInt; 
     indexWhiteSpace = data.indexOf(" "); 
     } 
     System.out.println(dataArray[0]); 
    } 
} 

Я понимаю, что еще ничего не распечатать весь массив, поскольку я просто пытаюсь его распечатать, но это постоянно печатает следующие ошибки:Возьмите один линейный ввод чисел и сохраните его в массиве

«Исключение в потоке„основной“java.lang.StringIndexOutOfBoundsException: индекс строка из диапазона: -1 в java.lang.String.substring (String.java:1954) в HistogramChart.main (HistogramChart.java:22) « Я не могу понять, почему это так. Пожалуйста, помогите!

+1

Это говорит так, потому что вы пытаетесь получить доступ к чему-то вне границ массива. Не рассматривая свой код, пожалуйста, помогите себе, отлаживая это. Поместите контрольную точку и пройдите и посмотрите, где она сработает. – mattias

+0

Scanner.Next() вернет только первое слово. Это означает, что data.IndexOf ("") будет -1, что даст вам исключение SystemIndexOutOfBoundsException. – Simon

ответ

2

Почему бы не использовать сплит?

class HistogramChart { 

    public static void main(String[] args) { 
     Scanner scan = new Scanner(System.in); 

     System.out.println("Please enter data separated by spaces: "); 
     String data = scan.nextLine(); 

     String tmpDataArray[] = data.split(" "); 

     int dataArray[] = new int[tmpDataArray.length]; 
     for (int i = 0; i < dataArray.length; ++i) { 
      dataArray[i] = Integer.parseInt(tmpDataArray[i]); 
     } 
} 
+0

Я нахожусь в CS первого года, поэтому я не совсем уверен, что такое раскол, что бы это точно? –

+0

Я предусмотрел разделить параметр «», который является пустым пространством, поэтому он будет помещать в массив каждое слово, которое разделяется символом «» –

+0

. О, ладно! оттуда я мог бы затем создать метод для синтаксического анализа строкового массива в целочисленный массив? –

-1

Если я правильно помню, используя

String data = scan.next(); 

Как вы делаете, вы будете просто сканировать один элемент. Попробуйте использовать scan.nextLine(), чтобы он взял всю строку, а затем разделил пробелы, чтобы получить массив ваших данных. И проблема, которую это на самом деле дает вам, заключается в том, что вы ищете indexOf(" "), но поскольку вы не читаете полную строку, это происходит небыло, и вы получаете -1. Когда вы пытаетесь найти подстроку с индексом -1, вы получите эту ошибку.

+0

это имеет смысл, но каждый раз, когда я пробовал его с помощью scan.nextLine(), он пропускает вход и просто продолжает код. –

+0

Вам нужно спуститься по одной линии. Используйте scanner.nextLine() после nextInt(), а затем сохраните следующую строку. Проверьте код в IDEONE: http://ideone.com/8UOhhF –

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