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, botów: 0