Метод if / else не работает должным образом - PullRequest
0 голосов
/ 15 декабря 2018

Я хочу создать метод, который будет показывать vbcim как 0, если значение отсутствует в versenyzok.txt, и отображать реальное значение, если значение найдено.Я что-то неправильно понял, и метод Feltolt не работает должным образом.

Должен быть список результатов из текстового файла.Если 4-е значение не найдено, установите его как 0, а если его список найден, то оно также

  package vizsgamintaa;
    import java.io.File;
    import java.io.FileNotFoundException;
    //import java.io.PrintStream;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.Scanner;
    //import java.util.logging.Level;
    //import java.util.logging.Logger;

    public class VizsgaMintaA {

        static SimpleDateFormat df = new SimpleDateFormat("yyyy.MM.dd");
       static Scanner sc= new Scanner(System.in);

        public static void main(String[] args) throws ParseException, FileNotFoundException {
            ArrayList<Versenyzo> versenyzok = new ArrayList<>();
            Feltolt(versenyzok);
            Kiir(versenyzok);
        }
        private static void Feltolt(ArrayList<Versenyzo> versenyzok) throws ParseException{
        Versenyzo v;
        File f = new File("versenyzok.txt");
        try {
                Scanner scan = new Scanner(f, "iso-8859-2");
                while (scan.hasNextLine()) {
                    String sor = scan.nextLine();
                    String[] adatok = sor.split(";");
                    if (adatok.length == 3) {
                       v = new Versenyzo();
                       v.nev = adatok[0];
                        v.szuletes = df.parse(adatok[1]);
                         v.csapat = adatok[2];
                         if (adatok[3].length()==0 )  {

                            v.vbcim = 0; 
                        } 
                         else {
                            v.vbcim = Integer.parseInt(adatok[3]);
                        }
                    } else {
                         v = new Versenyzo (adatok[0],df.parse(adatok[1]),adatok[2],Integer.parseInt(adatok[3]));
                    }
                    versenyzok.add(v);

                    }
            } catch (FileNotFoundException ex) {
                System.out.println("Nincs meg a fájl.");
            }

        }

        public static void Kiir(ArrayList<Versenyzo>versenyzok){
        for (Versenyzo f : versenyzok){
            System.out.println(f.toString());
        }
        }
    }
       class Versenyzo {

           String nev,csapat;
           Date szuletes;
           int vbcim;
           SimpleDateFormat df = new SimpleDateFormat("yyyy.MM.dd");

            @Override
       public String toString(){
       return "Versenyzo:" +nev + "Született:" + df.format(szuletes)+"Csapata:"+ csapat + "Vb címek:" + vbcim; 
       }
       public Versenyzo(String nev, Date szuletes, String csapat, int vbcim) {
           this.nev = nev;
           this.szuletes = szuletes;
           this.csapat = csapat;
           this.vbcim = vbcim;

       }
       public Versenyzo(){
       }
    }

else {     
       v = new Versenyzo (adatok[0],df.parse(adatok[1]),adatok[2],Integer.parseInt(adatok[3]));
  }

часть каким-то образом не работает.ArrayIndexOutOfBoundsException это говорит.

1 Ответ

0 голосов
/ 15 декабря 2018

Сначала вы проверяете:

if (adatok.length == 3)

и в части else вы принимаете как должное, что length равно по крайней мере 4, но, похоже, это не так.Возможно, оно меньше 2, поэтому вы получаете ArrayIndexOutOfBoundsException при попытке доступа к adatok[3].Вы должны изменить что-то вроде этого:

if (adatok.length == 3) {
    //......
} else if (adatok.length > 3) {
    //......
} else {
    //......
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...