Komm nicht drauf warum das nicht geht.

Status
Nicht offen für weitere Antworten.

l00P

Bekanntes Mitglied
hallo Gruppe!

Folgendes Problem quält mich....



0.97600174

Code:
float addAllMotor = 0;
//Da sind floats drinnen die ich von einer datei einlese. z.B. 0.97600174
ArrayList correctMillsecMotor = new ArrayList();

for(int k=0; k < correctMillsecMotor.size(); k++){

	addAllMotor += Float.parseFloat((String)correctMillsecMotor.get(k));				
				
}

Da gibts dann eine java.lang.ClassCastException !!

Weiß jemand was da los ist?!?

danke schonmal
lg
 
versteh ich nicht, wenn ich was von einer datei einlese sind das doch immer strings oder nicht?

Es funktionert aber auch nicht wenn ich gleich mit den Werten aus dem Array rechnen will?!?
 
l00P hat gesagt.:
Code:
float addAllMotor = 0;
//Da sind floats drinnen die ich von einer datei einlese. z.B. 0.97600174
//            ^^^^-- Wenn da floats drinnen sind...
ArrayList correctMillsecMotor = new ArrayList();

for(int k=0; k < correctMillsecMotor.size(); k++){

	addAllMotor += Float.parseFloat((String)correctMillsecMotor.get(k));
				//                     ^^^^^-- Wieso castest du das dann nach String und parst dann wieder floats draus?
}

Da gibts dann eine java.lang.ClassCastException !!

Weiß jemand was da los ist?!?

danke schonmal
lg

Vermutlich geht genau der Cast nach (String) schief. Sind da wirklich Strings in der ArrayList gespeichert?
Schick doch mal den Quelltext wo du die ArrayList mit Daten füllst.

Im übrigen kannst du seit Java 1.5 (falls du das schon benutzt), das Casten der durch get aus einer ArrayList (und auch aus anderen Lists, Sets usw.) erhaltenen Werte weglassen, indem du das so benutzt:

Code:
ArrayList<String> test = new ArrayList<String>();  // ArrayList, die Strings speichert, anlegen
...
// hier die ArrayList<String> mit Daten (Strings) füllen
...

// ein Aufruf der get-Methode liefert nun sofort einen String zurück.
System.out.println(test.get(0));

http://java.sun.com/docs/books/tutorial/java/generics/index.html
 
ja hast recht, hab übersehen das ich vorher schon die einzelnen Strings in Floats caste und schon berechnungen mache bevor ich´s ins array schmeiße....

Aber nun will ich alle Werte in der List zusammenzählen und das geht so nicht?!?

Code:
float addAllMotor = 0;
			for(int k=0; k < correctMillsecMotor.size(); k++){
				addAllMotor += correctMillsecMotor.get(k);
			}

Angeblich ist der operator += nicht für float geeignet... aber wie dann??
 
In einer ArrayList können keine primitiven Datentypen wie float liegen. Wenn überhaupt, dann enthält sie Float-Objekte. Da aber niemand weiß, wie deine ArrayList jetzt aussieht, und was sie enthält, kann man nur als Tipp geben
Code:
addAllMotor += correctMillsecMotor.get(k).floatValue();
 
Poste mal ein Stück code, bei dem man sieht, von welchem Typ die ArrayList ist, und mit welchen Daten du sie Füllst.
 
Code:
ArrayList correctMillsecMotor = new ArrayList();
ArrayList allMillsec = new ArrayList();
float mill1, mill2 = 0;

mill1 = Float.parseFloat((String)allMillsec.get(j));
mill2 = Float.parseFloat((String)allMillsec.get(j+2));

//das passiert natürlich in einer for schleife
correctMillsecMotor.add(mill1- mill2);
 
OK, da hat es das Auotboxing von Java 1.5 etwas zu gut gemeint: Wenn du schreibst

correctMillsecMotor.add(mill1- mill2);

dann sieht das erstmal aus, als würde da ein 'float' in die ArrayList gelegt. Das geht aber nicht. Darum wird bei dieser Zeile in Wirklichkeit sowas gemacht wie

correctMillsecMotor.add(new Float(mill1- mill2));

D.h. in der ArrayList liegen dann Float-Objekte.

Wenn man auf die ArrayList zugreift, kriegt man aber erstmal nur Objekte vom Typ "Object" (man könnte ja z.B. auch einen String in diese ArrayList legen). Es gibt jetzt erstmal zwei Möglichkeiten. Entweder, du castest die Elemente der ArrayList nach Float, und addierst die Werte auf
Code:
for ...
{
    Float f = (Float)correctMillsecMotor.get(k);
    addAllMotor += f.floatValue(); 
}

oder (was schöner, sicherer und sauberer wäre) du erstellst die ArrayList gleich mit dem richtigen Typ:
Code:
ArrayList correctMillsecMotor<Float> = new ArrayList<Float>();
...
correctMillsecMotor.add(mill1- mill2);
...
for ...
{
    addAllMotor += correctMillsecMotor.get(k).floatValue(); // Das geht dann, weil die ArrayList<Float> nur Float-Objekte enthält
}
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben