java noob

*FullFlex*

Lt. Junior Grade
Registriert
Sep. 2005
Beiträge
362
habe hier eine programm als hausaufgabe auf bekommen das noch echt nicht schwer ist, nur habe ich grad nen brett vorm kopf, ich weiss das ich das r(rabatt) nicht richtig initialisiert habe. nur der wert ergibt sich erst aus der rechnung und ich hab keine ahnung wie ich den vorher schon bestimmen soll. hoffe ihr versteht das und könnt mir weiter helfen.


folgendes programm habe ich geschrieben.

import java.io.*; // soll ein Paket für Ein-Ausgabe öffnen
public class wertbestimmung
{
public static void main (String args [] ) throws IOException
{

String x,y,g,v;

double w,a,r;

BufferedReader ein = new BufferedReader (new InputStreamReader(System.in));


//_____________________________EINGABE____________________________________

System.out.println ("\n\t Geben sie bitte ihren Warenwert ein.");
x=ein.readLine ();
w=Double.parseDouble(x);


System.out.println ("\n\t Bezahalen Sie Bar?= press 1 oder auf Rechnung?= press 2");
y=ein.readLine ();
a=Double.parseDouble(y);


//_____________________________Bearbeitung______________________________

if (a==1) // Bar
{
if (w<100)
{
r=w*0.035;
}

if (w>=100&&w<500)
{
r=w*0.05;
}

if (w>=500)
{
r=w*0.07;
}

System.out.println("Rabatt= "+r+"Euro"); // Rabattausgabe
v=ein.readLine();
}

if (a==2) // Auf Rechnung
{
if (w<100)
{
r=w*0.03;
}

if (w>=100&&w<500)
{
r=w*0.045;
}

if (w>=500)
{
r=w*0.06;
}

System.out.println("Rabatt= "+r+"Euro"); // Rabattausgabe
v=ein.readLine();
}


//________________________________AUSGABE_____________________________________


w=w-r;
System.out.println("Zu bezahlen= "+w+"Euro"); // Endbetrag
g=ein.readLine();


}
}


FEHLERMELDUNG: wertbestimmung.java:45:41: variable r might not have been initialized
System.out.println("Rabatt= "+r+"Euro"); // Rabattausgabe
^
wertbestimmung.java:66:41: variable r might not have been initialized
System.out.println("Rabatt= "+r+"Euro"); // Rabattausgabe
^
wertbestimmung.java:74:15: variable r might not have been initialized
w=w-r;
^
3 errors
 
Zuletzt bearbeitet:
? wo isn der unterschied, und wenn ich das als hobby mache, wäre es dann ok wenn ich das hier poste, weil ich ein problem habe? dachte dafür sind boards da, wenn man probleme hat, auch wenn nicht nur für probleme?!

so what?!
 
@krizzelfix: Ach, ich finde das diesmal ganz angebracht. Das Programm hat er selber geschrieben und fragt nun konkrekt, wieso diese Fehlermeldung auftaucht. Finde ich legitim. Du interpretierst diese Regel falsch. Es ist nur verboten hier Hausaufgabentexte (also die Fragestellung) zu posten und zu fordern, dass die Community die Aufgabe löst. Konkrete Fragestellungen sind auch in dem Fall aber okay. Der einzige Vorwurf, dem ich den Fragesteller hier machen würde, ist, dass der Thread-Titel wenig aussagekräftig ist :)

@FullFlex: Das Prob ist, dass der Compiler in deinem Code nicht erkennt, dass r in jedem Fall einen Wert bekommt. Du gibst in Zeile 45 den Wert von r aus, aber der Compiler glaubt, dass es sein kann, dass dieses r gar keinen Wert bekommen hat. Es gibt mehrere Lösungen:

Zum Beispiel könntest du r einfach direkt bei Erstellung mit 0 initialisieren (also double r = 0.0;). Das ist aber die eher hässliche Lösung. Besser wäre, du würdest es weiter unten so schreiben:

Code:
if (w<100)
{
   r=w*0.035;
} else if(w>=100&&w<500)
{
   r=w*0.05;
} else
{
   r=w*0.07;
}

In dem Fall erkennt der Compiler, dass r in jedem Fall einen Wert bekommen wird.

Nachtrag: Das könnte man von der Logik noch optimieren, zum Beispiel so:

Code:
if (w < 100) {
   r = w * 0.035;
} else if(w < 500) {
   r = w * 0.05;
} else {
   r = w * 0.07;
}
 
Zuletzt bearbeitet:
1000dank, hat mit den 0.0 geklapp, erinnere mich das schonmal gemacht zu haben. und bei deine schöneren lösung checkt der compiler das r nen wert hat duch das else? werd es aber auch gleich versuchen.
 
Genau so sieht das aus. Da garantiert entweder der if- oder else-Zweig abgearbeitet wird - und das weiß der Compiler - bekommt r garantiert einen Wert.
 
Zurück
Oben