Denkfehler- aber wo?

__LiLLi__

Mitglied
hey hey

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:

hoffe ihr könnt mir helfen.

lg
LiLLi
 

Anhänge

  • Scannen0002.jpg
    Scannen0002.jpg
    34,2 KB · Aufrufe: 72

The_S

Top Contributor
Also zum Einen:

Warum hängst du ein Bild von deinem Code an?

Zum Anderen:

Woher weißt du dann, dass es ein Fehler ist? Und wie äußert sich dieser?
 

eRaaaa

Top Contributor
also das programm kompiliert und es tut auch das was es tun sollte, aber es ist trotzdem ein fehler drin.

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:
 

faetzminator

Gesperrter Benutzer
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).
 

__LiLLi__

Mitglied
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......
 

faetzminator

Gesperrter Benutzer
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.
 

agentone

Bekanntes Mitglied
und ich war einfach nur zu faul um ihn nochmal einzutippen......

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.
 

__LiLLi__

Mitglied
ich schreibe eh programme, nur hab ich heute schon 3 geschrieben und dann war mir das eintippen von diesem programm dann zu viel :(

aba wenn ich doch weiß, dass das programm funkt.

und ist es echt ein so offensichtlicher anfängerfehler?
 
S

SlaterB

Gast
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
 

__LiLLi__

Mitglied
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!
 
S

SlaterB

Gast
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..
 
Zuletzt bearbeitet von einem Moderator:

__LiLLi__

Mitglied
genau das geht ja nicht, weil das programm ja das tut was es tun soll!
es kompiliert und "rechnet" das aus was es soll und das auch richtig.

deswegen ist ja ein denkfehler drin, der sich aba anscheinend in diesem zusammenhang nicht bemerkbar macht.
und den find ich nicht!

ich frag euch ja nicht, weil ich zu faul bin zum suchen, sondern weil ich echt nicht mehr weiter weiß! :(
 
S

SlaterB

Gast
siehe auch die letzten Sätze im meinen vorherigen Posting, etwas später dazugeschrieben, besonders den letzten Satz

edit: doch nich unbedingt
 

__LiLLi__

Mitglied
[Java]
import javax.swing.JOptionPane;

class Lotto {

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");
}

}

[/Java]
 
S

SlaterB

Gast
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'
 

__LiLLi__

Mitglied
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:
 

eRaaaa

Top Contributor
Ich hole noch einmal folgenden Fragen hoch:

wie lautet denn die genaue Aufgabenstellung,
hast du überhaupt keine Ahnung wonach zu suchen ist?

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 ^^
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
@eRaaaa
ne ne, ich bin aus österreich und bei uns ist lotte 6 aus 45! ;)

Achso, interessant ;)

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]);
	}
oder sogar eine Liste...
----------------

???:L
 

__LiLLi__

Mitglied
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:
 

__LiLLi__

Mitglied
@ 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)
 

faetzminator

Gesperrter Benutzer
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].
 

agentone

Bekanntes Mitglied
Also anscheinend ist es ja kein 1.-April-Scherz.

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?!
 

Neue Themen


Oben