Problem mit Array Konvertierung

Torni

Mitglied
Schönen guten Tag,
ich habe gegoogelt und keine Lösung gefunden.http://www.java-forum.org/images/smilies/cry.gif
Wie kann ich das Stringarray args in ein Objektarray wandeln, um es zu einer List hinzufügen zu können?
Vielen Dank im voraus.
Die erste Zahl im Objekt Auto ist die int Parknummer, dann kommt int Fahrernummer, dann Farbe char, dann Beförderungsart char, dann double Leistung, dann int Unfallhäufigkeit, dann Verfügbarkeit boolean.

Java:
String fData ="34|56|rot|Personen|566|1|0"; // Beispiel für ein AutoObjekt.  
String[] args = fData.split("\\|"); 

	System.out.println(fData);

	List<Auto> carList = new ArrayList<Auto>();
	Auto a1 = args;       // so geht es leider  nicht 
        Auto a1 =  (args[0],args[1],args[2].... // und so auch nicht
//	carList.add(a1);
 
wieso musst du ein Array konvertieren,
versuche doch überhaupt erstmal auf irgendeine Weise irgendein beliebiges erstes Auto-Objekt zu erstellen!

Auto a1 = new Auto(evtl. Parameter);

wenn du das gelernt hast, viele Wochen bevor du jemals so kompilizierte Dinge wie 'split' verwenden solltest,
dann dürfte dir auffallen, dass in deinem Code elemente Bestandteile wie das Schlüsselwort new fehlen
(edit: obwohl es mit new ArrayList klappt..)
 
Code:
    Auto a1 = args;       // so geht es leider  nicht

ist klar, args ist ja auch ein String-Array 😀
Code:
        Auto a1 =  (args[0],args[1],args[2].... // und so auch nicht

Klar, Objekte erstellt man auch mit new..probiers mal mit = new Auto(args[0],args[1],args[2]....)..zumindest müsste es dann auch diesen Konstruktor geben. Eventuell muss da auch noch ein oder mehrere Integer.parseInt`s rein 😀
 
Hi Leute,
schade, daß nur kurze Antworten gegeben werden, die nicht funktionieren.

Wäre schön, wenn sich jemand mal die Mühe macht, daß Problem mal mit einem funktionierenden kurzen Beispiel gelöst, aufzuzeigen.
Ein Auto a1 = new Auto(arg[0],arg[1]...) hatte ich auch schon probiert und es geht nicht.

Mit freundlichen Grüßen
 
Wie gesagt, ohne den Konstruktor der Klasse Auto bzw. die Klasse Auto zu kennen. Kann man nicht viel dazu sagen, ausser dass Objekte mit new und dem richtigen Konstruktoraufruf erzeugt werden.
 
Hi, jetzt mal kurz zu Deiner Denkensweise:
Java:
String fData ="34|56|rot|Personen|566|1|0"; // Beispiel für ein AutoObjekt.
Weiß nicht was du mit AutoObjekt hier meinst, da du ein String deklarierst. Dann willst du den String splitten (ich nehme an die einzelnen werte im String sollen als Attribute des Autos dienen). Das ist schön, nur Du Muss erstmal überhaupt eine Klasse Auto schreiben, der Du dann die Parameter (im Konstruktor oder über Methoden übergibst)
Java:
    Auto a1 = args;       // so geht es leider  nicht
Du kannst nicht Sagen "Hey Auto, sei jetzt ein String-Array"...
Wenn du aus dem String-Array ein Objekt der Klasse Auto erzeugen willst, mach dir vlt. so ein Konstruktor für die Klasse Auto:
Java:
public class Auto {

	private String farbe;
	private String typ; //Personen steht für PKW ?
	
	//Für die restlichen Werte die Du im String hast finde ich irgendwie keine Bedeutung
	//nur für diese 2 hier
	
	
	public Auto (String[] args){
		//Diese zuweisungen gelten allerdings nur, wenn die Werte an fixen Stellen sind
		this.farbe = args[2];
		this.typ = args[3];
	}
	
}

Und mach es dann so

Java:
.....

Auto a1 = new Auto(args);
carList.add(a1);

Ich hoffe das hilft Dir weiter 🙂
 
Hallo und danke,

ich habe mal ein Beispiel Objekt Auto erstellt. So möchte ich es gerne einbauen. Wie kann man die Daten aus dem String Array so übergeben, daß ich damit wie anfangs dargestellt eine Liste erstellen kann.

Der Beitrag von Rysa kommt der Lösung schon nahe, aber bitte zeigt mir eine Lösung für mein Problem auf.

Java:
import java.util.Iterator;
import java.util.List;

public class Auto {

	private int id;
	private String fahrer;
	private double parknr;
	private boolean unfall;

	public Auto() {
	}

	public Auto(int id, String fahrer, double parknr, boolean unfall) {
		set(id, fahrer, parknr, unfall);
	}

	void set(int id, String fahrer, double parknr, boolean unfall) {
		this.id = id;
		this.fahrer = fahrer;
		this.parknr = parknr;
		this.unfall = unfall;
	}

	int getID() {
		return this.id;
	}

	String getFahrer() {
		return this.fahrer;
	}

	double getParknr() {
		return this.parknr;
	}

	boolean getUnfall() {
		return this.unfall;
	}

}
 
Wenn diese Strings
Java:
String fData ="34|56|rot|Personen|566|1|0";
immer im gleichen Format sind, dh. der erste Wert immer die ID ist, und der dritte immer die Farbe, dann kannst du dem konstruktor, wie ich vorher geschrieben habe, einfach den gesplitteten Array übergeben und die Werte innerhalb des Konstruktors casten (da musst du aber, wie gesagt, sicher sein, dass die Werte immer an den gleichen Stellen sind, sonnst gibts beim casten Probleme). Also ungefähr so:
Java:
String fData ="16|Peter|566|true"; // Beispiel für die Werte deines Autos.  16 - die ID , Peter - der Fahrer , 566 - die ParkNr , true - //hatte unfall
String[] args = fData.split("\\|");

    List<Auto> carList = new ArrayList<Auto>();
    Auto a1 = new Auto(args);
    carList.add(a1);
und die Auto Klasse:
Java:
import java.util.Iterator;
import java.util.List;
 
public class Auto {
 
    private int id;
    private String fahrer;
    private double parknr;
    private boolean unfall;
 
    public Auto() {
    }
 
    public Auto(String[] values) {
       id = (Integer.valueOf(values[0]).intValue());
       fahrer = values[1];
       parknr = (Double.valueOf(values[2]).doubleValue()); 
       //wobei ich gar nicht weiß warum die Parknummer ein double sein sollte 
       //(mit Kommastellen ?! o.O)
       if (values[3].equals("true")){
    	   unfall = true;
       }
       else {
    	   unfall = false;
       }
    }
    
    //Setter-Methoden ggf. auch noch dazu, allerdings für die einzelnen Werte, und nicht für 4 Werte in einer Methode...
 
    int getID() {
        return this.id;
    }
 
    String getFahrer() {
        return this.fahrer;
    }
 
    double getParknr() {
        return this.parknr;
    }
 
    boolean getUnfall() {
        return this.unfall;
    }
 
}
 
Zuletzt bearbeitet:
es ist doch so offensichtlich, dass du dir nur noch die Parameter richtig sortieren musst, und dafür helfen für einen Anfänger lieber mehr Zeilen als zu wenige,
schreibe zunächst

Java:
new Auto(0, "", 0, false);
funktioniert, super

Java:
int id = 0;
String f = "";
double p = 0;
boolean u = false;
new Auto(id, f, p, u);
funktioniert, super

jetzt musst du nur noch die String-Array-Werte in die einzelnen Variablen einfügen
Java:
int id = args[0];
schon funktioniert es nicht, String in int-Variable zu speichern geht nicht, der String muss in int umgewandelt werden
-> schon hast du eine konstruktive Problembeschreibung, die man in diesem Fall sogar direkt in google suchen kann (String int umwandeln)

viel besser als vorher unbestimmtes
"new Auto(arg[0],arg[1]...) zeigt 4 Mio. Fehler an"

die Umwandlung String nach double ist ähnliches Problem,
String nach boolean ist bisschen davon abhängig welche Information du da genau im String speicherst, "0" oder "false" oder sonstwas?

wobei diese Frage auch nicht eine direkte Gegenfrage bewirken soll, sondern Nachdenken zur Umsetzung,
aber ich sehe gerade, dass RySa sämtliches Denken in diesem Fall obsolet gemacht hat 😉
 
Zuletzt bearbeitet von einem Moderator:
Hi SlaterB,

auch ein guter Denkansatz, muß ich mal probieren. Auch Danke dafür.
Mal sehen ob ich eine aus euren beiden Vorschlägen eine elegante Methode basteln kann.
 
Zuletzt bearbeitet von einem Moderator:
ohne nerven zu wollen:
ich fände es wirklich schön, wenn nicht für kurze Antworten ohne konkreten Bezug, 10x so lange Ursprungspostings komplett zitiert werden,
> Vielen vielen Dank RySa,
reicht doch als Referenz

edit:
und für mein Posting genauso, das ist hier wirklich keine Email-Liste wo jeder den vorherigen Betrag kopiert,
in einem Forum steht nicht ohne Grund alles direkt untereinander..
 
Ich rate Dir nur beim nächsten mal konkrete Fragen zu stellen und nicht die fertigen Lösungen zu verlangen. Ich habe es jetzt so ausführlich gemacht, da ich im Moment mit meinem Projekt fertig bin, es von anderen Mitarbeitern getestet wird und ich jetzt "langeweile" habe. Copy&Paste wird Dir aber nicht weiterhelfen, glaube es mir. Beim nächsten gleichen Problem wirst du wieder nachfragen müssen, wenn du das hier alles nicht verstanden hast sondern nur eingesetzt.

Wenn Du Probleme hast String informationen als int oder double abzuspeichern dann ist hier "casten" das Stichwort. Viel glück 🙂

Ps. Und mit diesem bisschen Wissen, kann ich mich nur als Anfänger bezeichnen, wobei das auch eine Sache der Ansicht ist. Das hier ist die absolute Grundbasis um mit Java effektiv arbeiten zu können. Wobei das was ich hier geschrieben habe sowieso unschön ist und eigentlich anders realisiert werden sollte. Reicht aber für den Anfang.

Ps2. Vergiss nicht das Thema als erledigt zu markieren, sobald das klappt.
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben