Verschiedene Rückgabetypen(int int char)

Java-Freak

Bekanntes Mitglied
hallo
wie kann ich von einer funktion 3 werte zurückgeben lassen?
es geht um eine parse() methode, die 2 ints und 1 char zurückgeben sollen. ich habs mal mit ner ArrayList versucht aber es geht nicht die arrayList liefert mit indexOf(1) immer nur -1..🙁
ich poste mal code...
Java:
public static ArrayList<Object> parse(String str){
		ArrayList<Object> set = new ArrayList<Object>(3);
		//hier parst dier methode die rückgabetypen aus dem string
                op = str.charAt(i);		
                firstInInt = Integer.parseInt(firstInString);
		secondInInt = Integer.parseInt(secondInString);
		set.add(firstInInt);
		set.add(secondInInt);
		set.add(op);
		System.out.println(set.get(2)); //liefert den korrekten wert
		return set;
	}
	public static int calculate(String bla){
		ArrayList<Object> g = parse(bla);
		System.out.println(g.indexOf(2));//liefert immer nur -1
		int first = (int)g.indexOf(0);
		int second = (int)g.indexOf(1);
		char oper = (char)g.indexOf(2);
		//hier berechnet die methode was aus den 3 werten
	}
//in der main steht nur calculate(einem string)
wie schon im code angemerkt liefert die array list beim parsen den korrekten wert aber danach komischerweise nicht
 
Moin,

also wenn ich dich richtig verstehe möchtest du in deinem Beispiel auf das Element der ArrayList mit dem Index 2 zugreifen.
Du verwendest allerdings die Methode indexOf() dafür. Wirf mal n Blick in die API-Docs, dann dürftest du feststellen dass diese Methode die ArrayList nach dem Element "2" durchsucht, und dir den dazugehörigen Index liefert. -1 wird zurückgegeben wenn das Element nicht in der Liste vorkommt. ;-)

Für deine Zwecke würd ich dir also die get()-Methode vorschlagen ;-)

Java:
System.out.println(g.get(2));
bzw
Java:
char oper = (char)g.get(2);

Genau so wie du es in deiner parse()-Methode auch schon machst.

Gruß
lordstege
 
ah ok vielen dank 😉
bei get habe ich jedoch das problem dass ich nicht von einem object aus der object list auf ein int oder char casten kann...
welchen typ nehme ich jetzt am geschicktesten für meine List?
edit: habs so gelöst, is vll nicht des geschicktest aber funktioniert:
Java:
public static int calculate(String bla){
		ArrayList<Object> g = parse(bla);
		System.out.println(Integer.parseInt(g.get(1).toString()));
		int first = Integer.parseInt(g.get(0).toString());
		int second = Integer.parseInt(g.get(1).toString());
		char oper = g.get(2).toString().charAt(0);
		System.out.println(oper);
 
Zuletzt bearbeitet:
Da du deine Liste mit primitiven Datentypen (int) fütterst, und Java die automatisch in n Integer-Objekt verpackt (Wrapping) kannst du auch einfach mit
Code:
g.get(2).intValue()
an den int-Wert kommen.

Gruß
lordstege
 
Da du deine Liste mit primitiven Datentypen (int) fütterst, und Java die automatisch in n Integer-Objekt verpackt (Wrapping) kannst du auch einfach mit
Code:
g.get(2).intValue()
an den int-Wert kommen.

Gruß
lordstege

Dafür müsste er aber auch List<Integer> verwenden anstelle von List<Object>, denn so liefert get(..) einfach nur ein Objekt vom Typ Object..
Und btw: das automatische Umwandeln geht übrigens auch andersherum (unboxing) demzufolge würde es dann (bei richtiger Verwendung) auch ausreichen
Code:
int i = g.get(0);
zu schreiben, oder in seinem Fall [c]int i = (Integer) g.get(0);[/c]
 
das problem war doch dass ich List<Integer> eben nicht verwenden konnte , weil ich ja noch den char mit drin habe

Das ist mir schon klar, ich bezog mich auch nur auf meinen Vorredner .. 🙂 (bzw wollte eig. nur klarstellen dass du eben nicht einfach schreiben kannst: [c]g.get(2).intValue()[/c] ..
Allerings könntest du dennoch deinen Ausdruck
Java:
int first = Integer.parseInt(g.get(0).toString());
ersetzen mit
Java:
int first = (Integer) g.get(0);
 
ok, stimmt 😉
was ist eigentlich besser, casten oder mit parseXXX?
also ich meine was ist speicherintensiver?
edit: in dem fall warscheinlich das casten weil man sich die toString spart aber im allemeinen?
 
Zuletzt bearbeitet:
Allgemein kann man da jetzt schlecht was zu sagen, bzw eig. ist das überhaupt nicht vergleichbar, was du da gemacht hast ist meiner Meinung nach eher ein ungewöhnlicher Fall ^^
Ein Integer ist und bleibt ein Integer..was du aber machst ist, du holst dir von dem Integer eine Stringrepräsentation und rufst dann noch die komplizierte parse-Methode auf um wieder einen Integer zu erhalten..wobei das alles total unnötig ist, da du ja bereits ein Integer vorliegen hast...???:L
 
eigentlich hab ich keinen Integer vorliegen sondern ein Objekt, das ich in einen Integer umwandeln möchte da kann man das Object entweder gleich in einen Integer umwandeln oder über die toString(), was eigentlich ziemlich dumm war...
 

Neue Themen


Zurück
Oben