Uproszczenie kodu liczącego średnią

0

Witam, jestem początkującym java pisarzem ;)

Chciałbym się spytać czy ten kod da się w jakiś sposób uprościć oraz czy został napisany prawidłowo (działać działa, ale nie wiem jak z poprawnością na przyszłość :)) ? Z góry dziękuje za odpowiedzi :)

package nauka;

import java.util.Scanner;

public class LiczSrednia {

	private static void menu() {
		double liczba = 0;
		int liczbaElementow = 0;
		String a = "";
		System.out.println("Witaj w programie liczącym średnią");
		do {
			System.out.println("s - licz średnia z x liczb\nk - zakończ program");
			Scanner odczyt = new Scanner(System.in);
			a = odczyt.nextLine();
			if (a.equalsIgnoreCase("s")) {
				System.out.println("Podaj liczbe elementów");
				liczbaElementow = odczyt.nextInt();
				if (liczbaElementow > 0) {
					int[] tab = new int[liczbaElementow];
					for (int i = 0; i < liczbaElementow; i++) {
						tab[i] = odczyt.nextInt();
						liczba = liczba + tab[i];
					}
					System.out.println(liczba / liczbaElementow);
				} else
					System.out.println("Liczba elementow musi być liczba naturalną większą od zera");
			}
		}while (!a.equalsIgnoreCase("k"));
		System.out.println("Dziękuje za skorzystanie programu :)");
	}
	public static void main(String[] args) {
		menu();
	}
}
1
  1. Przede wszystkim deklaruj zmienne w tym miejscu gdzie ich używasz (a, liczba, liczbaElementow), a nie "na zapas".
  2. Sugerowałbym też wyrzucić tworzenie i zamykanie strumienia (Scanner(System.in)) poza pętlą, a nie w niej.
  3. Mógłbyś również wydzielić funkcją do liczenia średniej (average()) poza funkcję main.
  4. Deklaruj zmienne po angielsku, a nie po polsku.
  5. Zamiast pytać o ilość elementów, a potem pobierać tyle (ktoś może nie podać tyle ile wpisał etc); lepiej pobrać stringa z liczbami oddzielonego spacją lub przecinkiem, i podzielić na tablicę.
0

Działa? Mam wątpliwości.

odczyt.close();
if (liczbaElementow > 0) {
	int[] tab = new int[liczbaElementow];
	for (int i = 0; i < liczbaElementow; i++) {
		tab[i] = odczyt.nextInt();

Jak zamknąłeś scannera to już chyba nic z niego niewyczytasz...

0

Od siebie dodam tylko, że warto, aby metoda była typu double a nie void

0

Nie wrzuciłeś nowego kodu, więc nie wiem jak Ci mogę bardziej pomóc, ale patrząc na stary to:

  1. Wywal otwieranie i zamykanie strumienia z pętli!
  2. Mógłbyś zrobić żeby metoda menu() nie była statyczna.

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