Instrukcje warunkowe - powtórka kodu

0

Witam. Uczę się programować w Javie i napotkałem pewien problem, otóż napisałem sobie kodzik, który po wybraniu Koła lub Prostokąta liczy promień, obwód, pole, ale gdy wpiszemy coś innego niż Koło lub Prostokąt program wyświetla błąd i przestaje działać i tutaj moje pytanko - jak zrobić aby program po wyświetleniu błędu z instrukcji else wykonywał się dopóki użytkownik nie wpisze poprawnej wartości ? Czy ten kod jest właściwy ?

Tutaj kodzik:

package pl.teleseil.pierwszy;

import java.util.Scanner;

public class Glowne {
	private double obwod;
	private double promien;
	private double pole;
	
	private double obwodprost;
	private double poleprost;
	private double prosta;
	private double prostb;
	
	public double ustawPromien(double r){
		promien = r;
		return promien;
	}
	public double obliczPole(){
		pole = Math.PI*promien*promien;
		return pole;		
	}
	public double obliczObwod(){
		obwod = 2*Math.PI*promien;
		return obwod;
	}
	
	public void ustawAB(double a, double b){
		prosta = a;
		prostb = b;
		return;
	}
	public double obliczPoleProstokata(){
		poleprost = prosta*prostb;
		return poleprost;
	}
	public double obliczObwodProstokata(){
		obwodprost = 2*(prosta+prostb);
		return obwodprost;
	}
	
	
	
	
	public static void main(String[] args) {
			Scanner odczyt = new Scanner(System.in);
			System.out.println("Wybierz: Koło lub Prostokąt");
			String wybkolo = odczyt.nextLine();
			
			if(wybkolo.equals("Koło")){
			Glowne kolo = new Glowne();
			System.out.println("Wprowadź promień");
			int danap = odczyt.nextInt();
			kolo.ustawPromien(danap);
			System.out.println("Pole koła wynosi: "+kolo.obliczPole());
			System.out.println("Obwód koła wynosi: "+kolo.obliczObwod());
			}
			
			else if(wybkolo.equals("Prostokąt")){		
			Glowne prostokat = new Glowne();
			System.out.println("Wprowadź a");
			int danaa = odczyt.nextInt();
			System.out.println("Wprowadź b");
			int danab = odczyt.nextInt();
			prostokat.ustawAB(danaa, danab);
			System.out.println("Pole prostokąta wynosi: "+prostokat.obliczPoleProstokata());
			System.out.println("Obwod prostokąta wynosi: "+prostokat.obliczObwodProstokata());
			}
			
			else{
			System.out.println("BLAD!! Wybierz Koło lub Prostokąt");
			}		
	}	
}
0

pętla while będzie przydatna. Powinna sprawdzać czy użytkownik nie wprowadził wartości "koniec". Jeżeli wprowadził "koniec" to program kończy działanie.

0

Kod jest bez sensu. Co to niby jest obiekt typu "Glowne"? o_O Powinieneś tu mieć dwie osobne klasy Kolo i Prostokat które dziedziczą po abstrakcyjnej klasie Figura.
Co do głównego pytania: użyj pętli.

0

Dzięki, użyłem pętli "do while" i śmiga elegancko.

0

Mam jeszcze jedną prośbę. Mógłby ktoś napisać jak powinien wyglądać poprawny, fachowy kod tego co napisałem ?

0

Fachowo to będzie skorzystać z polimorfizmu uprzednio tworząc klasy Kolo, Prostokat, Kwadrat. Mogą one dziedziczyć z klasy abstrakcyjnej, która zawiera metody virtualne. Metoda abstrakcyjna może nosić nazwę: Figura.

0

Taki kod jest właściwy ?

Kolo:

package pl.teleseil.two;

public class Kolo extends Figury{
	private double promien;
	
	Kolo()
	{
		this(2.0);
	}

public Kolo(double promien)
	{
		this.promien = promien;
	}

public double pole()
	{
		return Math.PI*promien*promien;
	}

public double obwod()
	{
		return 2*Math.PI*promien;
	}

}

Prostokat:

package pl.teleseil.two;


class Prostokat extends Figury
{
	private double a, b;
	
	Prostokat()
	{
		this(1, 0);
	}
	
	public Prostokat(double a, double b)
	{
		this.a = a;
		this.b = b;
	}
	
	public double pole()
	{
		return a*b;
	}
	
	public double obwod()
	{
		return (2*a)+(2*b);
	}
	
}

Figury:

package pl.teleseil.two;

public abstract class Figury {
	abstract double pole();
	abstract double obwod();
}

Oblicz:

package pl.teleseil.two;

public class Oblicz {
	public static void main(String[] args) {
		Figury[] fig = {new Kolo(6), new Prostokat(1,6)};
		
		System.out.println("Pole Koła wynosi: " + fig[0].pole());
		System.out.println("Obwód Koła wynosi: " + fig[0].obwod() + "\n");
		
		System.out.println("Pole Prostokąta wynosi: " + fig[1].pole());
		System.out.println("Obwód Prostokąta wynosi: " + fig[1].obwod());

	}

}
0

Tak. Jaki jest sens tworzenia domyślnie prostokąta, który ma bok o długości zero?

public Prostokat()
{
    this(1,0);
}
0
bogdans napisał(a):

Tak. Jaki jest sens tworzenia domyślnie prostokąta, który ma bok o długości zero?

public Prostokat()
{
    this(1,0);
}

Było 1, zmieniłem i zapomniałem zmienić z powrotem na 1.

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