2012-04-24 2 views
0

Существует список рангов, имен и популярности 1 Джейк 21021 (ранг, фактическое имя, сколько детей было дано в том году) Я пытаюсь принять эти три отдельные вещи и разделить их на массивы. Таким образом, если пользователь ищет звание «Джейк»: 1 выскакивает и так делает 21021. Это то, что я до сих пор ...Ввод имен и номеров из текстового файла в массивы

import java.util.*; 
import java.io.*; 

public class Test 
{ 
    public static void main(String[] args) 

    { 
     Scanner inputStream = null; 
     try 
     { 
      inputStream = new Scanner(new FileInputStream("src/boynames.txt")); 
     } 
     catch (FileNotFoundException e) 
     { 
      System.out.println("Sorry we couldn't find the requested file..."); 
      System.out.println("Exiting..."); 
      System.exit(0); 
     } 
     //Initializing the BOY Variables 
     int[] counter = new int[1]; 
     String[] name = new String[1]; 
     int[] popularity = new int[1]; 
     //End of initializing BOY variables 
     for (int i=0; i <1000;i++) 
     { 
      counter[0] = 1; 
      name[i] = inputStream.next(); 
      popularity[i]=inputStream.nextInt(); 
      System.out.print(counter[i] + " " + name[i] + " " + popularity[i]); 
      counter[i] = counter[i] + 1 ; 
     } 
    } 
} 

я получаю сообщение об ошибке

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 
    at Test.main(Test.java:27) 

любой помощь была бы потрясающей! спасибо

+0

вы должны заглянуть в «Карта», вы можете создать новый класс для хранения всей информации и использовать «Имя» в качестве ключа. http://docs.oracle.com/javase/6/docs/api/java/util/Map.html – twain249

ответ

1

Вы инициализируетесь name как массив размера 1, но затем вы ссылаетесь name[i], где i рассчитывает до 1000. name[0] работ, но как только вы достигнете name[1], вы получите исключение.

Вы должны инициализировать name как String[1000]. Или (еще лучше) используйте ArrayList, который расширяется при добавлении к нему элементов.

+0

Как я могу использовать ArrayList, я должен определить его как отдельный класс или это встроенный метод? –

+0

ArrayList (java.util.ArrayList) - это встроенный объект коллекции java: http://docs.oracle.ком/JavaSE/6/документы/API/Java/Util/ArrayList.html –

1

Поскольку длина массива имен равна 1, максимальный индекс имени равен 0. поэтому во время следующей итерации цикла, когда i = 1, эта строка будет за пределами.

name[i] = inputStream.next(); 
+0

okay - у меня есть распечатка всех имен с порядком ранг, имя, сколько раз имя был использован - как я вижу, были ли они помещены в массивы? –

+0

int [] counter = new int [1000]; \t \t String [] name = new String [1000]; \t \t int [] popular = new int [1000]; \t \t // Конец инициализации переменных BOY \t \t для (INT I = 0; я <1000; я ++) \t \t { \t \t \t имя [я] = inputStream.next(); \t \t \t популярность [i] = inputStream.nextInt(); \t \t \t счетчик [i] = i + 1; \t \t \t System.out.print (counter [i] + "" + name [i] + "" + популярность [i] + "\ n"); \t \t} –

+0

Я сделал legnths равным 1000, чтобы он мог распечатать все ... но на самом деле то, что я хочу, чтобы программа выполняла, - это хранить массив и иметь их для поиска –

1

На первый взгляд, вы создаете массив размером 1 (new int[1], и т.д.), а затем пытается индексов 0-999 доступа внутри вашего для петли. Если вы хотите, чтобы массив имел 1000 позиций в нем, как требуется для цикла for, вам следует создать массив, такой как new int[1000].

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