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)

どんな助けでも素晴らしいでしょう!ありがとう

4

3 に答える 3

1

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

name[i] = inputStream.next(); 
于 2012-04-24T02:22:54.873 に答える
1

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

于 2012-04-24T02:23:27.377 に答える
1

nameサイズ1の配列として初期化しましたが、次に参照しますname[i]。ここで、iは1000までカウントします 。name[0]動作しますが、に達するとすぐにname[1]例外が発生します。

nameとして初期化する必要がありますString[1000]。または(さらに良いことに)ArrayListを使用します。これは、アイテムを追加すると展開されます。

于 2012-04-24T02:24:20.400 に答える