Huhu Leute,
Erstmal: Das ist mein erster Post, also bitte nicht sauer sein wenn ich was falsch mache^^
Ich habe seit diesem Jahr nun Java in der Schule und muss eine Hausaufgabe bezüglich if ( ohne else) machen. Die folgende Aufgabe ist jedoch KEINE Hausaufgabe, sondern lediglich eine bereits gelöste Aufgabe die ich wiederhole.
Mein Problem ist, das ich folgendes machen möchte: Wenn a+c > b a+b > c b+c > a ist, soll er eine Textnaricht ausgeben. So habe ich es geschrieben:
import java.io.*;
public class Dreieck
{
public static void main(String argv[]) throws IOException
{
double a;
double b;
double c;
String str;
BufferedReader eingabe=new BufferedReader (new InputStreamReader(System.in));
System.out.print("Geben sie A an: ");
str = eingabe.readLine();
System.out.print("Geben sie B an: ");
str = eingabe.readLine();
System.out.print("Geben sie C an: ");
str = eingabe.readLine();
a = Double.parseDouble(str);
System.out.println("A ist "+a);
b = Double.parseDouble(str);
System.out.println("B ist "+b);
c = Double.parseDouble(str);
System.out.println("C ist "+c);
if ((a+b > c)&&
(a+c > b) &&
(b+c > a)
)
System.out.println ("Das Dreieck ist konstruierbar.");
}
}
Das Problem ist das per Konsole IMMER „Das Dreieck ist konstruierbar“ rauskommt, egal welchen Wert ich eintrage.
Die Variable str wird immer überschrieben, bevor sie ausgewertet wird. Entweder verschiedene Variablen nehmen, oder den Ablauf ändern:
System.out.print("Geben sie A an: ");
str = eingabe.readLine();
a = Double.parseDouble(str);
System.out.print("Geben sie B an: ");
str = eingabe.readLine();
b = Double.parseDouble(str);
System.out.print("Geben sie C an: ");
str = eingabe.readLine();
c = Double.parseDouble(str);
System.out.println("A ist "+a);
System.out.println("B ist "+b);
System.out.println("C ist "+c);
Noch ein paar Verbesserungsvorschläge: Eingabe lässt sich bequemer über die Klasse Scanner erledigen. Bei if angewöhnen, den im Erfolgsfall auszuführenden Code in geschweifte Klammern zu schreiben, selbst wenn es nur eine Zeile ist.
Und: Immer erst den Fehler ganz sicher eingrenzen, bevor du dich vorschnell auf einen “Schuldigen” (wie hier if) einschießt, der gar nichts dafür kann.
Danke euch beiden! Habe das Problem gelöst.
Jedoch bin ich nun bisschen neugierig bezüglich der Klasse Scanner. Davon wurde uns bisher nichts gesagt. Könntet ihr mir erklären wie man die Klasse Scanner anwendet und evtl. ein kleines Beispiel dazu machen?
SlaterB, was genau wird in dieser Zeile gemacht?
3 Sachen dort sind mir neu, nämlich „static“, "read"Double und „(BufferedReader eingabe, String typ)“
bezüglich BufferedReader:
Das hatten wir bereits und benutzen es auch im Unterricht, jedoch hat man uns einfach gesagt: „Das ist jetzt so, darüber reden
wir noch.“ Deshalb bin ich nun neugierig da du es anders hast als wir es lernten.
Es tut mir leid das ich euch so belästige mit meinen Fragen
Methoden erlernen:
‚java methoden‘ in Suchmaschine oder idealerweise Lehrbuch Schritt für Schritt, etwa Galileo Computing :: Java ist auch eine Insel - index
Methoden-Kapitel ist auch dort zu finden, aber lohnt bei solchen Grundlagen nicht von Reihenfolge abzuweichen
statische Methoden lernen:
‚java methoden static‘ in Suchmaschine oder idealerweise Lehrbuch Schritt für Schritt […]
Scanner:
‚java Scanner example‘ in Suchmaschine
→ z.B. Java Input Using Java Scanner
auf englisch, gut zu können,
sonst Suche halt anpassen auf ‚Beispiel‘ statt ‚example‘ usw., ein Kopf ist ja da
edit:
ich sage aber gleich, dass ich persönlich BufferedReader dem Scanner vorziehe,
readLine() liest Zeilen, die muss man parsen oder bekommt Exceptions,
Arbeit, aber ehrliche, immer nachvollziehbar sauber Schritt für Schritt
bei Scanner kann man mit Auslassungen oder Blockade bis endlich mal die gewünschte Zahl als nächstes lesbar ist usw. in die Bug-Küche kommen