【问题标题】:Putting names and numbers from a text file into arrays将文本文件中的名称和数字放入数组中
【发布时间】:2012-04-24 02:18:31
【问题描述】:

有一个排名、姓名和受欢迎程度的列表 1 Jake 21021(排名、实际姓名、当年有多少婴儿获得了这个名字)我试图将这三个独立的东西分成数组.这样,如果用户搜索“Jake”排名: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)

任何帮助都会很棒! 谢谢

【问题讨论】:

标签: java arrays file text


【解决方案1】:

您已将 name 初始化为大小为 1 的数组,但随后您引用 name[i],其中 i 计数为 1000。name[0] 有效,但一旦您达到 name[1],你得到了例外。

您应该将name 初始化为String[1000]。或者(更好)使用 ArrayList,它会随着您向其中添加项目而扩展。

【讨论】:

【解决方案2】:

由于name数组的长度为1,所以name的最大索引为0。所以在下一次循环迭代中,当i=1时,该行将越界。

name[i] = inputStream.next(); 

【讨论】:

  • 好的——我让它打印出所有的名字,顺序是等级、名字、名字被使用了多少次——我如何查看它们是否被放入数组中?
  • int[] 计数器 = 新的 int[1000];字符串 [] 名称 = 新字符串 [1000]; int[] 流行度 = new int[1000]; //初始化 BOY 变量 for (int i=0; i
  • 我将长度设置为 1000,以便它可以打印所有内容......但我真正想要程序做的是存储数组并让它们可搜索
  • 我想你想做一个名字->人气搜索。看看使用一个java Dictionary类
  • Zac - 如果您已更正导致您提出此问题的错误,您应该接受一个答案,然后就您的新问题提出一个新问题。
【解决方案3】:

乍一看,您正在创建大小为 1 的数组(new int[1] 等),然后尝试在 for 循环中访问索引 0-999。如果您希望数组中包含 1000 个位置,就像您的 for 循环所要求的那样,那么您应该创建一个数组,例如 new int[1000]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多