Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo zusammen,
ich versuche mich seit Tage verzweifelt an folgender Aufgabe:
"Programmieren Sie folgendes Würfelspiel: Es wird mit einem Würfel so lange gewürfelt, bis eine Sechs gewürfelt wird. Ale bis dahin gewürfelten Ergebnisse, ohne die Sechs, sollen addiert werden. Geben Sie am Schluss die Anzahl der erfolgreichen Würfe und die Endsumme aus.
Erstellen Sie eine Klasse, mit deren Funktionalitäten sie diese Aufgabe lösen können. "
Methode1 läuft soweit sobald ich Methode2 mit auskommentiere, erhalte ich folgende Fehlermeldung: "36: methode2(int) in Wuerfel_neu cannot be applied to ()"
Ich wäre sehr dankbar für die Fehlerübersetzung. Langsam fang ich an zu verzweifeln :bahnhof:
Hier mein Quellcode:
Java:
public class Wuerfel_neu
{
public static int methode1()
{
int y = 0;
y = (int) (6*Math.random()+1);
return y;
}
public static int methode2(int x)
{
int w_addieren = 0;
w_addieren = w_addieren + x;
return w_addieren;
}
public static void main (String [] args)
{
int x = 0;
int summe = 0;
int zaehler=0;
for ( ; x!=6; )
{
zaehler++;
x = Wuerfel_neu.methode1();
System.out.println("Die gewürfelte Zahl lautet: " +x);
if (x!=6)
Wuerfel_neu.methode2(x);
}
summe = Wuerfel_neu.methode2();
System.out.println("Summe: " +summe);
System.out.println("Erfolgreiche Würfe: " +zaehler);
}
}
Gib bitte den Methoden sprechende Namen methode1() ist blödsinn.
Java:
int runs=0, sum=0;
Random rand= new Random();
boolean run=true;
while(run){
int next=rand.nextInt(6)+1;
if (next==6){
run=false;
}else{
sum=sum+next;
runs++;
}
}
System.out.println(sum);
System.out.println(runs);
Schau dir mal den Code an der sollte machen was du willst.
Er läuft solange in der schleife, solange die Zahl nicht 6 ist.
wenn sie sechs ist wird die variable run auf false gesetzt und die schleife beendet andernfalls wird die Zahl next zur summe hinzugefügt und die Zählvariable um eins erhöht.
Der Fehler liegt mit der Methode 2 liegt darin, dass Methode 2 einen Übergabeparameter haben will, du ihn aber mit dem Aufruf >summe = Wuerfel_neu.methode2();< keinen gibst.
Code:
public class Wuerfel_neu {
public static int methode1() {
int y = 0;
y = (int) (6 * Math.random() + 1);
return y;
}
public static int methode2(int x) {
int w_addieren = 0;
w_addieren = w_addieren + x;
return w_addieren;
}
public static void main(String[] args) {
int x = 0;
int summe = 0;
int zaehler = 0;
while (x != 6) {
zaehler++;
x = Wuerfel_neu.methode1();
System.out.println("Die gewürfelte Zahl lautet: " + x);
if (x != 6)
summe += Wuerfel_neu.methode2(x);
}
System.out.println("Summe: " + summe);
System.out.println("Erfolgreiche Würfe: " + zaehler);
}
}
Des Weiteren hattest du einen gedanklichen Fehler. Da du in der Schleife alle Zischenergebnisse der Summe hinzufügen musst, darfst du nach der Schleife nicht >summe = Wuerfel_neu.methode2(x);< machen, dadurch überschreibst du ja deine Summe mit dem zuletzt gefundenen Wert. Besser ist, du addierst sie direkt in der Schleife >summe += Wuerfel_neu.methode2(x);< und gibst sie danach nur noch aus
vielen Dank für eure Antworten Also wenn ich den letzten Hinweis von AmunRa nicht beachte, dass die methode2 eigentlich sinnlos ist, läuft mein Programm endlich.
Hole ich jedoch die Variableninitialisierung aus methode2 raus, so wird mir die Fehlermeldung ausgeben, dass ich die Variable w_addieren zu initialisieren hätte.
Wieso darf ich die Variable in einer Methode nicht nicht initialisieren?
Kann ich die Variable global initialisieren o. ä. ?
Julia
@ Meru: Achja und Danke für das Umbauen der for in eine while-schleife! Das ist natürlich die elegantere Variante
Weil jede Variable vor ihrer ersten Benutzung initialisiert sein MUSS. Das stellt der Compiler sicher, ansonsten kompiliert er die Klasse nicht. Dir ist das bis jetzt wahrscheinlich noch nicht aufgefallen, weil Membervariablen automatisch mit eines dieser Werte initialisiert werden, solange man nichts anderes beim erstellen der Membervariable schreibt:
0
false
null
(je nachdem vom welchen Typ die Variable ist...)
Ok ich glaub jetzt hab ich es geschnallt.
Ist diese Aussage richtig?
Membervariablen, die nur innerhalb einer Instanz der Klasse verwendet werden, müssen nicht initialisiert werden (Werte true, false, null werden automatisch angenommen).
Da die initialisierung nicht innerhalb meiner methode2 vorgenommen werden soll, erstelle ich eine klassenvariable "static int w_addieren = 0;" ausserhalb von methode2.