2012-04-24 8 views
0

ランク、名前、人気のリストがあります1 Jake 21021(ランク、実際の名前、その年に何人の赤ちゃんにその名前が与えられたか)私はこれらを取ろうとしています3つの別々のものを配列に分割します。最大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

あなたは 'Map'を調べて、すべての情報を保持し、' Name'をキーとして使う新しいクラスを作ることができます。 http://docs.oracle.com/javase/6/docs/api/java/util/Map.html – twain249

答えて

1

あなたはサイズ1の配列としてnameを初期化しましたが、その後はiは1000 name[0]作品までカウントされますが、できるだけ早くあなたがname[1]に達すると、あなたは例外を取得name[i]を参照します。

nameString[1000]として初期化する必要があります。または、ArrayListを使用することをお勧めします。これは、項目を追加するときに展開されます。

+0

どのようにArrayListを使用するのですか?別のクラスとして定義する必要がありますか、それとも組み込みのメソッドですか? –

+0

ArrayList(java.util.ArrayList)は、組み込みのJavaコレクションオブジェクトです(http://docs.oracle)。com/javase/6/docs/api/java/util/ArrayList.html –

1

名前配列の長さが1であるため、名前の最大インデックスは0です。したがって、i = 1の次のループ反復では、この行は範囲外になります。一見

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

大丈夫 - すべての名前を注文して印刷します ランク、名前、回数使用されました - どのように配列に入れられているかどうかを確認するには? –

+0

int []カウンタ=新しいint [1000]; \t \t String [] name = new String [1000]; \t \t int [] popularity = new int [1000];初期化BOY変数の \t \t //エンド \t \tがため(INT I = 0、I 1000 <; iは++) \t \t { \t \t \t名[I] = inputStream.next()。 \t \t \t popularity [i] = inputStream.nextInt(); counter [i] = i + 1; \t \t \t;\t \t \t [counter [i] + "" + name [i] + "" + popularity [i] + "\ n"); \t \t –

+0

私はlegnthを1000にしてすべてを印刷できるようにしましたが、実際にはプログラムが行うべきことは配列を格納して検索可能にすることです –

1

、あなたはサイズ1(new int[1]、など)のアレイを作成して、ループのインデックスをあなたの内部の0-999にアクセスしようとしています。 forループのように配列の位置を1000にしたい場合は、new int[1000]のような配列を作成する必要があります。

関連する問題