OOP Problem mit Array

Nemesys88

Bekanntes Mitglied
Hallo!

Habe 2 Klassen, die Buch und Daten heissen. Die Klasse Buch spiegelt eigentlich ein struct wieder, mit Settern und Gettern für die Attribute. Die Klasse Daten soll jetzt auf diese Buch-Klasse zugreifen können

Erstmal Quellcode (es gehören noch 4 weitere Klassen zum kompletten Programm):

Klasse Buch:

Java:
/**
 * 
 * TODO Add comment here
 *
 * @author $Author:  $
 * @version $Revision:  $, $Date:  $ UTC
 */
public class Buch   
{
   protected String Autor;
   protected String Titel;
   protected String Verlagsname;
   protected int Erscheinungsjahr;
   protected String Erscheinungsort;
   protected String ISBN;
 
  /**
   * 
   * TODO Add constructor comment here
   *
   */
  Buch()    
  { 

  }
 
  public void setAutor(String _Autor)
  {
      this.Autor = _Autor;
  }
 
  public String getAutor()
  {
     return Autor;
  }
 
  public void setTitel(String _Titel)
  {
      this.Titel = _Titel;
   }
 
  public String getTitel()
  {
      return Titel;
  }
 
  public void setVerlagsname(String _Verlagsname)
  {
      this.Verlagsname = _Verlagsname;
  }
 
  public String getVerlagsname()
  {
      return Verlagsname;
  }
 
  public void setErscheinungsjahr(int _Erscheinungsjahr)
  {
      this.Erscheinungsjahr = _Erscheinungsjahr;
  }
 
  public int getErscheinungsjahr()
  {
      return Erscheinungsjahr;
  }
  
  public void setErscheinungsort(String _Erscheinungsort)
  {
      this.Autor = _Erscheinungsort;
  }
 
  public String getErscheinungsort()
  {
     return Erscheinungsort;
  }
  
  public void setISBN(String ISBN)
  {
      this.Autor = ISBN;
  }
 
  public String getISBN()
  {
     return ISBN;
  }
  
}

Klasse Daten:

Java:
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;


/**
 * 
 * TODO Add comment here
 *
 * @author $Author:  $
 * @version $Revision:  $, $Date:  $ UTC
 */
public class Daten
{  
   Buch[] Bucharray = new Buch[100];
   Index[] Indexarray = new Index[100];
   
   /**
    * 
    * TODO Add constructor comment here
    *
    */
   public Daten()
   {
      
   }
   

   public void fill()
   {   
            Bucharray[0].setAutor("Schröder");
            Bucharray[0].setErscheinungsjahr(1994);
            Bucharray[0].setErscheinungsort("Texas");
            Bucharray[0].setISBN("12345");
            Bucharray[0].setTitel("Datenbanken");
            Bucharray[0].setVerlagsname("Bertelsfrau");  
   }
   
   public void create()
   {
      Writer fw = null;

      try
      {
        fw = new FileWriter( "Buch.txt" );
        
        for (int i=0;i<10;i++)
        {
           fw.write(Bucharray[i].getAutor());
           fw.write(Bucharray[i].getErscheinungsjahr());
           fw.write(Bucharray[i].getErscheinungsort());
           fw.write(Bucharray[i].getISBN());
           fw.write(Bucharray[i].getTitel());
           fw.write(Bucharray[i].getVerlagsname());     
        }
        fw.append( System.getProperty("line.separator") ); // e.g. "\n"
      }
      catch ( IOException e ) {
        System.err.println( "Konnte Datei nicht erstellen" );
      }
      finally {
        if ( fw != null )
          try { fw.close(); } catch ( IOException e ) { e.printStackTrace(); }
      }
      
   }
   
   public static void search()
   {
      
   }

}

Das Problem ist folgendes:

Er meckert an dieser Stelle: Bucharray[0].setAutor("Schröder");

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Daten.fill(Daten.java:31)

Was die Fehlermeldung besagt weiss ich, er zeigt auf ein Objekt dass null ist.
Aber das hilft mir nicht... und verstehen, wieso es an dieser Stelle null ist tue ich auch nicht.

Was muss ich tun, um das Problem zu beheben?
Wieso kann ich nicht in das Bucharray reinschreiben ?


Danke schonmal.

Gruß, Nemesys
 

FetterOtter

Bekanntes Mitglied
Du hast mit
Java:
Buch[] Bucharray = new Buch[100];
nur ein Array der Klasse Buch mit 100 Elementen angelegt.
Aber die einzelnen Elemente sind noch null.
Bevor du
Java:
Bucharray[0].setAutor("Schröder");
machen kannst, musst du erst einmal ein neues Buch anlegen:
Java:
Bucharray[0] = new Buch();
Dann sollte es gehen...
 

Nemesys88

Bekanntes Mitglied
Danke erstmal, das war schonmal hilfreich!

Es gibt aber noch Probleme beim Schreiben in die Datei...

Der aktuelle Code:

Java:
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;


/**
 * 
 * TODO Add comment here
 *
 * @author $Author:  $
 * @version $Revision:  $, $Date:  $ UTC
 */
public class Daten
{  
   static Buch[] Bucharray = new Buch[100];
   static Index[] Indexarray = new Index[100];
   
   /**
    * 
    * TODO Add constructor comment here
    *
    */
   public Daten()
   {

   }
   

   public static void fill()
   {   
      Bucharray[0] = new Buch();
      Bucharray[1] = new Buch();
      Bucharray[2] = new Buch();
      Bucharray[3] = new Buch();
      Bucharray[4] = new Buch();
      Bucharray[5] = new Buch();
      Bucharray[6] = new Buch();
      Bucharray[7] = new Buch();
      Bucharray[8] = new Buch();
      Bucharray[9] = new Buch();
      
      Bucharray[0].setAutor("Schröder");
      Bucharray[0].setErscheinungsjahr(1994);
      Bucharray[0].setErscheinungsort("Texas");
      Bucharray[0].setISBN("12345");
      Bucharray[0].setTitel("Datenbanken");
      Bucharray[0].setVerlagsname("Bertelsfrau");  
   }

   public static void create()
   {
      Writer fw = null;

      try
      {
        fw = new FileWriter( "Buch.txt" );
        
        for (int i=0;i<1;i++)
        {
           fw.write(Bucharray[i].getAutor());
           fw.write(Bucharray[i].getErscheinungsjahr());
           fw.write(Bucharray[i].getErscheinungsort());
           fw.write(Bucharray[i].getISBN());
           fw.write(Bucharray[i].getTitel());
           fw.write(Bucharray[i].getVerlagsname());     
        }
        fw.append( System.getProperty("line.separator") ); // e.g. "\n"
      }
      catch ( IOException e ) {
        System.err.println( "Konnte Datei nicht erstellen" );
      }
      finally {
        if ( fw != null )
          try { fw.close(); } catch ( IOException e ) { e.printStackTrace(); }
      }
      
   }
   
   public static void search()
   {
      
   }

}

Wenn ich das SO ausführe steht in der Buch.txt folgendes: 12345?

Die Exception wirft er bei

"fw.write(Bucharray.getErscheinungsort());"

Hab dann mal nur den Autor und das Erscheinungsjahr ausgeben wollen (und die andern 4 Attribute auskommentiert) da stand in der Buch.txt dies hier: Schröder?

Er kann also auch das Erscheinungsdatum nicht korrekt lesen...
 

FetterOtter

Bekanntes Mitglied
Um das Erscheinungsjahr gescheit auszugeben, musst du es erst in einen String umwandeln:
Java:
fw.write(Integer.toString(Bucharray[i].getErscheinungsjahr()));

Das mit dem Erscheinungsort habe ich allerdings noch nicht durchschaut...
 

Nemesys88

Bekanntes Mitglied
Okay, also

Java:
      Bucharray[0].setAutor("Schröder");
      Bucharray[0].setErscheinungsjahr(1994);
//      Bucharray[0].setErscheinungsort("Texas");
//      Bucharray[0].setISBN("12345");
//      Bucharray[0].setTitel("Datenbanken");
//      Bucharray[0].setVerlagsname("Bertelsfrau");  
   }

   public static void create()
   {
      Writer fw = null;

      try
      {
        fw = new FileWriter( "Buch.txt" );
        
        for (int i=0;i<1;i++)
        {
           fw.write(Bucharray[i].getAutor());
           fw.write(Integer.toString(Bucharray[i].getErscheinungsjahr()));
//           fw.write(Bucharray[i].getErscheinungsort());
//           fw.write(Bucharray[i].getISBN());
//           fw.write(Bucharray[i].getTitel());
//           fw.write(Bucharray[i].getVerlagsname());

gibt: Schröder1994 aus (das ist so schonmal richtig)...

Wenn ich
// Bucharray[0].setErscheinungsort("Texas"); und
// fw.write(Bucharray.getErscheinungsort());

jetzt wieder auskommentiere fliegen mir Exceptions um die Ohren:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at java.io.Writer.write(Writer.java:157)
at Daten.create(Daten.java:62)

usw.

Die Getter und Setter in der Buch.java sind aber ansich richtig...
Ich seh den Fehler grad nicht...
 

FetterOtter

Bekanntes Mitglied
Du hast dich in deiner Klasse "Buch" verschrieben: In Zeile 69 füllst du
Java:
this.Autor = _Erscheinungsort;
statt
Java:
this.Erscheinungsort = _Erscheinungsort;
Dadurch ist dein Erscheinungsort immer noch null, und im Autor steht Mist.
Das ist dir bei der Methode setISBN übrigens auch passiert, dehalb war dein erster println auch "12345?".
 
Zuletzt bearbeitet:

Nemesys88

Bekanntes Mitglied
Setter richtig.. oder auch nicht...

Ups...

Das passiert wenn man erst Copy & Paste benutzt um sich Schreibarbeit zu sparen, und es danach nicht gescheit anpasst... ;)

Vielen Dank!








Ich markier den Thread mal noch nicht als erledigt, falls noch irgendwas ist... :D
 

Nemesys88

Bekanntes Mitglied
Jetzt hab ich ein Problem mit einem Textfeld:

Java:
public class MainFrame extends JFrame implements ActionListener
{
   protected TextField tf = new TextField("", 30);
   
   MainFrame()
   {
      super("***** Programm für FB-Datenbank");

      // Make sure we have nice windows decorations.
      JFrame.setDefaultLookAndFeelDecorated(true);
      // Set up the window.
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      
      // set up borderlayout
      setLayout(new BorderLayout());

      // adds Menu
      add(new Menu(this), BorderLayout.NORTH);  
     
      // add buttons 
      JButton button1;
      JButton button2;
      button1 = new JButton("Search Book");
      button2 = new JButton("Show Index");
      button1.addActionListener(this);
      button2.addActionListener(this);
      this.getContentPane().add(button1,BorderLayout.SOUTH);
      this.getContentPane().add(button2,BorderLayout.NORTH);
      this.getContentPane().add(tf,BorderLayout.CENTER);
      
      Daten.fill();
      Daten.create();
   }

   @Override
   public void actionPerformed(ActionEvent e)
   {
     String s = tf.getText();
     Daten.search(s);
     System.out.println(s);      
   }

}

Wenn ich das Programm ausführe und im Textfeld Mathe eingebe dann speichert er Mathe zwar in der Variablen s aber der Aufruf Daten.search(s) liefert nicht das richtige Ergebnis. Wenn ich manuell Daten.search("Mathe"); aufrufe funktioniert alles (das Ergebnis ist dann die Anzeige der Buchinformationen) - warum?
 

Nemesys88

Bekanntes Mitglied
Was ist denn da jetzt bitte falsch?

System.out.println(s); gibt mir in der Konsole Mathe aus.

Wieso funktioniert Daten.search(s) dann nicht aber Daten.search("Mathe") funktioniert ??! :bahnhof:
 

Nemesys88

Bekanntes Mitglied
Scheint ja nicht ganz sichtbar zu sein, warum das grad nicht geht sonst hätte ja schon wer geantwortet denk ich...

Die Funktion search ist in der Klasse Daten so definiert (vllt hilft das noch):

public static void search(String begriff)
{
...
}

Ich versteh halt echt nicht, wieso Daten.search("Mathe") funktioniert und Daten.search(s) nicht, wobei s ein String ist der den Wert "Mathe" hat. Ist schon ein bisschen paradox... :bahnhof:
 

FetterOtter

Bekanntes Mitglied
Ohne jetzt genauer eingestiegen zu sein: Mir fällt auf, dass du AWT und Swing mischst, was man tunlichst vermeiden sollte. Mach mal aus deinem TextField ein JTextField und schau, was passiert.
Ansonsten ist es schwer nachzuvollziehen, ohne KSKB.
 

FetterOtter

Bekanntes Mitglied
Dann poste doch mal bitte die Methode search. Da das println in der actionPerformed ja das richtige ausgibt, müsste der Fehler eigentlich dort sein.
 

Nemesys88

Bekanntes Mitglied
Java:
   public static void search(String begriff)
   {
      Reader reader = null;
      int posi = 0;
      boolean gefunden = false;
      
      for (int k = 0; k < 10;k++)
      {
         if (Indexarray[k].Ordnungsbegriff == begriff)
         {
            System.out.println("bin in der if");
            posi = Indexarray[k].position;
            
            try
            {
               gefunden = true;
               
               reader = new FileReader( "Buch.txt" );

               System.out.println("Autor:" + Bucharray[posi].getAutor() + "\n");
               System.out.println("Titel:" + Bucharray[posi].getTitel() + "\n");
               System.out.println("Verlagsname:" + Bucharray[posi].getVerlagsname() + "\n");
               System.out.println("Erscheinungsjahr:" + Bucharray[posi].getErscheinungsjahr() + "\n");
               System.out.println("Erscheinungsort:" + Bucharray[posi].getErscheinungsort() + "\n");
               System.out.println("ISBN:" + Bucharray[posi].getISBN() + "\n");
            }
            catch ( IOException e ) {
               System.err.println( "Fehler beim Lesen der Datei!" );
               }
            finally {
               try { reader.close(); } catch ( Exception e ) { }
            }   
         }
       }

      if (gefunden == false)
      {
         System.out.println("Kein Buch zu diesem Ordnungsbegriff vorhanden!");
      }
   }

So. Rufe ich Daten.search("Mathe") auf gibt er "bin in der if" und alles funktioniert.

Rufe ich Daten.search(s) auf, gibt er kein "bin in der if" aus.

Obwohl er an einer stelle (glaub bei k=2 oder so) Ordnungsbegriff=Mathe findet und der begriff=Mathe ist, schlägt die Überprüfung fehl...

Gruß, Nemesys
 

FetterOtter

Bekanntes Mitglied
Ändere mal bitte deine Abfrage
Java:
if (Indexarray[k].Ordnungsbegriff == begriff)
auf
Java:
if (Indexarray[k].Ordnungsbegriff.equals(begriff))
dann müsste es klappen.

Sonst vergleichst du nicht die Inhalte der Strings miteinander, sondern (glaube ich) deren Referenzen.
 

Nemesys88

Bekanntes Mitglied
Hallo, ich bin's wieder.

Hoffe es ist okay, dass ich in diesem Thread einfach weiterschreibe und noch andere Fragen stelle aber will nicht für jede Frage nen neues Thema aufmachen müssen.

Frage 1: Warum funktioniert das hier nicht?:

Java:
         String String1 = Indexarray[i].getOrdnungsbegriff();
         String String2 = Indexarray[i+1].getOrdnungsbegriff();
         if (String1.compareTo(String2))
         {
            
         }

Also die Ordnungsbegriffe sind Strings, die ich ansich einfach nur alphabetisch sortieren will....
String1 < String2 geht ja leider schonmal garnicht...

Frage 2: In C++ kann man mit fwrite bitweise Schreiben und erhällt so eine UNFORMATIERTE Datei.
Was gibt es da in Java, was ich benutzen kann? Filewriter scheint eine ganz normale .txt anzulegen, die ich ohne weiteres mit einem Texteditor öffnen und lesen kann. Ist Fileoutputstream das richtige? (hab damit ein bisschen rumgespielt und hatte da eher probleme mit dem schreiben...) oder gibt es noch eine andere Möglichkeit eine Unformatierte Datei zu erzeugen in Java?


Gruß, Nemesys
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Unbekanntes Problem mit 2d Array Java Basics - Anfänger-Themen 6
J Problem mit einer Methode die gewissen Inhalt einer Array löschen soll Java Basics - Anfänger-Themen 9
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
Splayfer Java Array Problem... Java Basics - Anfänger-Themen 2
A Array problem Java Basics - Anfänger-Themen 16
J Problem mit Array: 2 Klassen Java Basics - Anfänger-Themen 2
I wieder mit einer Umwandelung habe ich Problem (diesmal von char Array zu char) Java Basics - Anfänger-Themen 1
B Array Problem Java Basics - Anfänger-Themen 3
F Problem mit der Aufgabe(Array) Java Basics - Anfänger-Themen 21
H boolean Array Problem Java Basics - Anfänger-Themen 7
B Problem beim grundsätzlichen Verständnis bei Rekursion mit 2-dimensionalen Array Java Basics - Anfänger-Themen 6
S Problem: Array alle Einträge gleich Java Basics - Anfänger-Themen 10
L Array-Problem/Zufallszahlen Java Basics - Anfänger-Themen 7
G Problem mit Array Java Basics - Anfänger-Themen 2
K Problem mit Methode(Array,Boolean,ForSchleife) Java Basics - Anfänger-Themen 6
C Problem mit Arrays im Array Java Basics - Anfänger-Themen 11
A Problem mit Array Ausgabe Java Basics - Anfänger-Themen 7
L 2 dimensionales Array, Problem der Ausgabe Java Basics - Anfänger-Themen 4
E Array Problem Java Basics - Anfänger-Themen 1
L Problem mit Array Programm Java Basics - Anfänger-Themen 2
M Array problem Java Basics - Anfänger-Themen 9
M If und Array-Problem Java Basics - Anfänger-Themen 6
P OOP Array-Problem Java Basics - Anfänger-Themen 5
S Problem mit Array.Length Java Basics - Anfänger-Themen 2
R Array Problem Java Basics - Anfänger-Themen 17
U Methoden Zugriff auf Array von weiterer Methode einer Klasse, Rückgabewert Problem Java Basics - Anfänger-Themen 5
P Array queue problem Java Basics - Anfänger-Themen 1
E Array zu Liste - kleines Problem Java Basics - Anfänger-Themen 6
F Problem mit Array Java Basics - Anfänger-Themen 8
M Problem mit 2D Array Java Basics - Anfänger-Themen 3
M Problem mit Array und replace Java Basics - Anfänger-Themen 3
D Array Problem Java Basics - Anfänger-Themen 4
F Array Problem !? Java Basics - Anfänger-Themen 6
M Erste Schritte Array Problem Java Basics - Anfänger-Themen 8
F Problem mit Array, Java Basics - Anfänger-Themen 4
F Problem: Verschlüsselung von String in Array Fehler Java Basics - Anfänger-Themen 2
S Problem bei Kollision zwischen Array-objekten! Java Basics - Anfänger-Themen 2
B Problem mit Array Java Basics - Anfänger-Themen 5
J Array Problem Java Basics - Anfänger-Themen 2
K Problem beim Array aufruf Java Basics - Anfänger-Themen 4
D Klassen Problem mit Eigener Array-Klasse Java Basics - Anfänger-Themen 10
N Array problem bei einem magischen Quadrats Java Basics - Anfänger-Themen 3
P Klassen Klassen mit Array Problem Java Basics - Anfänger-Themen 4
T Problem mit Array Konvertierung Java Basics - Anfänger-Themen 13
T ArrayIndexOutOfBoundsException - Problem mit Array-Größe Java Basics - Anfänger-Themen 4
L Array Problem NullPointerException Java Basics - Anfänger-Themen 3
K Problem: Array String to Integer Java Basics - Anfänger-Themen 2
M Char-Array Problem Java Basics - Anfänger-Themen 6
D Problem mit TextFeld Array Java Basics - Anfänger-Themen 18
A Array Zugriff- Problem Java Basics - Anfänger-Themen 5
V 2D - Objekt Array Problem Java Basics - Anfänger-Themen 3
K Java Array Problem Java Basics - Anfänger-Themen 3
L Problem mit Array Java Basics - Anfänger-Themen 3
K kleines Array-Problem Java Basics - Anfänger-Themen 6
X Array out of bounds problem Java Basics - Anfänger-Themen 7
M Array Problem Java Basics - Anfänger-Themen 2
K Generische Klasse mit innerer Klasse | Problem mit Array Java Basics - Anfänger-Themen 6
E Array Problem... Java Basics - Anfänger-Themen 14
P array problem Java Basics - Anfänger-Themen 9
P Codeschnipsel Verständnis Problem (Array) Java Basics - Anfänger-Themen 6
F Array Problem bei ByteburgTarif Java Basics - Anfänger-Themen 2
P Problem mit Laden und Ausgeben eines array-Objekts Java Basics - Anfänger-Themen 4
A Problem mit einem Array aus JButtons Java Basics - Anfänger-Themen 4
D Array multiplikations Problem Java Basics - Anfänger-Themen 26
D Array Problem Java Basics - Anfänger-Themen 5
B Mehrdimensionale Array Problem Java Basics - Anfänger-Themen 12
T Array-Vector Problem Java Basics - Anfänger-Themen 18
T Blutiger Anfänger mit Array Problem Java Basics - Anfänger-Themen 8
T problem mit array Java Basics - Anfänger-Themen 9
S String split array.length Problem Java Basics - Anfänger-Themen 3
B Problem mit Object Array Java Basics - Anfänger-Themen 8
W Problem mit BubbleSort und Array Java Basics - Anfänger-Themen 10
G Problem mit der Rückgabe von einem Array Java Basics - Anfänger-Themen 3
G Array-Problem Java Basics - Anfänger-Themen 3
M sinus berechnen array problem Java Basics - Anfänger-Themen 2
C array problem Java Basics - Anfänger-Themen 7
G Array ,Matrix Problem Java Basics - Anfänger-Themen 20
Antoras Problem mit Array Java Basics - Anfänger-Themen 5
K Problem mit 2 Dimensionalen Array Java Basics - Anfänger-Themen 4
D Array reverse Problem, da Referenz nicht auf tmpArray zeigt Java Basics - Anfänger-Themen 4
G Kleines Problem mit Array Java Basics - Anfänger-Themen 14
0 Array problem Java Basics - Anfänger-Themen 4
S Problem mit Array-Erstellung Java Basics - Anfänger-Themen 5
A array problem Java Basics - Anfänger-Themen 4
G array Problem Java Basics - Anfänger-Themen 9
H Problem mit array Java Basics - Anfänger-Themen 5
zilti Array-Problem Java Basics - Anfänger-Themen 6
J Array - Vertauschen Problem mit char/int Java Basics - Anfänger-Themen 6
M Problem mit Array in Methodenkopf Java Basics - Anfänger-Themen 2
K problem beim schreiben in ein int-array Java Basics - Anfänger-Themen 9
S JTable Problem mit einzufügendem Array Java Basics - Anfänger-Themen 6
D Problem mit Array brauche schnell Hilfe Java Basics - Anfänger-Themen 11
R Problem mit AbstractTableModel oder Array! Java Basics - Anfänger-Themen 5
G Problem mit Array bei einem 4-Gewinnt Spiel Java Basics - Anfänger-Themen 2
K problem mit resultset und 2d-array Java Basics - Anfänger-Themen 3
G Problem mit array Java Basics - Anfänger-Themen 2
P Array-Problem Java Basics - Anfänger-Themen 4
L Array Problem Java Basics - Anfänger-Themen 9
B Array Manipulation Problem Java Basics - Anfänger-Themen 11
B Array Problem (out of Bounds Exception) Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben