Java Error ArrayIndexOutofBounds

时间:2015-04-10 10:32:09

标签: java

我有一个代码,我正在从另一个实现,但我得到Java的错误ArrayIndexOutofBoundsException有人可以帮助我吗?我不知道该怎么做可能是触发错误的代码

文件中的数据是

Username|HashedPassword|no.of chips

代码在

之下
public static void DeletePlayer()throws IOException{
    File inputFile = new File("players.dat");
    File tempFile = new File ("temp.dat");

    BufferedReader read = new BufferedReader(new FileReader(inputFile));
    BufferedWriter write = new BufferedWriter(new FileWriter(tempFile));

    ArrayList<String> player = new ArrayList<String>();
    try {
        String line;
        Scanner reader = new Scanner(System.in);
        System.out.println("Please Enter Username:");
        String UserN = reader.nextLine();
        System.out.println("Please Enter Chips to Add:");
        String UserCadd = reader.nextLine();

        while((line = read.readLine()) != null){
            String[] details = line.split("\\|");
            String Username = details[0];
            String Password = details[1];
            String Chips = details[2];
            Integer totalChips = (Integer.parseInt(UserCadd) + Integer.parseInt(Chips));
            if(Username.equals(UserN)){
                line = Username + "|" + Password + "|" + totalChips;
                write.write("\r\n"+line);
            }

        }
        read.close();
        write.close();
        inputFile.delete();
        tempFile.renameTo(inputFile);
        main(null);
    }catch (IOException e){
        System.out.println("fail");
    }
}

2 个答案:

答案 0 :(得分:1)

String[] details = line.split("\\|");
        String Username = details[0];
        String Password = details[1];    
        String Chips = details[2];

您的详细信息数组似乎只有一个或两个元素。那一刻,你试图从数组中得到一些东西,对于超出(现有)范围的索引,抛出异常。

你确定你的文件没有以空行结尾吗?

添加以下行:

System.out.println("length: " + details.length);

在你的split方法之后,或者打印出details数组的所有元素,它会告诉你有多少元素,以及你尝试为哪些值执行此操作的次数。

答案 1 :(得分:0)

在此代码中:

    while((line = read.readLine()) != null){
        String[] details = line.split("\\|");
        String Username = details[0];
        String Password = details[1];
        String Chips = details[2];
        //...
    }

您必须检查用户输入是否符合预期格式(在您的情况下)

  

乔| g00d | 12

最小化检查是将3个元素分隔为|。 e.g。

    while((line = read.readLine()) != null){
        String[] details = line.split("\\|");
        if (details.length != 3) {
            System.out.println("Bad input, try agains...");
            continue;
        }
        String Username = details[0];
        String Password = details[1];
        String Chips = details[2];
        //...
    }

请注意,您应该String#trim()输入以消除前导和结尾空格(这允许输入像joe | g00d | 123),并且在解析具有的筹码数时仍然会出错是一个整数。我当然也会检查一下。