Dreiecke Berechnen

java_noob

Mitglied
Guten tag allerseits!

Ich bin student und schreibe am Dienstag meine Klausur über Java.
Ich habe wie immer früh angefangen zu lernen :lol: und stehe gerade vor fogendem Problem.

Die Aufgabe besteht darin 3 Seiten eines Dreieckes eingeben zu können. Diese sollen als erstes überprüft werden ob es überhaupt ein Dreieck ergibt. Wenn nicht dann soll eine Fehlermeldung erscheinen und dem Benutzer soll wieder die Möglichkeit gegeben werden neue Werte einzugeben.
Wenn die eingegebenen Werte ein Dreieck ergeben sollen die Winkel und der Flächeninhalt berechnet werden. Die Formalen dafür gibt er uns vor.

Der Punkt das die Variablen überprüft werden funktioniert und falls sie keins ergeben erscheint auch die Fehlermeldung mit erneuter möglichkeit neue werte einzugeben.
Nur die Berechnung der Winkel und des Flächeninhaltes funktionieren nicht.
JConsole sollen wir benutzen. Ist eine Oberfläche (wenn man das so nennt) die hier wohl ein Prof an der Fh erstellt hat.

Besten Dank schonmal für die Hilfe.

Java:
public class scheiße
{
  public static void main ( String args [] ) {
      double a, b, c, alpha=0, beta=0, gamma=0, A=0;
      JConsole fenster = new JConsole ("Dreieck");
      
      try {
          fenster.println ("Programm startet");
          a = fenster.readDouble (" Bitte Wert für Seite a eingeben : ");
          b = fenster.readDouble (" Bitte Wert für Seite b eingeben : ");
          c = fenster.readDouble (" Bitte Wert für Seite c eingeben : ");
          fenster.println ("Programm überprüft Variablen");
          if ((a+b)>c & (a+c)>b & (b+a)>c & (b+c)>a & (c+a)>b & (c+b)>a ){
           
                alpha = Math.acos((b*b + c*c - a*a) / (2*b*c));
                alpha = alpha*(180/java.lang.Math.PI);
                beta = Math.asin( ( b/a)*(Math.sin(alpha)));
                beta = beta*(180/java.lang.Math.PI);
                gamma = java.lang.Math.PI - (alpha-beta);
                gamma = gamma*(180/java.lang.Math.PI);
                A = 0.5*a*b*Math.sin(gamma); 
            }
            else { 
                fenster.println ("Variablen ergeben kein Dreieck");
                a = fenster.readDouble (" Bitte Wert für Seite a eingeben : ");
                b = fenster.readDouble (" Bitte Wert für Seite b eingeben : ");
                c = fenster.readDouble (" Bitte Wert für Seite c eingeben : ");
                fenster.println ("Programm überprüft Variablen");
               
            }
        }
            catch (InterruptedException ie ) {}
            fenster.println( alpha + beta + gamma + A  ) ;
            fenster.println( "Ende des Programms");
        }
    }
 

javimka

Top Contributor
Du machst ein bisschen ein Chaos mit Winkeln im Radian und Winkel im Grad Mass. Definiere doch besser zweile ein rAlpha für den Radian und ein gAlpha für Alpha im Grad Mass (oder ähnliche Namen).

Math.sin erwartet natürlich Winkel im Radian Mass. In Zeile 21 rechnest du gamme aber ins Grad Mass um. Deswegen wird der Sinus auf Zeile 22 das falsche Resultat zurückgeben und die Fläche stimmt nicht.

Du solltest beim Programmieren Buchstaben wie ß vermeiden und Klassennamen werden gross geschrieben.
 

nrg

Top Contributor
(a+b)>c ist für mich das gleiche wie (b+a)>c.

ist aber jetzt nur ein schönheitsfehler ;)

edit: und der operator für und ist &&

grüße
nrg
 
Zuletzt bearbeitet:

java_noob

Mitglied
Stimmt, der Schönheitsfehler ist mir noch nicht aufgefallen :) Werd ich aber jetzt auch nicht mehr ändern.

Das mit den Verschieden Winkelmaße stimmt. Habs geändert und eine Formel war falsch eingeben.
Bin mächtig stolz auf mich gerade, denn habe meine erste Klausuraufgabe bestanden und dait hätte ich auch die Klausur bestanden.
Falls es jemanden interessiert, so funktioniert alles!

Java:
public class Kot
{
  public static void main ( String args [] ) {
      double a, b, c, alpha=0, beta=0, gamma=0, A=0, galpha=0, gbeta=0, ggamma=0;
      JConsole fenster = new JConsole ("Dreieck");
      
      try {
          fenster.println ("Programm startet");
          a = fenster.readDouble (" Bitte Wert für Seite a eingeben : ");
          b = fenster.readDouble (" Bitte Wert für Seite b eingeben : ");
          c = fenster.readDouble (" Bitte Wert für Seite c eingeben : ");
          fenster.println ("Programm arbeitet...");
          if ((a+b)>c && (a+c)>b && (b+a)>c && (b+c)>a && (c+a)>b && (c+b)>a ){
           
                alpha = Math.acos((b*b + c*c - a*a) / (2*b*c));
                galpha = alpha*(180/java.lang.Math.PI);
                beta = Math.asin( ( b/a)*(Math.sin(alpha)));
                gbeta = beta*(180/java.lang.Math.PI);
                gamma = java.lang.Math.PI - (alpha+beta);
                ggamma = gamma*(180/java.lang.Math.PI);
                A = 0.5*a*b*Math.sin(gamma); 
            }
            else { 
                fenster.println ("Variablen ergeben kein Dreieck");
                a = fenster.readDouble (" Bitte Wert für Seite a eingeben : ");
                b = fenster.readDouble (" Bitte Wert für Seite b eingeben : ");
                c = fenster.readDouble (" Bitte Wert für Seite c eingeben : ");
                fenster.println ("Programm arbeitet...");
               
            }
        }
            catch (InterruptedException ie ) {}
            fenster.print ( "alpha = ") ;
            fenster.print ( galpha,7,4 ) ;
            fenster.println ("°") ;
            fenster.print ( "beta = " ) ;
            fenster.print ( gbeta,7,4 ) ;
            fenster.println ("°") ;
            fenster.print ( "gamma = " );
            fenster.print ( ggamma,7,4 ) ;
            fenster.println ("°") ;
            fenster.print ( "A = " ) ;
            fenster.print ( A,10,2 ) ;
            fenster.println ("m²") ;
            fenster.println( "Ende des Programms");
        }
    }

Danke soweit. Ich werde mich am wochenende bestimmt noch einmal mit ein paar sachen melden ;)
 
Zuletzt bearbeitet:

java_noob

Mitglied
Stimmt, der Schönheitsfehler ist mir noch nicht aufgefallen :) Werd ich aber jetzt auch nicht mehr ändern.

Das mit den Verschieden Winkelmaße stimmt. Habs geändert und eine Formel war falsch eingeben.
Bin mächtig stolz auf mich :D, denn damit habe ich meine erste Klausuraufgabe gelöst und damit hätte ich auch die Klausur bestanden.
Falls es jemanden interessiert, so funktioniert alles!

Java:
public class Kot
{
  public static void main ( String args [] ) {
      double a, b, c, alpha=0, beta=0, gamma=0, A=0, galpha=0, gbeta=0, ggamma=0;
      JConsole fenster = new JConsole ("Dreieck");
      
      try {
          fenster.println ("Programm startet");
          a = fenster.readDouble (" Bitte Wert für Seite a eingeben : ");
          b = fenster.readDouble (" Bitte Wert für Seite b eingeben : ");
          c = fenster.readDouble (" Bitte Wert für Seite c eingeben : ");
          fenster.println ("Programm arbeitet...");
          if ((a+b)>c && (a+c)>b && (b+a)>c && (b+c)>a && (c+a)>b && (c+b)>a ){
           
                alpha = Math.acos((b*b + c*c - a*a) / (2*b*c));
                galpha = alpha*(180/java.lang.Math.PI);
                beta = Math.asin( ( b/a)*(Math.sin(alpha)));
                gbeta = beta*(180/java.lang.Math.PI);
                gamma = java.lang.Math.PI - (alpha+beta);
                ggamma = gamma*(180/java.lang.Math.PI);
                A = 0.5*a*b*Math.sin(gamma); 
            }
            else { 
                fenster.println ("Variablen ergeben kein Dreieck");
                a = fenster.readDouble (" Bitte Wert für Seite a eingeben : ");
                b = fenster.readDouble (" Bitte Wert für Seite b eingeben : ");
                c = fenster.readDouble (" Bitte Wert für Seite c eingeben : ");
                fenster.println ("Programm arbeitet...");
               
            }
        }
            catch (InterruptedException ie ) {}
            fenster.print ( "alpha = ") ;
            fenster.print ( galpha,7,4 ) ;
            fenster.println ("°") ;
            fenster.print ( "beta = " ) ;
            fenster.print ( gbeta,7,4 ) ;
            fenster.println ("°") ;
            fenster.print ( "gamma = " );
            fenster.print ( ggamma,7,4 ) ;
            fenster.println ("°") ;
            fenster.print ( "A = " ) ;
            fenster.print ( A,10,2 ) ;
            fenster.println ("m²") ;
            fenster.println( "Ende des Programms");
        }
    }

Danke soweit. Ich werde mich am wochenende bestimmt noch einmal mit ein paar sachen melden ;)
 

nrg

Top Contributor
Der Punkt das die Variablen überprüft werden funktioniert und falls sie keins ergeben erscheint auch die Fehlermeldung mit erneuter möglichkeit neue werte einzugeben.

die möglichkeit hat dein benutzer aber noch net ;). hab mich in die formelgeschichte jetzt nicht tiefer reingedacht aber das sieht schonmal ganz gut aus.

grüße
nrg
 

java_noob

Mitglied
??? Wenn die bedingung erfüllt ist das 2 seiten addiert größer sind wie die 3. seite dann berechnet er Winkel und Fläche und gibt das ergebniss mit 4 bzw. 2 nachkommastellen aus.
Wenn diese Bedingung nicht erfüllt ist geht das Programm doch in den "else" block, dann kommt die Meldung Variablen ergeben kein Dreieck und danach wieder die Befehle die die eingabe von Variablen ermöglichen.
Bei meinem Testlauf mit diversen Werten hat es alles einwandfrei funktioniert.
Nicht schön geschrieben und es würde mit sicherheit auch kürzen und einfacher gehen, aber solange das Programm läuft hat das keinen einfluss auf die Bewertung.

mfg
 

nrg

Top Contributor
Wenn diese Bedingung nicht erfüllt ist geht das Programm doch in den "else" block, dann kommt die Meldung Variablen ergeben kein Dreieck und danach wieder die Befehle die die eingabe von Variablen ermöglichen.
mfg

richtig aber IMHO wird das 2te Dreieck nicht mehr ausgerechnet bzw überhaupt abgeprüft, sondern nach
"Programm arbeitet..."
ist ende...

oder stehe ich gerade irgendwie aufm schlauch? für mich fehlt da eine schleife, die solange durchläuft, bis sie entweder durch eine benutzereingabe verlassen wird oder der benutzer werte für ein potenzielles dreieck eingibt.
grüße
 

java_noob

Mitglied
Das stimmt! Danke für den Hinweiß. Ist mir nicht aufgefallen.
Aber wie kann ich das beheben? Gibt es einen befhel mit dem ich z.B. wieder in eine bestimmt Zeile springen kann damit er da weiterrechnet?

mfg
 

nrg

Top Contributor
also ich mach das immer mit einer schleife... endet bei "größeren" sachen immer weng unschön aber das lässt sich denke bei consolenapps imho net vermeiden.

Java:
boolean isCorrect;
do{
     //Eingabeaufforderung...
     if (isTriangle){
         //A ermitteln
         isCorrect = true;
     }
     else{
         isCorrect = false;
     }
}while (!isCorrect);

so zb

grüße
nrg
 
Zuletzt bearbeitet:

Oben