Bug finden im Programm

Nihila

Mitglied
Hallo liebe Java-Gemeinde,

Bin ein Java-Neuling und soll nun in einem Programm einen Bug finden. Leider finde ich den partout nicht :rtfm:. Wäre echt lieb von euch, wenn ihr mir dabei helfen könntet.
Java:
private static String fragezeichen = "?";
  
  private String frage;
  
  public static void main(String[] args) {
    
    String[] s = {"Wann", "Wo", "Warum", "Wann", "Was"};
    FragenUeberFragen[] fragen = new FragenUeberFragen[s.length];
    for (int i = 0; i < fragen.length; i++) {
      fragen[i] = new FragenUeberFragen();
      fragen[i].setFrage(s[i]);
      fragen[i].ergaenzeFragezeichen();
      boolean ausgeben = true;
      for (int j = i - 1; j >= 0 && ausgeben; j--) {
        if (fragen[i] == fragen[j]) {
          System.out.println("Das wurde bereits gefragt.");
          ausgeben = false;
        }
      }
      if (ausgeben) {
        gibFrageAus();
      }
    }
  }
  
  public void setFrage(String frage) {
    this.frage = frage;
  }
  
  public void ergaenzeFragezeichen() {
    this.frage = this.frage + fragezeichen;
  }
  
  public static void gibFrageAus() {
    System.out.println(this.frage);
  }
  
}

Vielleicht könntet ihr mir auch die Frage beantworten, warum kein Konstruktor implementiert wurde und es trotzdem funktioniert ???:L.

Danke euch schon mal im voraus.

Grüße.
Nihila
 

rme

Top Contributor
Hallo :)

Leider weiß ich nicht genau, was das Programm machen soll - also wann das Verhalten als korrekt und wann als fehlerhaft gilt. Aber ich vermute Fehler in den Zeilen 15, 23 und 34 (bezogen auf obigen Ausschnitt). Tipp: Unterschied zwischen static-Methoden und nicht-static-Methoden nochmal nachschlagen oder ggf. hier nachfragen ;)

Wenn man in Java für eine Klasse keinen Konstruktor anlegt, wird automatisch ein Standardkonstruktor angelegt, der keine Parameter bekommt und nichts macht. Deshalb ist dieser Teil des Codes in Ordnung.
 
Zuletzt bearbeitet:

Nihila

Mitglied
Vielen Dank für die Antworten :toll:. Werde mir das mit static-Methoden und nicht-static-Methoden nochmal durchlesen. Das Programm für jedes im Array gegebene Fragewort ein neues Objekt erzeugen und dem Objekt dann eins der Frageworte zugewiesen werden mit anschließendem Fragezeichen. Auch soll jede Frage nur einmal gestellt werden

Sind an einigen Stellen nicht auch paar this-Angaben obsolet oder kann man das anders machen :confused:?
 

rme

Top Contributor
Das ist eher eine Geschmacksfrage. Ein Bug ist es jedenfalls nicht, sie hinzuschreiben, obwohl es nicht nötig wäre. Wenn jede Frage nur einmal gestellt werden soll, egal was das Array enthält, ist Zeile 15 das größte Problem. Und bei der Korrektur auch an das denken, was ARadauer angemerkt hat.
 

Nihila

Mitglied
Der Compiler spuckt ständig ein Fehler bei Zeile 35 bei "this.frage" aus. Wie Du schon sagtest, hat das was mit static und non-static. Er mosert also, dass eine non-static Variable nicht für einen Static Kontext gelten kann. Ich bin so ein Noob ;(. An welcher Stelle muss ich denn was drehen, damit der Fehler behoben ist. Muss ist da das static umwandeln bzw. umdeklarieren?
 

rme

Top Contributor
Da die Aufgabe vermutlich darauf abzielt, dein Wissen darüber zu festigen, möchte ich dir nicht einfach die Lösung sagen. Eine static-Methode ist an keine Instanz gebunden und kann deshalb nicht auf Instanzvariablen zugreifen ("frage" ist bei dir eine Instanzvariable). Die Methode darf also nicht static sein, wenn sie die Frage ausgeben soll. Wenn sie nicht mehr static ist, bekommst du in einer anderen Zeile einen Fehler, der dort in Folge behoben werden muss :)
 

Nihila

Mitglied
Je mehr ich darüber lese, umso blöder komm ich mir vor ;). Bin total frustriert. Ich hab jetzt an zig Stelle rumgedreht, aber nichts ändert sich :autsch:. Ich bekomm noch nicht mal den Compiler-Fehler weg..und dann soll da noch ein ein schwer zu findender Bug drin sein, der nicht vom Compiler erkannt wird und auch keine Runtime-Exception macht :cry:. Ich seh den Wald vor Bäumen nicht.....
 

rme

Top Contributor
Ganz ruhig :)

Was ist denn dein mentales Modell davon, was folgende Begriffe bedeuten? - Klasse, Objekt (Instanz), static

Wenn du mir dein momentenanes Verständnis dieser Begriffe beschreibst, kann ich sehen, wo dein Verständnisproblem bzw. eine Wissenslücke liegt und es dir erklären, bis du die Aufgabe lösen kannst :)
 

Nihila

Mitglied
Ja Klassen bilden doch den Rahmen, wo Datentypen deklariert werden und beinhalten doch Attribute und die Methoden, oder nicht? Objekt ist dann die Instanz einer Klasse und verfügt auch über alle Attribute und Methoden der Klasse. Merkmale der Klassendefinition, die nicht von deren Objekten geteilt werden, sind dann static und es kann nur eine davon geben. So weit zur Theorie :rtfm:. Du siehst nur noch halb aussiehtlos :oops: ;).
 

rme

Top Contributor
Das sieht doch schon ganz gut aus :) Klassen sind selbst übrigens auch Datentypen.

Wenn man es genauer betrachtet, muss man bei den Attributen zwischen Instanzvariablen und Klassenvariablen unterscheiden. Aber die Theorie hast du glaube ich eh korrekt verstanden: Bei den Instanzvariablen hat jede Instanz ihren eigenen Speicher für den Inhalt der Variable, bei Klassenvariablen (static) teilen sich alle Instanzen diesen Speicher, sodass es nur einen Speicherbereich dafür gibt. Überschreibt eine Instanz diesen Wert, so hat er diesen Wert danach auch in allen Instanzen.

Wichtig ist nun, dass es auch statische Methoden gibt - das sind Methoden, die man aufrufen kann, ohne eine Instanz zu haben. D.h. wenn eine Klasse eine Methode m definiert, kann man Klasse.m aufrufen statt Instanz.m. Der Preis ist dann natürlich, dass diese Methode dann nur auf Klassenvariablen zugreifen kann und nicht auf Instanzvariablen - denn da der Aufrufer keine Instanz mitgegeben hat, sondern nur die Klasse, gibt es innerhalb der Methode kein "this".

Deine Methode verwendet aber "this" innerhalb einer static-Methode. Das geht aus obigen Gründen nicht. Da die Methode aber ziemlich sicher auf die Frage zugreifen soll und Frage eine Instanzvariable ist - und auch bleiben muss, sonst könnte es nur eine Frage geben - ist die Lösung, dass du das "static" bei der Methode entfernst.

Weiter oben im Code wird diese Methode in der Main-Methode aufgerufen. Aber da Main eine statische Methode ist, gibt es auch in main kein this - es können also nur static-Methoden aufgerufen werden! Deshalb lauert da der nächste Fehler, sobald der erste berichtigt ist. Zur Lösung musst du an der Stelle angeben, auf welche Instanz sich der Aufruf der ehemaligen static-Methode beziehen soll. Eine Schleife, die alle vorhandenen Instanzen besucht, ist ja schon vorhanden...

Hilft das ein bisschen?
 

Nihila

Mitglied
Vielen Dank für Deine ausführliche Antwort und Hilfe. Theoretisch weiß ich, was was ist, aber ich kann es irgendwie nicht umsetzen :(. Ich lese und lese und nichts geht ins Gehirn rein ;). Wärest Du so lieb und könntest mir vllt. ein praktisches Beispiel oder doch die Lösung sagen (notfalls per Mail) :oops:? Normal ist ja besser von selber darauf zu kommen....aber ich hab das Programm schon auseinandergeflückelt und es tut sich gar nichts...ausnahmsweise bevor ich noch nen Anfall bekomme ;):oops:.
 

knilch

Bekanntes Mitglied
Hi,
Poste doch bitte mal den Code der Klasse FragenUeberFragen.java bzw. alle Klassen, die zum Ausführen notwendig sind.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Kann Logikfehler im Programm nicht finden Java Basics - Anfänger-Themen 4
J Ähnlichen String in Liste finden Java Basics - Anfänger-Themen 6
B Alle Zahlen finden, die 3 bestimmte Ziffern enthalten? Java Basics - Anfänger-Themen 9
D Kleinste Zahl in Array finden die vorher noch errechnet werden müssen. Java Basics - Anfänger-Themen 4
Say Fehlenden Code finden in einer while-Schleife? Java Basics - Anfänger-Themen 11
J for Schleife kleinste Zufallszahl finden Java Basics - Anfänger-Themen 25
Substring in einem String finden Java Basics - Anfänger-Themen 13
B Den Dateipfad einer Java Datei durch Code in Selbiger finden? Java Basics - Anfänger-Themen 10
G Position einer unbekannten 3-stelligen-Zahl in einem String finden Java Basics - Anfänger-Themen 15
districon Java Nachhilfe - wo finden? Java Basics - Anfänger-Themen 9
sserio Rekursion größten Primfaktor finden funktioniert nicht Java Basics - Anfänger-Themen 8
P9cman Char Index rekursiv finden Java Basics - Anfänger-Themen 4
M Datums-Palindrome finden Java Basics - Anfänger-Themen 9
H Primzahlen finden - Zeit optimieren Java Basics - Anfänger-Themen 34
B in einem Array den nächstgelegenen Wert zu einem eingabewert finden Java Basics - Anfänger-Themen 8
B String - Wörter finden, welches Punkt und entsprechender Pre / Suffix hat? Java Basics - Anfänger-Themen 30
S Schwachstelle finden Java Basics - Anfänger-Themen 11
D kleinste Wurzel finden Java Basics - Anfänger-Themen 9
CptK Richtigen Pfad beim einlesen von Datei finden Java Basics - Anfänger-Themen 2
Devin Wo kann man einen Java Lehrplan finden? Java Basics - Anfänger-Themen 5
Y Wie kann ich ein Element in einer toString finden. Java Basics - Anfänger-Themen 2
V Beliebige Dreistellige Zahl Teiler finden Java Basics - Anfänger-Themen 4
J Lösungen zu einem Lückentext finden Java Basics - Anfänger-Themen 0
S Input/Output Reader/Writer finden file nicht Java Basics - Anfänger-Themen 3
S Streams - kleinstes Element finden Java Basics - Anfänger-Themen 4
L Koordinate mit meisten Überlappungen in 3D-Raum finden Java Basics - Anfänger-Themen 9
KogoroMori21 Größten gemeinsamen Teiler finden Java Basics - Anfänger-Themen 7
F Methoden Bitte Helft mir meinen Fehler zu finden. Möchte in diesem Bankenprogramm durch die Konsoleneingabe auswählen welches Konto reduziert und welches erhö Java Basics - Anfänger-Themen 17
Kirby.exe Fehlende Int Werte aus Array mit streams finden Java Basics - Anfänger-Themen 19
I Preis finden für ein Uber-App(?) Java Basics - Anfänger-Themen 3
D Binärbaum Blätter finden und Ausgeben Java Basics - Anfänger-Themen 22
L Classpath Alle Dateien im Classpath finden Java Basics - Anfänger-Themen 4
O Suchbaum Elternknoten finden Level eines Knoten bestimmen Java Basics - Anfänger-Themen 24
H pfad finden Java Basics - Anfänger-Themen 12
G Excle datei aus resources folder finden und lesen Java Basics - Anfänger-Themen 5
M Duplikate in Array finden... Java Basics - Anfänger-Themen 9
A Mit Rekursion Zufallszahlen erstellen und größte finden Java Basics - Anfänger-Themen 5
S Maxium aus einer File finden Java Basics - Anfänger-Themen 12
R HTTP-Links in Java Class finden Java Basics - Anfänger-Themen 3
S Substrings finden Java Basics - Anfänger-Themen 5
C Finden mehrerer Lösungen Java Basics - Anfänger-Themen 0
L Backupdateien finden Java Basics - Anfänger-Themen 8
D doc.seect jsouo bestimmtes class element finden Java Basics - Anfänger-Themen 1
N Anfang eine Array Schleife finden Java Basics - Anfänger-Themen 18
D Erste Schritte Aktivsten Zweistündigen Abschnitt finden Java Basics - Anfänger-Themen 35
I Richtige Java-Version finden? Java Basics - Anfänger-Themen 17
DaCrazyJavaExpert Alle Zahlenkombinationen aus 9 zahlen finden Java Basics - Anfänger-Themen 17
S Erste Schritte Zwischen zwei Punkten ein Minimumpkt./Maxima finden Java Basics - Anfänger-Themen 1
M Denn dichtesten Wert finden Java Basics - Anfänger-Themen 3
N Objekte in ArrayList finden Java Basics - Anfänger-Themen 10
D Die Zahl in der Mitte finden Java Basics - Anfänger-Themen 20
kilopack15 Größte zahl eines Arrays finden Java Basics - Anfänger-Themen 1
H Fehler finden Java Basics - Anfänger-Themen 5
R Best Practice Palindrom in einem Text finden Java Basics - Anfänger-Themen 18
M Kleinsten Index in Array finden Java Basics - Anfänger-Themen 6
S Objekt finden und benutzen Java Basics - Anfänger-Themen 3
C Lottospiel kann Fehler nicht finden Java Java Basics - Anfänger-Themen 6
F System kann die Datei nicht finden Java Basics - Anfänger-Themen 7
D Werte in eckige Klammern finden Java Basics - Anfänger-Themen 3
S Input/Output Buchstaben in Eingabe finden und ausgeben Java Basics - Anfänger-Themen 5
A regulären Ausdruck mit Hilfe der Klasse Scanner in einem String finden Java Basics - Anfänger-Themen 2
N Objekt in einer Liste finden? Java Basics - Anfänger-Themen 3
C Finden und verändern Java Basics - Anfänger-Themen 1
T Erste Schritte Elemente finden, deren Name erst "zusammengesetzt" wird Java Basics - Anfänger-Themen 8
A Max finden und umtauschen Java Basics - Anfänger-Themen 2
K String in String-Array finden Java Basics - Anfänger-Themen 7
S Baumstruktur: tiefsten Knoten finden Java Basics - Anfänger-Themen 3
D Ein Objekt in einem Baum finden und ausgeben. Java Basics - Anfänger-Themen 4
F Erste Schritte Hilfe beim Algorithmus finden Java Basics - Anfänger-Themen 8
D Zahl in einem String finden Java Basics - Anfänger-Themen 4
C Methoden Diagonalen am best. Punkt im zweidimensionales array finden Java Basics - Anfänger-Themen 3
A Compiler-Fehler Kann Fehler nicht finden Java Basics - Anfänger-Themen 2
R Fehler finden die 2. Java Basics - Anfänger-Themen 7
P letzte Datei finden Java Basics - Anfänger-Themen 18
M Zwei gleiche Eintraege in ArrayList finden Java Basics - Anfänger-Themen 15
J Inhalt in einem Text-File finden und in ein Array schreiben Java Basics - Anfänger-Themen 5
I String in .txt finden Java Basics - Anfänger-Themen 9
T Wörter mit @ als Zeichen finden Java Basics - Anfänger-Themen 13
J Methoden Kann Fehler nicht finden Java Basics - Anfänger-Themen 6
M Letztes Element im Array finden Java Basics - Anfänger-Themen 3
R Erste Schritte Minimum und Maximum in Array finden Java Basics - Anfänger-Themen 29
H Schnell HTML-Tags finden Java Basics - Anfänger-Themen 5
Kenan89 Wo sind die Java Standard Library Source Codes zu finden? Java Basics - Anfänger-Themen 5
R Rekursive Methode, Files finden Java Basics - Anfänger-Themen 2
S brauche hilfe beim fehler finden Java Basics - Anfänger-Themen 2
B Dokumentation in der jre-Library finden Java Basics - Anfänger-Themen 9
T Datentypen Knoten Großvater finden? Java Basics - Anfänger-Themen 12
A Fehler finden und Ausgabe Java Basics - Anfänger-Themen 14
P Key anhand von Value finden (Hashtable) Java Basics - Anfänger-Themen 3
Q ProcessBuilder kann datei nicht finden Java Basics - Anfänger-Themen 2
K taschenrechner - Fehler beim Kürzen eines Bruches finden Java Basics - Anfänger-Themen 20
S Richtige String-Variable finden Java Basics - Anfänger-Themen 3
C Fehler in Java-Code finden Java Basics - Anfänger-Themen 17
D Geeigneten Speicherort finden ? Java Basics - Anfänger-Themen 11
K Groessere Zahl finden und berechnen?? Java Basics - Anfänger-Themen 6
H Methoden Schachbrettmuster finden Java Basics - Anfänger-Themen 11
brunothg Gameserver finden Java Basics - Anfänger-Themen 7
X im Verzeichnissbaum recursiv nur bestimmte Dateien finden Java Basics - Anfänger-Themen 7
F Methoden Fehler finden in Funktion Java Basics - Anfänger-Themen 3
A Prüfen ob Datei geöffnet ist bzw Stream finden Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben