Casting in Java

Neue Frage »

Auf diesen Beitrag antworten »
donvito Casting in Java

Hallo ihr Lieben,

das Casting in Java bringt mich bald um den Verstand, hier mein Programm:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
import java.util.*;
import java.io.*;


public class Point2D {
	private Vector x = new Vector();
	private Vector y = new Vector();
	
	private InputStreamReader isr = new InputStreamReader(System.in);
	private BufferedReader br = new BufferedReader(isr);

	
	public void readIn()throws IOException

	{

			x.addElement(br.readLine());
			x.addElement(br.readLine());
			y.addElement(br.readLine());
			y.addElement(br.readLine());
		
	}
	public double distance(){
		Double x1, x2, y1, y2;
		
		Enumeration en = x.elements();		
		x1 = (Double) en.nextElement();
		x2 = (Double) en.nextElement();		
		en = y.elements();
		y1 = (Double) y.elementAt(0);
		y2 = (Double) y.elementAt(1);	
		
		double xx = x2.doubleValue() - x1.doubleValue();
		double yy = y2.doubleValue() - y1.doubleValue();
		

		double distance = Math.sqrt(Math.pow(xx, 2) + Math.pow(yy, 2));
		return distance;
		}
	
	
	public static void main(String arg[])throws IOException {
		Point2D p = new Point2D(); 
		System.out.println("Bitte geben Sie Ihre Punkte ein!");
		p.readIn();
		System.out.println(p.distance());
		
		
	}
	

} 


Ich kriege folgenden Fehler: Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Double
at Point2D.distance(Point2D.java:28)
at Point2D.main(Point2D.java:47)


Laut unserem Professor muss sich aber ein Object einfach so casten lassen. Beispiel aus der Vorlesung:
code:
1:
2:
3:
4:
5:
Enumeration en = v.elements();
while (en.hasMoreElements()) {
String s = (String) en.getNextElement();
System.out.print(s);
} 


Nu verstehe ich nicht was der Unterschied ist. Wieso gehts bei mir nicht?

Gruß donvito
 
Auf diesen Beitrag antworten »
Tobias

Tja, das hast du völlig falsch verstanden mit dem Casten.

Jedes Objekt in Java ist vom Typ "Object" abgeleitet. D.h. man könnte z.B. einen String so erstellen:

code:
1:
Object o = new String("Hallo");


Nun kann es aber sein, dass du eine String-Methode aufrufen willst, wie z.B. charAt(0). Das geht mit o nicht, weil o eine Object-Referenz ist. Da du aber weißt, dass o auf einen String referenziert, kannst du o nach String casten:

code:
1:
char c = ((String)o).charAt(0);


Was nicht geht ist einfach einen String in einen Double umzucasten, weil diese Typen nicht voneinander abgeleitet worden sind.

Dafür gibt es andere Methoden. Z.B.

code:
1:
x1 = new Double((String)en.nextElement());
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »