Program liczący średnią

0

Program liczący średnią, gdzie użytkownik decyduje kiedy chce poznać średnia z podanych przez siebie liczb. Jest to program podobny do tego który wcześniej wrzucałem (pierwszy był zrobiony na tablicach). Chciałem Was się spytać czy poniższy kod jest napisany prawidłowo zgodnie z zasadami, za wszelkie uwagi z góry dziękuje :)

public class Srednia {

	
	public void menu(){
		System.out.println("s - licz średnia dla podanych przez liczb\n"
				+ "k - zakończ program");
	}
	public String readOpcja(){
		Scanner odczyt = new Scanner(System.in);
		return odczyt.nextLine();
	}
	public double readLiczba(){
		Scanner odczyt = new Scanner(System.in);
		return odczyt.nextDouble();
	}
	public void checkOpcja(){
		String b = readOpcja();
		
		if(b.equalsIgnoreCase("s")){
			countLiczba();
		}else if(b.equalsIgnoreCase("k")){
			System.out.println("Program zakończony");
		}else {
			System.out.println("Podano błędna wartość spróbuj ponownie");
			menu();
			checkOpcja();
		}
	}
	public void countLiczba(){
		double suma =0;
		double liczba =0;
		int i=-1;
		
		do{
			System.out.println("Podaj pierwszą / następna liczbę\n"
					+ "lub wpisz 0 by obliczyc srednia z juz podanych przez Ciebie liczb");
			liczba = readLiczba();
			suma+= liczba;
			++i;
		}
		while(liczba!=0);
		System.out.println("Średnia z podanych liczb wynosi: "+(suma/i));
	}
}


public class Program {

	public static void main(String[] args) {
	Srednia sr = new Srednia();
	sr.menu();
	sr.checkOpcja();
	}

}
0

Dosyć śmiesznie wygląda "checkOpcja", "countLiczba"... Pisz nazwy po angielsku

5
  1. programujemy po angielsku, nazwy klas, metod, zmiennych itp
  2. nazwy zmiennych! zamiast b - seletedOption, zamist menu() - showMenu()
  3. jeżeli ktoś za pierwszym razem poda liczbę zero to będzie 0/0 czyli to się wywali na dzieleniu przez zero, czyli obsłuż taką sytuację, jakiś komunikat błędu by się przydał.
    Generalnie całkiem spoko kod.
3
sele11 napisał(a):

Program liczący średnią, gdzie użytkownik decyduje kiedy chce poznać średnia z podanych przez siebie liczb. Jest to program podobny do tego który wcześniej wrzucałem (pierwszy był zrobiony na tablicach). Chciałem Was się spytać czy poniższy kod jest napisany prawidłowo zgodnie z zasadami, za wszelkie uwagi z góry dziękuje :)

Nie ma jednych i uniwersalnych zasad. Na każdym poziomie wtajemniczenia dochodzą nowe, raczej nie da się ich ogarnąć od razu. (Co nie przeszkadza w napisaniu całkiem ciekawych, a nawet genialnych programów). Zakładam jednak, że się uczysz :-)

  1. Kod jest czytelny - postarałeś sie go rozłożyć przejrzyście i rozsądnie ponazywać - i to jest super !!! cała reszta to drobnostki :-)
  2. Chyba się brzydko wyłoży jak od razu podam "0" - zero w countLiczba()
  3. Zobacz, że przed readOpcja () zawsze wywołujesz **menu() ** (i słusznie) - w praktyce możesz menu() wywołać na początku checkOpcja() tuż przed readOpcja i będzie troche lepiej (wywalasz wtedy dwa inne już niepotrzebne wywołania menu() ). Tu chodzi o to, żeby unikać pułapek - jeśli przed wywołaniem metody X zawsze trzeba wywołać metodę Y - to może warto zrobić tak, żeby nie trzeba było o tym pamiętać.
  4. W zasadzie tylko metoda checkOpcja mogła by być publiczna (reszta private)
  5. w checkOpcja to zaczynanie od -1 i inkrementowanie jest tricky, łatwo coś przeoczyć -> zobacz punkt 2
  6. Rób ciekawsze zadania - to jest dla Ciebie za proste :-)

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