Naveed Imran Ответов: 2

Исключение в потоке "основной" Java для.яз.arrayindexoutofboundsexception: 2 в адресной книге.loadperson(адресной книги.Ява:27) в адресную книгу.&ЛТ;инициализации и GT;(адресной книги.Ява:10)


import java.util.*;// Import all the classes in the util package
import javax.swing.*;
import java.io.*;
public class AddressBook
{
 ArrayList persons;
 public AddressBook()
 {
      persons=new ArrayList();
        loadPerson();
 }  
 public void loadPerson()
 {
 String tokens[]=null;
 String name,add,ph;

 try
 {
  FileReader fr=new FileReader("AddressBook.txt");
  BufferedReader br=new BufferedReader(fr);
  String s=br.readLine();
  while(s !=null )
  {
    tokens=s.split(",");
    name=tokens[0];
    add=tokens[1];
    ph=tokens[2];
    PersonInfo p=new PersonInfo(name,add,ph);
    persons.add(p);   
    s=br.readLine();
  }
     br.close();
     fr.close();
  }
  catch(IOException e)
  {
  System.out.println("unable to Load"); 
  }

 }
 public void addPerson()
 {
   String name=JOptionPane.showInputDialog("Enter Name");
   String address=JOptionPane.showInputDialog("Enter Address");
   String phoneNum=JOptionPane.showInputDialog("Enter PhoneNum");

   PersonInfo p=new PersonInfo(name,address,phoneNum);
   persons.add(p);
 }
 public void searchPerson(String n)
 {
  for (int i=0;i<persons.size();i++)
  {
   PersonInfo p=(PersonInfo)persons.get(i);
   if(n.equals(p.name))
  {
   p.printPersonInfo();
  }
  }
 }       
      //remove
 public void deletePerson(String n)
 {
  for (int i=0;i<persons.size();i++)
 {
  PersonInfo p=(PersonInfo)persons.get(i);
  if(n.equals(p.name))
 {
  persons.remove(i);
 }
 }
 }
 public void savePerson()
 {
 try
    {
     FileWriter fr=new FileWriter("mybook.txt");
     PrintWriter pw=new PrintWriter(fr);
     String s="";
     for(int i=0;i<persons.size();i++)
    {
     PersonInfo p=(PersonInfo)persons.get(i);
     s=p.name+","+p.address+","+p.phoneNum;
     pw.println(s);
    }
     pw.close();
     fr.close();    
    }
    catch(IOException e)
    {
     System.out.println("unable to write"); 
    }
 }

}


Что я уже пробовал:

я не могу понять проблему я новичок в java

2 Ответов

Рейтинг:
2

Patrice T

С помощью отладчика if вы сможете увидеть, что находится в переменных при возникновении ошибки, а затем поймете, почему token меньше, чем ожидалось.

Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя отладчик Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик-Википедия, свободная энциклопедия[^]
http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jdb.html[^]
https://www.jetbrains.com/idea/help/debugging-your-first-java-application.html[^]
Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Рейтинг:
12

Thomas Daniels

Ошибка указывает на эту линию:

ph=tokens[2];
Вы пытаетесь взять третий элемент из массива, но ошибка говорит о том, что там является третьего элемента не было, так что индекс находился "за пределами" массива.

Итак, токены имеют только два элемента, а это значит, что существует только один , в строке. Если это не было задумано, проверьте правильность вашего текстового файла. Если вы считаете, что все должно быть хорошо, но он все равно выходит из строя, используйте свой отладчик, чтобы запустить код шаг за шагом и проверить переменные, чтобы увидеть, где он идет не так. Если вы знаете это, вы можете исправить ошибку.


Naveed Imran

спасибо тебе дорогая