Zum Inhalt springen

Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Wer kann Java und kann mir kurz helfen?
#1
Hallo,
ich muss zur Zeit Java lernen und stecke noch ganz am Anfang.

Unten ist der Quellcode. Ziel soll es sein dass bei der Eingabe einer negativen Zahl das Ergenis1 dargestellt werden soll und bei einer positiven Zahl Erbenis2.
Das Problem ist aber das bei der Eingabe einer negativen Zahl sowohl Ergebnis1 und Ergebnis2 ausgegeben wird.
Bei der Eingabe einer positiven Zahl wird korrekterweise nur Ergebnis2 ausgegeben.

Weiß jemand wo genau der Fehler liegt?

[spoiler]import java.io.*;


public class Aufgabe4 {

/**
* @param args
*/
public static void main(String[] args) throws IOException {

int zahl1, zahl2 ;

System.out.println ("Geben Sie eine ganze Zahl ein");
BufferedReader br = new BufferedReader (
new InputStreamReader(System.in));
zahl1 = Integer.parseInt(br.readLine());
//Exception
if (zahl1 <0)
System.out.println ("Ergebnis1 = " + 0);
if (zahl1 >=0)
zahl1 = (zahl1 *10/100)+zahl1;
System.out.println ("Ergebnis2 = " + zahl1);
}
}[/spoiler]
[Bild: opera468x60.gif]
Zitieren
#2
Was dir fehlen sind Klammern. Gewöhne es dir an, alleine der Übersicht halber:
[spoiler]
Code:
import java.io.*; public class Aufgabe4 { /** * @param args */ public static void main(String[] args) throws IOException { int zahl1, zahl2 ; System.out.println ("Geben Sie eine ganze Zahl ein"); BufferedReader br = new BufferedReader ( new InputStreamReader(System.in)); zahl1 = Integer.parseInt(br.readLine()); //Exception if (zahl1 <0){ System.out.println ("Ergebnis1 = " + 0); } if (zahl1 >=0){ zahl1 = (zahl1 *10/100)+zahl1; System.out.println ("Ergebnis2 = " + zahl1); } } }
[/spoiler]

Vereinfachen kann man das Ganze auch noch, indem du eine else statement nutzt:

[spoiler]
Code:
import java.io.*; public class Aufgabe4 { /** * @param args */ public static void main(String[] args) throws IOException { int zahl1, zahl2 ; System.out.println ("Geben Sie eine ganze Zahl ein"); BufferedReader br = new BufferedReader ( new InputStreamReader(System.in)); zahl1 = Integer.parseInt(br.readLine()); //Exception if (zahl1 <0){ System.out.println ("Ergebnis1 = " + 0); } else{ zahl1 = (zahl1 *10/100)+zahl1; System.out.println ("Ergebnis2 = " + zahl1); } } }
[/spoiler]

Du solltest auch noch beachten, dass du mit Integer Variablen arbeitest. Dein Code wird bei zahl1 = (zahl1 *10/100) + zahl1 so gut wie immer Fließkommazahlen erzeugen. Integer übernimmt aber nur Ganzzahlige Werte. Sprich dein Ergebnis wird nie wirklich stimmen.

Ich hab dir den Code hier auch nochmal etwas vereinfacht:

[spoiler]
Code:
import java.io.*; public class Aufgabe4 { /** * @param args */ public static void main(String[] args) throws IOException { //Variablen BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in)); int zahl; int ergebnis; //Eingabeaufforderung System.out.println("Geben Sie eine ganze Zahl ein"); //parse den eingegebenen String in einen Integer zahl = Integer.parseInt(eingabe.readLine()); //Prüfe ob die eingegebene Zahl kleiner als 0 ist if(zahl < 0){ //Das Ergebnis ist dann 0 ergebnis = 0; } //Sonst berechne das Ergebnis else{ ergebnis = (zahl *10/100)+zahl; } //Gebe das Ergebnis aus System.out.println("Ergebnis = " + ergebnis); } }
[/spoiler]
Zitieren
#3
Danke für die ausführliche Antwort.
Dass mir dann Klammern fehlen könnten hätte ich wohl als letztes vermutet.
Wenn man sich zur sehr auf Eclipse verlässt...

Das mit int sollte theoretisch aber korrekt sein da wir laut Aufgabe eine "Ganzzahlrechnung" machen sollen.

MfG
Mcwolf
[Bild: opera468x60.gif]
Zitieren
#4
Nagut... wenn ihr das so mit Integer Variablen machen sollt, dann passt das.

Dachte nur, weil (Bsp Eingabe von 5): 5 *10/100 + 5 = 0.5 + 5 = 5.5 Du bekommst aber nur 5 ausgerechnet weil die Fließkommastellen wegfallen.
Zitieren
#5
Ein bisschen komisch finde ich die Vorgabe ja auch.

Edit: man, man, das ist schon heftig wie wichtig die Position der Klammer ist.
[Bild: opera468x60.gif]
Zitieren
#6
Naja... Lehrer/Dozenten Big Grin ... die wissen oft selbst nicht was sie gerade tun/wollen Smile.
Zitieren
#7
Das stimmt wohl. Wobei meine Dozentin in Programmieren recht kompetent wirkt.
Was ich von meiner DB Dozentin nicht gerade behaupten kann.
[Bild: opera468x60.gif]
Zitieren
#8
McWolf,index.php?page=Thread&postID=176342#post176342' schrieb:Edit: man, man, das ist schon heftig wie wichtig die Position der Klammer ist.
Du kannst die Klammern theoretisch auch weglassen... ABER dann wird nur die nächste folgende Anweisung in den block gepackt, der nach der Bedingung kommt.
Beispiel:
Code:
if(a>b) c = a+b; System.out.println(c);

entspricht dann:
Code:
if(a>b) { c = a+b; } System.out.println(c);

und nicht wie man oft denkt:
Code:
if(a>b) { c = a+b; System.out.println(c); }

Also ist es sowieso immer sinnvoll Klammern zu setzen, denn:
- es ist übersichtlicher
- vereinfacht die Wartbarkeit/Erweiterbarkeit
- ...

Kannst dir ja mal die CodeConventions für Java anschauen, ist sehr nützlich. "Sauberer" Code ist wirklich durch nichts zu ersetzen. Ich kenne da noch zwei gute Bücher die wirklich interessant sind.

- Clean Code
- der pragmatische Programmierer
Zitieren
#9
Das schaue ich mir mal die Tage genauer.
Jetzt muss ich erstmal meine Hausaufgabe fertig machen.
Der obere Teil war ja nur der Anfang.
[Bild: opera468x60.gif]
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste