methoden"bau"

Status
Nicht offen für weitere Antworten.

a.pst

Aktives Mitglied
servus,
ich möchte aus dem code stück zwei methoden basteln, brings aber ums sterben nicht hin 🙁
die eine soll den reader weitergeben, so daß die zweite methode mit dem streamtokenizer damit arbeiten kann.
die zweite soll den string "eingeleseneDateien[ ][ ]" weitergeben...
Java:
 public static void main(String[] args) throws FileNotFoundException, IOException {

        Reader reader = new BufferedReader(new FileReader("datei.txt"));
        StreamTokenizer tokens = new StreamTokenizer(reader);

        tokens.slashStarComments(true);
        tokens.ordinaryChar('.');
        tokens.parseNumbers();

        int x = 0;
        int y = 0;
        int aufnullstellen = 0;

        String eingeleseneDaten[][] = new String[52][17];


        for (int tval; (tval = tokens.nextToken()) != StreamTokenizer.TT_EOF;) {

            //zahlen werden auf y++ gesetzt
            if (tval == StreamTokenizer.TT_NUMBER) {
                //System.out.println(x+"y-wert");
                double wert = Double.valueOf(tokens.nval);
                eingeleseneDaten[x][y] = (Double.valueOf(wert)).toString();
                y++;
            }
            //worte werden die x koordinate  wird um eins erhöht, und auf y0 gesetzt
            if (tval == StreamTokenizer.TT_WORD) {
                x++;
                y = aufnullstellen;
                y++;
            }
        }
    }

die erste methode stelle ich mir ungefähr so vor..und natürlich funktionierts so nicht ...
Java:
 public Filereader Reader (reader) throws FileNotFoundException, IOException {
        Reader reader = new BufferedReader(new FileReader("datei.txt"));
        return reader;
    }

wer kann, mir auf auf die sprünge helfen? 🙂

gruß, der ahnungslose 🙁
 
Java:
public Filereader Reader (reader) throws FileNotFoundException, IOException {
        Reader reader = new BufferedReader(new FileReader("datei.txt"));
        return reader;
    }

Das ist ja auch keine gültige Methode. Zum Einen ist der Name verwirrend, weil es auch eine Klasse gibt die so heißt und zum anderen ist der Parameter falsch (ohne Datentyp). Rückgabetypen passen auch nicht zueinander ... Eigentlich ist fast alles falsch 😀
Ich vermute du meinst sowas:
Java:
public Reader createReader(String filename) throws IOException
{
    return new BufferedReader(new FileReader(filename));
}
 
public/private RückgabeTyp MethodenName(ParamterTyp parameterName)..

zb...
public Filereader createReader() throws FileNotFoundException, IOException {
 
Java:
public Filereader Reader (reader) throws FileNotFoundException, IOException {
        Reader reader = new BufferedReader(new FileReader("datei.txt"));
        return reader;
    }

Das ist ja auch keine gültige Methode. Zum Einen ist der Name verwirrend, weil es auch eine Klasse gibt die so heißt und zum anderen ist der Parameter falsch (ohne Datentyp). Rückgabetypen passen auch nicht zueinander ... Eigentlich ist fast alles falsch 😀
Ich vermute du meinst sowas:
Java:
public Reader createReader(String filename) throws IOException
{
    return new BufferedReader(new FileReader(filename));
}
so was in der art mein ich 🙂
...aber was übergebe ich dan den streamtokenizer? *blödfrag*
 
Java:
    Reader reader = createReader("beispiel.txt");
    StreamTokenizer tokenizer = new StreamTokenizer(reader);

Oder in einer Zeile:
Java:
    StreamTokenizer tokenizer = new StreamTokenizer( createReader("beispiel.txt") );
...was aber nicht zwangsweise hübscher ist.
 
zu mindest meckert so der compiler nicht mehr 🙂
Java:
   public BufferedReader createReader() throws IOException
{
    return new BufferedReader(new FileReader("fumitab"));
}
 
Java:
    Reader reader = createReader("beispiel.txt");
    StreamTokenizer tokenizer = new StreamTokenizer(reader);

Oder in einer Zeile:
Java:
    StreamTokenizer tokenizer = new StreamTokenizer( createReader("beispiel.txt") );
...was aber nicht zwangsweise hübscher ist.
eigentlich möchte ich an den streamtokenizer etwas ohne explizitendatei namen weiter geben...

bzw...wäre es möglich, nur die "tokens" weiter zu geben, in etwa so
Java:
      public BufferedReader Reader(){
                    Reader reader = new BufferedReader(new FileReader("datei.txt"));
                    StreamTokenizer tokens = new StreamTokenizer(reader);
                    return tokens;}
 
das ist komplett sinnlos... warum kapselst du coder, der aus einer Zeile besteht in eine Methode?
ich stelle mir das so vor...ich habe einige dateien, die ich mit der zweiten funktion auslesen möchte...mein gedanke war, dann einfach für jede datei einen entsprechenden reader zu machen, und damit dann die zweite funktion zu überladen.
 
im moment sieht die erste methode so aus...
Java:
   public StreamTokenizer createReader() throws IOException
{Reader reader =new BufferedReader(new FileReader("fumitab"));
 StreamTokenizer tokens = new StreamTokenizer(reader);
    return tokens;
}
 
bzw...wäre es möglich, nur die "tokens" weiter zu geben, in etwa so
Java:
     public BufferedReader Reader(){
                    Reader reader = new BufferedReader(new FileReader("datei.txt"));
                    StreamTokenizer tokens = new StreamTokenizer(reader);
                    return tokens;}
... ja und nein. Du begehst wieder die gleichen Fehler. Ich darf mal ARadauer zitieren:
public/private RückgabeTyp MethodenName(ParamterTyp parameterName)
Der RückgabeTyp den dem im Kopf der Methode nennst muss mit dem übereinstimmen, den du IN der Methode zurückgibst.
Java:
     public BufferedReader Reader(){ // sagt: Rückgabe ist vom Typ BufferedReader
                    Reader reader = new BufferedReader(new FileReader("datei.txt"));
                    StreamTokenizer tokens = new StreamTokenizer(reader);
                    return tokens; // gibt aber einen StreamTokenizer zurück!
}
*EDIT: Schon gesehen dass du es korrigiert hast... 😉 *

Bei deinem Vorhaben scheint es aber sinnvoller, die ganze Arbeit in eine Methode zu packen, weil du für zwei Zeilen keine eigene Methode brauchst. Mach also eher eine, die als Parameter die Datei bekommt und als Rückgabe die eingelesenen Daten liefert. Etwa so:
Java:
public String[][] parseFile(String filename) throws IOException
{
    // ... dein code ...
    String[][] eingeleseneDaten = new String[52][17];
    // ... dein code ...
    return eingeleseneDaten;
}
Solch eine Methode könntest du von anderswo dann immer aufrufen:
Java:
// ...
String[][] daten = parseFile("datei1.txt");
// daten verarbeiten
daten = parseFile("datei2.txt");
// daten verarbeiten
// ...

Also auch meine Meinung: Das Erstellen eines Tokenizers muss man in dem Fall nicht extra kapseln. Aber ich weiß auch nicht genau, was du mit denen vorhast 🙂
 
das argument hat was für sich...im momet sieht es so aus:
Java:
  public static String[][] Dateneinlesen(String[][] dateiname)throws IOException{

  Reader reader =new BufferedReader(new FileReader("dateiname"));
 StreamTokenizer tokens = new StreamTokenizer(reader);


        tokens.slashStarComments(true);
        tokens.ordinaryChar('.');
        tokens.parseNumbers();
        //tokens.eolIsSignificant(true);

        //int i = 0;
        int x = 0;
        int y = 0;
        int aufnullstellen = 0;

        String eingeleseneDaten[][] = new String[52][17];


        for (int tval; (tval = tokens.nextToken()) != StreamTokenizer.TT_EOF;) {

            //zahlen werden auf y++ gesetzt
            if (tval == StreamTokenizer.TT_NUMBER) {
                //System.out.println(x+"y-wert");
                double wert = Double.valueOf(tokens.nval);
                eingeleseneDaten[x][y] = (Double.valueOf(wert)).toString();
                y++;

            }
            //worte werden auf y0 gesetzt und x koordinate um eins erhöht
            if (tval == StreamTokenizer.TT_WORD) {
                x++;
                y = aufnullstellen;
                y++;
            }
        } 
        return eingeleseneDaten;
   }

...
Solch eine Methode könntest du von anderswo dann immer aufrufen:
Java:
// ...
String[][] daten = parseFile("datei1.txt");
// daten verarbeiten
daten = parseFile("datei2.txt");
// daten verarbeiten
// ...
irgendwie steh ich da jetzt ganz furchtbar auf dem schlauch...mit der umsetzung dieser methode ;(
klar, "nur" den dateinamen ändern ist es die bequemste lösung, aber ich "sehe" gerade nicht wie ich das bewerkstelligen soll...
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.

Zurück
Oben