2015-04-10 2 views
-4

У меня есть код, который я реализую от другого, но я получаю ошибку Java ArrayIndexOutofBoundsException Может кто-нибудь мне помочь? Я не уверен, что делать это может быть коды, которые вызывают ошибкуОшибка Java ArrayIndexOutofBounds

данные в файле

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"); 
    } 
} 

ответ

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

Кажется, что ваш массив данных содержит только один или два элемента. В тот момент вы пытаетесь получить что-то из массива, для индекса, который находится вне (существующего) диапазона, который генерируется Exception.

Вы уверены, что ваш файл не заканчивается пустой линией?

добавьте строку:

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

сразу после раздельным способом, или распечатать весь элемент детали массива, который подскажет вам, сколько элементов есть, и сколько раз вы пытаетесь сделать это для каких значений.

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 элемента, разделенных |. например

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), и вы можете иметь ошибки при разборе количества фишек, которое должно быть целым числом , Я тоже, конечно, проверю это.

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