Zapętlenie metody main

0

Witajcie. Robię prosty program w Javie, którego celem jest wypisanie podanych danych. Wszystko jest pięknie do momentu, gdy chce zapętlić maina (dodanie kolejnego ucznia lub wyjście z pętli while). W linijce z "b = 0" otrzymuje błąd "error: non-static variable b cannot be referenced from a static context". Kombinuje i kombinuje - ciągle błędy. Bardzo proszę o pomoc i z góry dziękuje za zainteresowanie.

import java.io.*;
import javax.swing.JOptionPane;

public class zad7b {

    private String imie;
    private int iloscOcen;
    private int b;
    private double[] oceny;

    public static void main(String[] args) {
        int a = 1;
        while(a > 0){
        zad7b uczen = new zad7b();
        uczen.imie = JOptionPane.showInputDialog("Podaj imię:");
        uczen.iloscOcen = Integer.parseInt(JOptionPane.showInputDialog("Podaj ilość ocen"));
        uczen.oceny = new double[uczen.iloscOcen];
        int z=1;
        for (int i = 0; i < uczen.iloscOcen; i++) {
        	uczen.oceny[i] = Double.parseDouble(JOptionPane.showInputDialog("Podaj ocenę numer " + z));
        	z++;
                   }
        uczen.wyswietlDane(uczen.liczSrednia());
        uczen.b = Integer.parseInt(JOptionPane.showInputDialog("Dodać kolejnego ucznia? (1/0)"));
        if (b = 0)
        {
        	a = a-1;
        }
    }
}
    private double liczSrednia(){
        double suma=0;
        for(double x:oceny)
            suma+=x;
        return suma/iloscOcen;
    }

    private void wyswietlDane(double srednia){
        System.out.println("Imię ucznia: "+imie);
        System.out.println("Ilość ocen: " +iloscOcen);
        System.out.println("Oceny: ");
        for(double x:oceny)
            System.out.print(x+", ");
        System.out.println("Średnia: " + srednia);
    }
} 
1

Drogi Tomaszu. Twój błąd polega na tym, że próbujesz dostać się do zmiennych niestatycznych ze statycznego kontekstu(statyczna metoda main). W Twoim przypadku zmienne oraz metody pomocnicze powinny być statyczne - powinieneś dodać static po modyfikatorze dostępu a przed typem zmiennej.

0

Tak po za tematem: czym właściwie jest "static"?

0

Dzięki! Wystarczyło poprawić dwie linijki na odpowiednio: private static int b i if (b == 0). Pozdrawiam :)

0

Static oznacza, że jest zawsze jeden i tylko jeden egzemplarz danego pola. Jeśli coś nie jest static to należy do jakiegoś obiektu, a obiektów może być dowolna ilość. Należy unikać pól statycznych, które zmieniają swoją zawartość (tzn dają różne odpowiedzi na te same argumenty, np tablica która raz zawiera liczbę 1 na indeksie 0, a za jakiś czas element jest podmieniony i zawiera liczbę 3, albo np funkcja która odpytuje jakiś inny obiekt, które daje inne odpowiedzi zależnie od czasu, itp itd).

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