[Java] Wyjątki + Liczenie średniej


(Tomaszxp) #1

Witam :slight_smile: Mam problem z programem liczącym średnią ocen do którego miałem dodać obsługę wyjątków. Nie mogę wychwycić błędu - może Wam to się uda. Program nie wypisuje poprawnie wpisanych z klawiatury ocen i wyświetla zamiast nich wartość 0. Jako środowiska używam JCreatora.

import java.io.*;


public class zad7b {


    private String imie;

    private int iloscOcen;

    private static int b;

    private double oceny[];


    public static void main(String[] args) {

        int a = 1;

        while(a > 0){

        zad7b uczen = new zad7b();

        System.out.println("Podaj imie:");

        BufferedReader klaw = new BufferedReader(new InputStreamReader(System.in)); 

        try {

        uczen.imie = klaw.readLine(); 

        } catch(IOException ex){

        System.out.println("Błąd odczytu danych!");

        }	

        System.out.println("Podaj ilosc ocen:");

    	BufferedReader klaw1 = new BufferedReader(new InputStreamReader(System.in)); 

        try {

        uczen.iloscOcen = Integer.parseInt(klaw1.readLine()); 

        } catch(IOException ex) {

        System.out.println("Błąd odczytu danych!");

        }

    	uczen.oceny = new double[uczen.iloscOcen];

        int z=1;

        for (int i = 0; i < uczen.iloscOcen; i++) {

                System.out.println("Podaj ocenę numer " + z);

                BufferedReader klaw2 = new BufferedReader(new InputStreamReader(System.in)); 

        		try {

        		int oceny = Integer.parseInt(klaw2.readLine());

        		} catch(IOException ex) {

        		System.out.println("Błąd odczytu danych!");

        		}

                z++;

        }

		System.out.println("Dodać kolejnego ucznia? (1/0)");

		BufferedReader klaw3 = new BufferedReader(new InputStreamReader(System.in)); 

        try {

        uczen.b = Integer.parseInt(klaw3.readLine()); 	

        } catch(IOException ex) {

        	System.out.println("Błąd odczytu danych!");

        }


        if (b == 0)

        {

                a = a-1;

        }

    	uczen.wyswietlDane(uczen.liczSrednia());

    }

}

    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);

    }

}

(Enterbios) #2

Witam.

Brakuje Ci przypisania wczytanej zmiennej do tablicy z ocenami.

for (int i = 0; i < uczen.iloscOcen; i++) {

                System.out.println("Podaj ocenę numer " + z);

                BufferedReader klaw2 = new BufferedReader(new InputStreamReader(System.in));

              try {

              int oceny = Integer.parseInt(klaw2.readLine());

              uczen.oceny[i] = oceny; //<-- Tego brakuje :)

              } catch(IOException ex) {

              System.out.println("Błąd odczytu danych!");

              }

                z++;

        }

Pozdrawiam


(Tomaszxp) #3

Dzięki wielkie! :slight_smile: Pozdrawiam.


(Airborn) #4

Przede wszystkim, to brakuje Ci obsługi wyjątku NumberFormatException który może pojawić się w momencie parsowania liczby, a który jest kluczowy dla Twojej aplikacji.


(Tomaszxp) #5

Dodałem, również dziękuje :slight_smile: