zeilenweise String auslesen

Java_Neuling

Grünschnabel
Hallo ich steh grad derbe aufem Schlauch.
Ich habe eine einfache Klasse Adresse.
Code:
public class Adresse
{
  private String name, strasse, ort ;
  
  public Pruefung(){
  	
  }
  
public Pruefung(String name, String strasse, String ort){
	this.name = name;
	this.strasse = strasse;
	this.ort = ort;
}
public void setName(String name){
	this.name = name;
}

public String getName(){
	return name;
}

public void setStrasse(String strasse){
	this.strasse = strasse;
}

public String getStrasse(){
	return strasse;
}
public void setOrt(String ort){
	this.ort = ort;
}
public String getOrt(){
	return ort;
}

public String toString(){
	return "Adresse: " + name + " " + straße + " " + ort;
}
  }
Dieser möchte ich nun Werte aus einer Text-Datei übergeben. so dass ich die einzelnen Attribute ansprechen und verarbeiten kann.
Wenn ich es einzeln über die Eingabeaufforderung mache, ist es kein problem, dann kann ich jedem Attribut, den richtigen Wert zuweisen.
allerdings komm ich grad hier nicht weiter mit der Dateieingabe:

Code:
import java.io.*;

public class ZeilenWeiseLesen {
    public static void main(String[] args) {
        try {
            String zeile;
Adresse a = new Adresse();
            
            File eingabeDatei = new File("eingabe.txt");
            FileReader eingabeStrom = new FileReader(eingabeDatei);
            BufferedReader eingabe = new BufferedReader(eingabeStrom);

            while ((zeile = Eingabe.readLine()) != null) {
                a.setName(zeile);
                a.setStrasse(zeile);
                a.setOrt(zeile);
            }

          System.out.println(a);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Wie sage ich der schleife, dass sie die erste Zeile in Name packt, die Zweite in Straße und die dritte in Ort usw und nicht nur die letzte zeile 3 x drin steht?
wo liegt der fehler?

viele grüße

andi
 

Anime-Otaku

Erfahrenes Mitglied
Erstmal....

dein Klassenname Adresse und dein Konstruktor Pruefung stimmen nicht überein.:confused:

So....aber nun zu deinem Problem....
gehe das Programm doch mal Schritt für Schritt durch....du liest eine Zeile ein, und speicherst den Wert der Zeile....allerdings überschreibst du mit jeder Zeile die vorherigen Werte, da du nicht berücksichtigt in welcher Zeile welcher Wert steht.


Wenn du weißt, dass die erste Zeile der Name ist, dann packe das doch in eine for Schleife. Da kannst du dann eine Zahl definieren, die hochzählt und somit weißt du in welcher Zeile du bist und somit kannst du das richtige setzen (vorher natürlich versuchen ein wenig zu plausibiliseren, dass es das richtig)

Allerdings ist zum einlesen eine Strichpunkt(oder anderes Zeichen) getrennte Liste besser ;-)
 

Java_Neuling

Grünschnabel
ja das mit der falschen Klasse, ist beim hin und her kopieren geschehen...sorry.
aber vielen dank für den tipp, das mit der for-schleife hat funktioniert, vielleicht ganz so klever gelöst aber zumindest für meinen Fall aussreichend :)
hab zwar noch keine überprüfungen drin ist auch erstmal nicht so wichtig.
Code:
import java.io.*;

public class ZeilenWeiseLesen {
    public static void main(String[] args) {
        try {
            String zeile;
            Adresse a = new Adresse();
            
            File eingabeDatei = new File("eingabe.txt");
            FileReader eingabeStrom = new FileReader(eingabeDatei);
            BufferedReader eingabe = new BufferedReader(eingabeStrom);

            String name, strasse, ort;
            int anzahlDaten = Integer.parseInt(eingabe.readLine());
            for (int i = 1; i <= anzahlDaten; i++ ){
               name = eingabe.readLine();
               strasse = eingabe.readLine();
               ort = eingabe.readLine();
               
            }

          System.out.println(a);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
 

Anime-Otaku

Erfahrenes Mitglied
ähhm.....ich hatte eigentlich eher an sowas gedacht:

Java:
            for(int i= 1;(zeile = Eingabe.readLine()) != null;i++) {
switch(i){               
case 1:
 a.setName(zeile);
break;
case 2:
                a.setStrasse(zeile);
break;
case 3:
                a.setOrt(zeile);
break;
}
            }

Du musst ja auch schließlich überprüfen, ob du mit dem readLine was zurück bekommst.
Wenn du es wie dein Ansatz machen willst....dann lass wenigstens die Schleife weg, aber überprüfe jedes Mal beim Aufruf von readLine, ob der String, denn du bekommst nicht null ist.