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.
ich brauch mal eure hilfe!
ich hab da ein java-programm mit einem denkfehler, aber ich finde ihn nicht.
also das programm kompiliert und es tut auch das was es tun sollte, aber es ist trotzdem ein fehler drin.
ich bin jetzt schon zwei tage dran gesessen, aber ich finde ihn nicht :noe: :bahnhof:
HÄ? *confused* - vllt magst du uns auch sagen was nun der Fehler ist, der trotzdem, obwohl es eig. tut was es soll, da ist ?
Und wieso hängst du den Code als Grafik an, anstelle ihn hier in java-Tags zu posten? :autsch:
Du erstellst in der [c]main()[/c] jedes Mal eine neue Instanz des [c]int[][/c]. In [c]neuerTip()[/c] füllst du alle Werte im Array ab, statt nur den aktuellen (da müsstest du noch den index kennen oder einfach den Tip returnen und in [c]main()[/c] ins Array schreiben).
wir haben dieses blatt auf da uni von unserm prof bekommen.
mit der aufgabe sucht den fehler!
und ich war einfach nur zu faul um ihn nochmal einzutippen......
wir haben dieses blatt auf da uni von unserm prof bekommen.
mit der aufgabe sucht den fehler!
und ich war einfach nur zu faul um ihn nochmal einzutippen......
Ah so, das ist gar nicht dein Code, sondern eine Hausaufgabe? Ich finde das eine Frechheit, der Thread sieht aus als wäre es der unerwünschte Fehler eines Anfängers und nicht eine HA.
Vielleicht solltest du aber genau das tun! Mit einem vernünftigen Debugger kannst du dann ganz schnell die Fehler finden.
Oder du lässt das Programm laufen und rechnest nebenbei alles auf dem Papier nach.
was ist denn jetzt die Frage?
bist du immer noch auf der Suche nach irgendeinem Fehler?
dann tippe das Program als aller erstes ab und lasse es laufen, das dauert 10 min statt 2 Tage und du findest Fehler eher, falls sie dir nicht gleich ins Auge springen,
alles andere wäre höchstens 'wer findet für mich die Fehler?' und da wird hier kaum einer mitmachen, wenn du dir selbst die Tipparbeit sparst
das programm funktioniert und es tut das was es tun soll
es ist aber ein denkfehler drin!
und den find ich einfach nicht!
da kanns is jetzt noch 10x abschreiben!
du kannst es ausführen und dir die Ergebnisse anschauen und das vergleichen mit dem was das Programm wohl dem Anschein nach tun soll,
das gibt Hinweise auf ein evtl. vorhandenes Fehlverhalten,
dann kann man das im Programm näher untersuchen, z.B. an mehr Stellen den Inhalt von Variablen ausgeben
> das programm funktioniert und es tut das was es tun soll
> es ist aber ein denkfehler drin!
wie lautet denn die genaue Aufgabenstellung,
hast du überhaupt keine Ahnung wonach zu suchen ist?
auch für andere wäre es leichter, wenn das Programm als Programm vorliegen würde
wie soll ein funktionierendes Programm einen Fehler enthalten?
vielleicht funktioniert es in bestimmten Bereichen, nicht aber für alle denkbaren Eingaben..
public static void main(String[] args) {
int TIPLAENGE = 6;
String eingabe = JOptionPane.showInputDialog("Wie viele Tips sollen " +
"gespielt werden?", "1");
int tipanzahl = Integer.parseInt(eingabe);
int[] tips; // int tips[]; ist auch moeglich, aber!
for (int i = 0; i < tipanzahl; i++) {
tips = new int[TIPLAENGE];
neuerTip(tips);
tipAusgabe(tips);
}
}
public static void neuerTip(int[] tips) {
int MINTIP = 1;
int MAXTIP = 45;
for (int i = 0; i < tips.length; i++) {
int tip;
do {
tip = (int) (Math.random() * MAXTIP) + MINTIP;
} while (istTipZwischenTips(tip, tips));
tips = tip;
}
}
public static boolean istTipZwischenTips(int tip, int[] tips)
{
for (int i = 0; i < tips.length; i++) {
if (tips == tip) {
return true;
}
}
return false;
}
public static void tipAusgabe(int[] tips) {
for (int i = 0; i < tips.length; i++) {
System.out.print(tips + "\t");
}
System.out.print("\n");
}
ok, auch wenn es dich kaum trösten wird:
ich zumindest kann dort keine Art von Fehler erkennen,
die Zufallszahlen sind in Ordnung, gleichverteilt, keine Index-Überläufe, Endlosschleifen oder ähnliches
dass man am Anfang einen Text statt einer Zahl eintippen kann und dann eine Exception bekommt, fällt wohl nicht unter die Kategorie 'Denkfehler'
tja... dann is es doch wohl noch schwerer als ich gedacht habe.
ich habe auch leider keine ahnung in welchem zusammenhang der denkfehler mit dem programm steht.
:noe:
also das einzige was man noch zusätzlich zu dem bisher schon angesprochenen sagen kann ist, dass hier Zufallszahlen von [1..45] gezogen werden, Lotto ist ja aber normal 1 aus 49...aber das wird ja wohl auch nicht der Fehler sein?! :noe:
(ich tendiere zu faetzminators new int[] ;> )
/Edit: vllt ist es ja auch ein Aprilscherz ^^
Aber wieso postest du denn nicht endlich mal die exakte Aufgabenstellung?
Java:
int[] tips; // int tips[]; ist auch moeglich, aber!
vllt sollst du ja wirklich nur auf diesen Kommentar eingehen?
----------------- Aber...so stehen immer nur die letzten gezogenen Zahlen im Array und man kommt an die zuvor gezogenen Zahlen nicht mehr ran(und das new int[] wäre auch unnötig), besser wäre wohl ein 2D-Array
Java:
int[][] tips = new int[tipanzahl][];
for (int i = 0; i < tipanzahl; i++) {
tips[i] = new int[TIPLAENGE];
neuerTip(tips[i]);
tipAusgabe(tips[i]);
}
exacte aufgabenstellung:
(zitat von unsem prof): findest den denkfehler! ich verrat euch nur soviel, mir ist er erst vor 5 minuten aufgefallen. also das programm funtioniert aba es ist ein denkfehler drin.
Wer ihn mir bis nach ostern gefunden hat bekommt 10 extrapunkte.
sorry leute, aba ich weiß auch nicht mehr, als ich euch bis jetzt geschrieben hab! :noe:
@ eRaaaa
danke für deinen vorschlag, aber das wird es wohl nicht sein, da wir das noch nicht durchgemacht haben.(zumindest hab steht davon nichts in den unterlagen)
Die Variable wäre dann "eine Konstante" (nein, es gibt keine Konstanten!), auf alle Fälle würde ich eine nicht finale Variable nie gross schreiben. Aber das ist eigentlich eine Unschönheit, und kein Denkfehler, genau auch wie [c]System.out.print("\n")[/c] --> [c]System.out.println()[/c].
Ich hab das Proramm mal folgendermaßen verändert:
- Die 3 wichigen Variablen sind final und stehen außerhalb der Methoden
- Die Ausgabe-Zeile mit \n ist in System.out.println() verändert.
Java:
import javax.swing.*;
public class Lotto {
private static final int TIPLAENGE = 6;
private static final int MINTIP = 1;
private static final int MAXTIP = 45;
public static void main(String[] args) {
String eingabe = JOptionPane.showInputDialog("Wie viele Tips sollen gespielt werden?", "1");
int tipanzahl = Integer.parseInt(eingabe); // parseInt kann Exception werfen
for (int i = 0; i < tipanzahl; i++) {
int[] tips = new int[TIPLAENGE]; // int tips[]...; ist auch moeglich, aber!
neuerTip(tips);
tipAusgabe(tips);
}
}
public static void neuerTip(int[] tips) {
for (int i = 0; i < tips.length; i++) {
int tip;
do
{
tip = (int) (Math.random() * MAXTIP) + MINTIP;
} while (istTipZwischenTips(tip, tips));
tips[i] = tip;
}
}
public static boolean istTipZwischenTips(int tip, int[] tips)
{
for (int i = 0; i < tips.length; i++) {
if (tips[i] == tip) {
return true;
}
}
return false;
}
public static void tipAusgabe(int[] tips) {
for (int i = 0; i < tips.length; i++) {
System.out.print(tips[i] + "\t");
}
System.out.println();
}
}
Also meine Idee sieht jetz so aus:
Die Method neuerTip erstellt für jedes int im array zufallszahlen, solange, bis
eine gefunden ist, die noch nicht drin ist. So versteh ich das zumindest, oder so soll sie arbeiten...
Wenn dummerweise aus irgendwelchen gründen fast immer dieselben zahlen generiert werden, arbeitet die Methde seeeehr laaange, denn es sollen ja nur verschiedene zahlen im array vorkommen. Darin könnte ein problem liegen.
Das Array ist nach seiner Erschafung mit Nullen gefüllt. Praktischerweise können bloß Zufallszahlen größer als 1 generiert werden, sonst hätten wir hier auch ein problem, denn istTipZwischenTips prüft ja immer das ganze array, obwohl es ja erst am ende voll ist...
Es wird nirgends überprüft, ob Maxtip größer als mintip ist, aber die sind ja konstant. also kein problem.
Vielleicht liegt es auch an der Zufallszahlengenerierung. Aber das sieht tatsächlich relativ zufällig aus.
Interessant ist, das der einzige Kommentar im ganzen Code an einer uninteressanten Stelle ist. Keine Ahnung warum?!
Wenn du es als final deklarierst, meckert der Compiler, wenn du versuchst, die Variable später zu ändern (also eine Schutzmaßnahme, wie gesagt nur Stil, hat keine Auswirkungen auf die Ausführung)