Wątek przeniesiony 2014-10-25 21:36 z Java przez ŁF.

Program obliczający obwody i pola figur geometrycznych

0

Jestem na etapie stawiania pierwszych kroków w javie. Dostałem za zadanie stworzyć aplikację która liczy obwód oraz pole kwadratu (a,b), prostokąta (a) oraz trójkąta (a, b, c). W przypadku trójkąta dodatkowo program ma sprawdzić czy z podanych (przez użytkownika) liczb da radę zbudować trójkąt. Wszystko już mam praktycznie stworzone, jednak stoję przy tym sprawdzaniu poprawności trójkąta.
Kodowo wygląda to następująco:

trojkat.java:

package test;

public class Trojkat {
    
    float a;
    float b;
    float c;
    
    public Trojkat(float a, float b, float c){
        this.a = a;
        this.b = b;
        this.c = c;
    }
    
    public float pole(){
        float x = (a+b+c)/2;
        return (float)Math.sqrt((x - a)*(x - b) * (x - c)*(x));
    }
    
    public float obwod(){
        return this.a + this.b + this.c;
    }
    
}

test.java

package test;

import java.util.Scanner;

public class Test {

    public static void main(String[] args) {

        (  . . . )

        float d;
        float e;
        float f;
        
        System.out.println("Podaj bok 1 trójkąta:");
        d = in.nextInt();
        
        System.out.println("Podaj bok 2 trójkąta:");
        e = in.nextInt();
        
        System.out.println("Podaj bok 3 trójkąta:");
        f = in.nextInt();
        
        Trojkat t1 = new Trojkat(d, e, f);
        System.out.println("Pole tego trójkąta wynosi: " + t1.pole());
        System.out.println("Obwód tego trójkąta wynosi: " + t1.obwod());
        
    }
    
}

Ma ktoś jakiś pomysł jak ugryźć ten problem?

0

Bardziej techniczna kwestia mnie interesowała bo samą zasadę rozumiem.
Znalazłem przed chwilą jakiś poradnik dla pascala i na jego wzorze stworzyłem taki kod:

boolean kontrola;
        
        if (this.d > this.e) and (this.d > this.f) {
            if (this.d < this.e + this.f) {
                kontrola = true;
            } else {
                kontrola = false;
            } else {
                if (this.e > this.d) and (this.e > this.f) {
                    if (this.e < this.d + this.f) {
                    kontrola = true;
                    } else {
                    kontrola = false;
                    } else {
                    if (this.f < this.d + this.e) {
                        kontrola = true;
                    } else {
                        kontrola = false;
                    }
                    }   
                }
            }
        }
        
        if (kontrola == true) {
            System.out.println("Trójkąt nie istnieje!");
        } else {
            System.out.println("Trójkąt istnieje!");
        }

Wie ktoś co tu jest błędne?

dodanie znacznika <code class="java"> - @furious programming

0

W klasie Trojkat proponuje dopisać sprawdzenie istnienia:

public boolean Istnieje()
{
    if (a >= (b + c)) { return false; }
    if (b >= (a + c)) { return false; }
    if (c >= (a + b)) { return false; }
    return true;
}

Ta metoda sprawdza, czy istnieje trójkąt o bokach podanych przy tworzeniu obiektu.

0

Mógłbym jeszcze prosić o jakieś informacje jak się do tego odnieść w klasie głównej?

Edit: Ewentualnie mam jeszcze takie cudo ale również nie działa ;/

if (this.d + this.e > this.f && this.d + this.f > this.e && this.e + this.f > this.d) {
            System.out.println("Jest ok");
        } else {
            System.out.println("Bład");
        }

Edit2: Okej już wszystko działa jak należy ;)
Jeszcze dla pewności prosiłbym byście ocenili czy oby na pewno mam dobrze:

if (d + e > f && d + f > e && e + f > d) {
            Trojkat t1 = new Trojkat(d, e, f);
            System.out.println("Pole tego trójkąta wynosi: " + t1.pole());
            System.out.println("Obwód tego trójkąta wynosi: " + t1.obwod());
        } else {
            System.out.println("To nie jest trójkąt");
        }

dodanie znaczników <code class="java"> - @furious programming

1

Dodaj to jako metodę klasy Trojkat:

boolean IsOk() { return (a+b>=c)&&(a+c>=b)&&(b+c>=a); }

Wykorzystujesz:

Trojkat T=new Trojkat(d, e, f);
if(!T.IsOk()) System.out.println("Trójkąt nie istnieje");
else {
        System.out.println("Pole tego trójkąta wynosi: " + T.pole());
        System.out.println("Obwód tego trójkąta wynosi: " + T.obwod());
}
2

w zasadzie jeżeli to klasa trójkąt to można byłoby to sprawdzać w klasie trójkąt i walić np. IllegalArgumentException

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