[Tablice] Problem z działaniem programu

0

Witam wszystkich,
Rozpoczynam naukę programowania Java i mam pewien problem z działaniem programu.

public class TablePar {
    int ch, in, out;
    int Tab[];
    // Utworzenie kontruktora
    TablePar(int T){
        Tab = new int[T];
        in = out = 0;
    }
    // Meroda przypisująca tablicy wartości parzyste
    void putTab(int ch){
        if (in == Tab.length) return;
        if (ch%2 != 0 | ch == 0) return;
        if (ch%2 == 0){
            Tab[in] = ch;
            in++;
        }
            
    }
    // Metoda wypisująca elementy tablicy
    int getTab(){
        if (out == Tab.length) return (int) 0;
        return Tab[out++];
    }
}

 public class Table {

    public static void main(String args[]) {
        // Utworzenie obiektów klasy TablePar określających wielkość tablicy
        TablePar Table1 = new TablePar(10);
        TablePar Table2 = new TablePar(20);
        
        // Przypisanie wartości parzystych do tablicy 2
        for (int i = 0; i < 100; i++){
            Table2.putTab(i);
        }
        
        // Wyświetlenie tablicy
        for (int j = 0; j < 25; j++){
            if (Table2.getTab() == (int) 0) break;
            System.out.print(Table2.getTab()+"\t");
        }
    }
}

Program ma za zadanie wypełnić tablice 20 elementową liczbami parzystymi, a następnie wyświetlić ją na ekranie. Dodałem również zabezpieczenie przed przepełnieniem tablicy- i tu pojawia się problem.
W klasie TablePar wszystko działa poprawnie. Problem zaczyna się w klasie Table.
Po skompilowaniu programu wyświetlają się liczby podzielne przez 4, a więc co drugi wyraz tablicy. Jednak po usunięciu instrukcji:

  if (Table2.getTab() == (int) 0) break;

Program działa poprawnie, jednak zabezpieczenie nie działa tak jakbym chciał.

Bardzo proszę o wyjaśnienie dlaczego się tak dzieje.
Dzięki.

1

Z każdym wywołaniem getTab() przesuwasz out o jedno miejsce. W

 if (Table2.getTab() == (int) 0) break;

przestawiasz out na +1 nic nie wypisując

potem w :

System.out.print(Table2.getTab()+"\t"); 

znowu przestawiasz out +1
pomijając poprzedni index

int temp = Table2.getTab();
if (temp == (int) 0) break;
            System.out.print(temp+"\t");

Nie nazywaj obiektów dużymi literami

0

No pewnie! Super, dzięki.
W jednej iteracji pętli dwukrotnie wywołuję metodę getTab i tu jest problem.
Teraz działa dobrze.
Co jest powodem, że nie powinno nazywać się obiektów z dużej litery?

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