![]() |
|
Wer kann Java und kann mir kurz helfen? - Druckversion +- Xbox Hilfe Forum (https://xbox-hilfe-forum.de) +-- Forum: Off Topic (https://xbox-hilfe-forum.de/forumdisplay.php?fid=45) +--- Forum: Allgemeines (https://xbox-hilfe-forum.de/forumdisplay.php?fid=46) +--- Thema: Wer kann Java und kann mir kurz helfen? (/showthread.php?tid=16181) |
Wer kann Java und kann mir kurz helfen? - McWolf - 07.11.2010 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] - cyrex - 07.11.2010 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);
}
}
}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);
}
}
}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);
}
}- McWolf - 07.11.2010 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 - cyrex - 07.11.2010 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. - McWolf - 07.11.2010 Ein bisschen komisch finde ich die Vorgabe ja auch. Edit: man, man, das ist schon heftig wie wichtig die Position der Klammer ist. - cyrex - 07.11.2010 Naja... Lehrer/Dozenten ... die wissen oft selbst nicht was sie gerade tun/wollen .
- McWolf - 07.11.2010 Das stimmt wohl. Wobei meine Dozentin in Programmieren recht kompetent wirkt. Was ich von meiner DB Dozentin nicht gerade behaupten kann. - cyrex - 07.11.2010 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 - McWolf - 07.11.2010 Das schaue ich mir mal die Tage genauer. Jetzt muss ich erstmal meine Hausaufgabe fertig machen. Der obere Teil war ja nur der Anfang. |