klasa Scanner w pętli for, Exception in thread

0

Cześć, od kilku godzin przeszukuję internety i nie potrafię znaleźć rozwiązania mojego problemu..
Mam metodę wczytaj(); i chciałbym zassać do niej tablicę w pętli for. Niestety nie wiem dlaczego w momencie kiedy dochodzę w programie do miejsca pętli wyrzuca mi błąd.
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at Student.wczytaj(Student.java:26) at Main.main(Main.java:17) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

Zapewne popełniłem jakiś głupi błąd.. ale go nie widzę..

public class Student extends Osoba {
    protected int tabelaOcen[] = new int[liczbaEgzaminow];


    @Override
    public void wczytaj() {
        super.wczytaj();
        Scanner wczytanie = new Scanner(System.in);
              for (int i=0; i<liczbaEgzaminow; i++)
            {
                int ilosc = wczytanie.nextInt();
                tabelaOcen[i] = ilosc;
            }

        wczytanie.close();
        System.out.println(" ");

    }

0

Najlepiej włączyć debugger. Ciężko coś powiedzieć po tak małej ilości kodu.

1

Gdzie jest ustawiana wartość zmiennej liczbaEgzaminow? Bo nie widzę tego nigdzie i może z tym związany jest błąd?

0
public class Student extends Osoba {
    protected int numerIndeksu;
    protected int liczbaEgzaminow=2;
    protected int tabelaOcen[] = new int[liczbaEgzaminow];


    @Override
    public void wczytaj() {
        super.wczytaj();
        Scanner wczytanie = new Scanner(System.in);
        System.out.println("Podaj nr indeksu: ");
        numerIndeksu = wczytanie.nextInt();
        System.out.println("Podaj liczbe egzaminów, którą miałeś/łaś: ");
        liczbaEgzaminow = wczytanie.nextInt();
        System.out.println("Podaj oceny z egzaminów: ");


        for (int i=0; i<liczbaEgzaminow; i++)
            {
                int ilosc = wczytanie.nextInt();
                tabelaOcen[i] = ilosc;
            }

        wczytanie.close();
        System.out.println(" ");

    }


    @Override
    public void wyswietl() {
        super.wyswietl();
        System.out.print(", o numerze indeksu"+numerIndeksu);
        System.out.println("z ocenami:"+tabelaOcen+" ");
        System.out.println("Twoja srednia wynosi: ");

    }

Oto cały kod tej klasy, debuger nic mi nie podpowiada.. Może nie umiem go odpowiednio używać, albo coś..

0
 protected int tabelaOcen[] = new int[liczbaEgzaminow];

Alokujesz miejsce na 2 oceny, potem pytasz użytkownika o liczbęEgzaminów ocen nie zmieniając rozmiaru tablicy

liczbaEgzaminow = wczytanie.nextInt();

jeżeli podasz więcej niż 2 w pętli wyjdziesz poza tablice tabelaOcen

0

okcam ma racje. Musisz zmienić kod na:

  protected int[] tabelaOcen;

 System.out.println("Podaj liczbe egzaminów, którą miałeś/łaś: ");
 liczbaEgzaminow = wczytanie.nextInt();
 tabelaOcen = new int[liczbaEgzaminow]; //Tu alkokujesz

bądź użyć kolekcji np.

  List<Integer> lista = new ArrayList<Integer>();

a następnie w for dodawać elementy:

 lista.add( wczytanie.nextInt() );
0

Dzięki wielkie za pomoc Panowie! ;)
Wszystko bangla, a jbc użyłem listy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1