Szybka ocena kodu java

0

Witaj, jestem uczę się języka Java, zanim będę brał się za dalsza naukę, chciałbym się spytać czy w takiej formie mogę pisać takie programy tzn. czy można tutaj coś zmienić, ulepszyć w tym kodzie by był wygodniejszy lub bardziej uniwersalny oraz czy powinienem sobie wyrobić jakiś nawyk pisząc programy ?
Z góry dziękuje za odpowiedz :)

package Projekt2;

import java.util.Scanner;

public class Test {

	public static void main (String[] args){
		
		double a,b,h,r;
		String x;
		
		System.out.println("Co chcesz zrobić : \nWpisz \"Pole\" jeżeli chcesz obliczyc pole figury\nWpisz \"Obwód\" jeżeli chcesz obliczyć obwód figury");
		Scanner odczyt = new Scanner(System.in);
		x=odczyt.nextLine();
		
		if (x.equals("Pole")){
			Pole p = new Pole();
			System.out.println("Wybierz figure której chcesz obliczyc pole wpisując \"Kwadrat\", \"Prostokat\", \"Trapez\" lub \"Koło\"");
			x=odczyt.nextLine();
			
			if (x.equals("Kwadrat")){				
				System.out.print("Podaj długość boku a : ");
					a=odczyt.nextDouble();
					p.poleKwadratu(a);
					
			}if (x.equals("Prostokąt")){				
				System.out.print("Podaj długość boku a : ");
					a=odczyt.nextDouble();
				System.out.print("Podaj długość boku b : ");
					b=odczyt.nextDouble();
				p.poleProstokatu(a, b);
				
			}if (x.equals("Trapez")){				
				System.out.print("Podaj długość boku a : ");
					a=odczyt.nextDouble();
				System.out.print("Podaj długość boku b : ");
					b=odczyt.nextDouble();
				System.out.print("Podaj długość wysokości h : ");
					h=odczyt.nextDouble();
					p.poleTrapezu(a, b, h);
				
			}if (x.equals("Koło")){
				System.out.print("Podaj długość promienia r : ");
				r=odczyt.nextDouble();
				p.poleKola(r);		
			}
		}	
		else if (x.equals("Obwód")){
			
			Obwod o = new Obwod();
			System.out.println("Wybierz figure której chcesz obliczyc obwód wpisując \"Kwadrat\", \"Prostokąt\", \"Trapez\" lub \"Koło\"");
			x=odczyt.nextLine();
			if (x.equals("Kwadrat")){				
				System.out.print("Podaj długość boku a : ");
					a=odczyt.nextDouble();
					o.obwodKwadratu(a);
					
			}if (x.equals("Prostokąt")){				
				System.out.print("Podaj długość boku a : ");
					a=odczyt.nextDouble();
				System.out.print("Podaj długość boku b : ");
					b=odczyt.nextDouble();
					o.obwodProstokatu(a, b);
				
			}if (x.equals("Trapez")){				
				System.out.print("Podaj długość boku podstawy a : ");
					a=odczyt.nextDouble();
				System.out.print("Podaj długość boku podstawy b : ");
					b=odczyt.nextDouble();
				System.out.print("Podaj długość boku ramienia c : ");
					h=odczyt.nextDouble();
				System.out.print("Podaj długość boku ramienia d : ");
					r=odczyt.nextDouble();
					o.obwodTrapezu(a, b, h, r);
				
			}if (x.equals("Koło")){
				System.out.print("Podaj długość promienia r : ");
				r=odczyt.nextDouble();
				o.obwodKola(r);
						
			}	
		}else 
			System.out.println("Musiałeś coś źle wpisać, spróbuj ponownie ( zwracaj uwagę na wielkość liter )");
			
		odczyt.close();
	}
}
package Projekt2;

public class Pole {

	double pole;
	
	public double poleKwadratu(double a)
	{
		pole = a*a;
		System.out.println("Pole kwadratu  wynosi : "+pole);
		return pole;
	}
	public double poleTrapezu(double a, double b, double h)
	{
		pole = (a+b)*h/2;
		System.out.println("Pole trapezu wynosi : "+pole);
		return pole;	
	}
	public double poleKola(double r)
	{
		pole = Math.PI*r*r;
		System.out.println("Pole koła wynosi : "+pole);
		return pole;
		
	}
	public double poleProstokatu(double a, double b)
	{
		pole= a*b;
		System.out.println("Pole trapezu wynosi : "+pole);
		return pole;
	}	
}
package Projekt2;

public class Obwod {
	
	double obwod;
	public double obwodKwadratu(double a)
	{
		obwod = 4*a;
		System.out.println("Obwód kwadaratu wynosi : "+obwod);
		return obwod;
	}
	public double obwodTrapezu(double a, double b, double h, double r)
	{
		obwod = a+b+h+r;
		System.out.println("Obwód trapezu wynosi : "+obwod);
		return obwod;	
	}
	public double obwodKola(double r)
	{
		obwod = 2*Math.PI*r;
		System.out.println("Obwód koła wynosi : "+obwod);
		return obwod;
		
	}
	public double obwodProstokatu(double a, double b)
	{
		obwod= (2*a)+(2*b);
		System.out.println("Obwód prostokąta wynosi : "+obwod);
		return obwod;
	}	
}
0

To co robi Twój program mogłoby się znaleźć w uczelnianym przykładzie na użycie dziedziczenia. I właśnie z dziedziczeniem powinieneś się zapoznać.

1
  • Dlaczego w klasach Obwód i Koło znajduje się pola 'obwod' i 'pole'? Dlaczego nie jest to zmienna w metodzie? Jeśli chciałeś tym wprowadzić choćby niewielką poprawę wydajności, to wbrew pozorom uzyskałeś jej przeciwieństwo. Ale dużo ważniejsze od tych kilku nanosekund jest to, że ten kod jest przez to mniej czytelny i łamie konwencje.
  • Czy Obwod i Pole to powinny być klasy? Czy posiadają one jakiś stan (oprócz tych zbędnych pól)? Pomyśl, co mogłoby Ci dać utworzenie klas figur. Potem zauważ, że dwa razy powtórzyłeś identyczny kod wczytywania figur (przy "Pole" i "Obwód) i pomyśl jak za pomocą klas figur i dziedziczenia możesz pozbyć się tego nadmiaru.
  • Dlaczego deklarujesz zmienne na początku metody? Czytelniej byłoby, gdybyś deklarował je na początku bloku, w którym są używane: http://www.oracle.com/technetwork/java/javase/documentation/codeconventions-141270.html
  • Pomyśl nad utworzeniem dodatkowych metod, np. do wczytywania figury.
  • Poza tym: http://www.oracle.com/technetwork/java/codeconventions-135099.html . Czyli pakiety powinny być nazywane małymi literami.

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