# ArrayList mit Daten füllen



## Rooki (26. Jul 2010)

Hallo Community,

ich bin recht neu in der Java Welt und in diesem Forum. Ich arbeite mich grade in Java ein und hänge bisschen bei den ArrayListen bzw. habe ein kleines Problem. Bis jetzt bin ich soweit gekommen: 


```
import java.util.ArrayList;

public class FilmSammlungListe {
    
    public static void main(String[] args) {
    
        //anlegen einer ArrayListe
        ArrayList<String> liste = new ArrayList<String>();
        
        //fuellen der Liste mit Daten
        liste.add("Shrek");
        liste.add("IceAge");
        liste.add("ToyStory");
      
    
        //Ausgeben der Liste
        System.out.println(liste);
    }}
```

Soweit so gut, funzt alles prima. Nun möchte ich aber statt den statischen Daten womit ich hier das Array gefüllt habe lieber alle Werte aus einer 2. Klasse Filme mit den Attributen FilmName, Jahr, Regisseur beziehn. Wie bekomm ich das hin ?

Vielen dank im voraus


----------



## eRaaaa (26. Jul 2010)

Füge in die ArrayList nicht Strings hinzu sondern eben Objekte von deiner Klasse "Film"

```
List<Film> liste = new ArrayList<Film>();
```

In Film evtl. dann noch toString überschreiben wenn du das weiterhin einfach mit [c]System.out.println(liste);[/c] ausgeben willst. Andere Möglichkeit wäre halt selbst über die Liste zu iterieren und dann mit getTitle() o.ä. die Werte auszugeben!


----------



## Enigma228 (26. Jul 2010)

Warum verwendest *List*<Film> liste statt gleich *ArrayList*<Film> liste zu nehmen??


----------



## eRaaaa (26. Jul 2010)

Oha, vllt sollte man das mal in die FAQ aufnehmen 

Kannst dir ja mal den Thread hier anschauen:
http://www.java-forum.org/java-basics-anfaenger-themen/101069-unterschied-deklaration-arraylist.html

(habe mir den jetzt nicht durchgelesen, aber denke da wird eine Antwort dabei sein die dir weiterhilft  
/EDIT: z.B die von 31.05.2010, 09:00 von Landei )


----------



## mr_xxl (27. Jul 2010)

Hallo allerseits! Ich habe eine Frage bezüglich Array’s und hoffe Ihr könnt mir helfen. Ich habe in meinem Programm die Zeit gezählt und jetzt will ich zu dieser Zeit zwei Messwerte angeben. Sie befinden sich in einem anderen Datei (z.B. *.dot). Bis jetzt habe ich gelesen, dass man zeilenweise die Daten übertragen kann. Und da kommt meiner Frage, kann ich die gemessene Werte in einem Array zuweisen ohne sie alle abzutippen und später sie für die Berechnung weiter verwenden?

Die Datei sieht z.B. so aus:
Zeit	GrößeA		GrößeB

1	WertA1		WertB1
2 	WertA2		WertB2
3 	WertA3		WertB3
…

Ich muss dann für einer Gleichung A-Werte einsetzen und für die andere B-Werte. Wie kann ich es am besten realisieren?


----------



## VfL_Freak (27. Jul 2010)

Moin,



mr_xxl hat gesagt.:


> Hallo allerseits! Ich habe eine Frage bezüglich Array’s und hoffe Ihr könnt mir helfen. Ich habe in meinem Programm die Zeit gezählt und jetzt will ich zu dieser Zeit zwei Messwerte angeben. Sie befinden sich in einem anderen Datei (z.B. *.dot). Bis jetzt habe ich gelesen, dass man zeilenweise die Daten übertragen kann. Und da kommt meiner Frage, kann ich die gemessene Werte in einem Array zuweisen ohne sie alle abzutippen und später sie für die Berechnung weiter verwenden?
> 
> Die Datei sieht z.B. so aus:
> Zeit	GrößeA		GrößeB
> ...



mal ganz allgemein gesprochen:
- lies die Datei zeilenweise ein (ggf. nur die Zeilen zum gesuchten Zeitpunkt)
- dann kannst Du die einzelnen Zeilen über ein spezifisches Trennzeichen (in Deinem Fall vermutlich ein Blank zwischen den Werten) splitten und dadurch ein Stringarray füllen, dass Dir dann entweder schon reicht oder von dem aus Du dann die gewünschten Werte in weitere Arrays, Variablen etc. kopieren kannst !

Gruß
Klaus


----------



## mr_xxl (29. Jul 2010)

So ich habe Datei ausgelesen mit folgendem Queltext:
[JAVA=42]
import java.io.*;
import java.util.*;

public class Main {
  public static void main(String[] args) {
        String Zeile;
        ArrayList<String> list = new ArrayList<String>();
        try {
            BufferedReader br = new BufferedReader(new FileReader(
                    "C:\\Datei.txt"));
            while ((Zeile = br.readLine()) != null) {

                list.add(Zeile);
            }
            br.close();
        } catch (FileNotFoundException e) {
            System.out.println(e.getMessage());
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
    }
}[/code]

Und wie schon oben beschrieben ist will ich die Werte in StringArray und dann in double Array setzen. Wie man von string zu double kommt, habe weiß ich. Kann vielleicht jemand ein kleines und einfaches Beispiel machen wie ich eine Datei splitte (StringTokenizer) und in ein 2-dimensionalen Array packen kann. Ich wäre dann sehr dankbar für eure Hilfe!


----------



## eRaaaa (29. Jul 2010)

mr_xxl hat gesagt.:


> Und wie schon oben beschrieben ist will ich die Werte in StringArray und dann in double Array setzen. Wie man von string zu double kommt, habe weiß ich. Kann vielleicht jemand ein kleines und einfaches Beispiel machen wie ich eine Datei splitte (StringTokenizer) und in ein 2-dimensionalen Array packen kann. Ich wäre dann sehr dankbar für eure Hilfe!



Also das mit dem Splitten wurde doch schon gesagt split(" "); .... dann hast du ja schon dein String-Array.
Aber das mit den Arrays halte ich für nicht so schön. Wieso schreibst du dir dafür nicht lieber eine Klasse?

Basierend auf deiner Datei wie oben beschrieben, vllt so etwas wie:

```
public static void main(String[] args) throws IOException {
		List<Datensatz> daten = new ArrayList<Datensatz>();
		Scanner sc = new Scanner(new File("C:/Datei.txt"));
		while (sc.hasNext()) {
			String[] line = sc.nextLine().split(" ");
			daten.add(new Datensatz(line[0], Double.parseDouble(line[1]),
					Double.parseDouble(line[2])));
		}
		sc.close();
		//Ausgabe!!!
		for (Datensatz datensatz : daten) {
			System.out.println(datensatz);
		}
	}

class Datensatz {
	private String zeit;
	private double wertA, wertB;

	public Datensatz(String zeit, double wertA, double wertB) {
		this.zeit = zeit;
		this.wertA = wertA;
		this.wertB = wertB;
	}

	@Override
	public String toString() {
		return "Datensatz [wertA=" + wertA + ", wertB=" + wertB + ", zeit="
				+ zeit + "]";
	}
}
```

???:L


----------



## bygones (29. Jul 2010)

ist mr_xxl == Rooki oder warum werden hier irgendwie jegliche Fragen gestellt ?!


----------



## mr_xxl (29. Jul 2010)

bygones hat gesagt.:


> ist mr_xxl == Rooki oder warum werden hier irgendwie jegliche Fragen gestellt ?!


Nein, aber es geht um das ähnliche Thema


----------



## mr_xxl (29. Jul 2010)

Vielen Dank eRaaaa, das ist genau was ich gebraucht habe. Allerdings kann ich das Programm nicht durchführen, weil bei der Zeile {daten.add(new Datensatz(line[0], Double.parseDouble(line[1]),Double.parseDouble(line[2])));  } wird  Meldung {non-static variable this cannot be referenced from a static context}  ausgegeben. Und wenn ich deutlich mehr Zeilen habe, kann ich doch für die Zeilennummer die Schleife einsetzen.


----------



## eRaaaa (29. Jul 2010)

Also jetzt wird es Zeit dass du mal einen neuen Thread aufmachst _denke ich_.  Und dort postest du nochmal dein aktuelles Problem, was du machen willst etc, und vor allem mal den Code der jetzt gerade bei dir nicht funktioniert, denn in meinem Code gibts kein [c]this[/c] auf das ich mich beziehe 
Du kannst dir auch mal http://www.java-forum.org/stichwort...ic-method-cant-referenced-static-context.html durchlesen :rtfm:


----------



## XHelp (29. Jul 2010)

mr_xxl hat gesagt.:


> wird  Meldung {non-static variable this cannot be referenced from a static context}  ausgegeben.


Bist du dir sicher, dass du es so wie es da steht abgeschrieben hast? Vllt hast du ja die Variablendeklarationen aus der main-Methode genommen?


----------

