Dies ist eine statische Kopie unseres alten Forums. Es sind keine Interaktionen möglich.
This is a static copy of our old forum. Interactions are not possible.

Teklan

Erfahrener Schreiberling

  • "Teklan" started this thread

Posts: 267

Date of registration: Nov 13th 2004

Location: Hannover

1

Saturday, August 27th 2005, 9:18pm

Java:Speicherung von Instanzen in einem Array

Ich habe zwei Instanzen a und b. Diese möchte ich jetzt in einem Array ar einfügen.Also schreibe ich:

Object[] ar = { a,b }

Weiterhin soll ich jetzt die Daten der Instanzen mithilfe einer Schleife ausgeben. Kein Problem - ich verwende eine for-Schleife.

Nun kommen bei mir für z.B:
ar[0].getDaten() und a.getDaten() andere Ergebnisse raus, obwohl a eigentlich das selbe ist wie ar[0]. Abe warum? Gibt es bei Arrays einen bestimmten Komponententyp für "Instanzen"?

SUPERDIM

Junior Schreiberling

  • "SUPERDIM" is male

Posts: 171

Date of registration: Oct 7th 2004

Location: Hannover

Occupation: 1. Semester M.Sc. Informatik

2

Sunday, August 28th 2005, 2:13pm

ar[0].getDaten() dürfte in diesem Fall gar nicht kompilieren.

Was du vorhast (wenn ich es richtig verstanden habe) könnte man so lösen:

- abstrakte Klasse X mit abstrakter Methode getDaten()

- weitere Klassen Y, Z, ... abgeleitet von X mit eigener Definition von getDaten()

Nun kannst du Instanzen von Y, Z erstellen und diese in einen Array vom Typ X schreiben. Dann sollte deine for-Schleife mit ar.getDaten() gehen.

Teklan

Erfahrener Schreiberling

  • "Teklan" started this thread

Posts: 267

Date of registration: Nov 13th 2004

Location: Hannover

3

Sunday, August 28th 2005, 3:44pm

Werd deinen Vorschlag probieren, Problem ist nur, dass man der Aufgabenstellung (Aufgabe zur KLaussurvorbereitung SS205 - die mit dem Fahrzeug) nach keine andere abstrakte KLasse erstellen darf.

Und du hast Recht - ar[0].getDaten() wird gar nicht kompiliert, weil getDaten() unbekannt ist. Nur wieso ist ar[0] nicht das gleiche wie a (siehe mein Beispiel)?

Hab dir mal meine Dateien und die AUfgabe per Mail zu geschickt

This post has been edited 1 times, last edit by "Teklan" (Aug 28th 2005, 3:47pm)


Jens

Praktikant

  • "Jens" is male

Posts: 18

Date of registration: Dec 11th 2001

4

Sunday, August 28th 2005, 4:50pm

Hi,

du hast vergessen zu casten. Wenn auf auf dein Object Array zugreifst, bekommst du Objekte des Typs Object. Du musst dann dein Object in den richtigen Typ umwandeln durch casten.

Beispiel:

Source 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
public class Auto{
	
	private String name = "Unbekanntes Auto";
	
	public Auto(String name) {
		this.name = name;
	}

	public String getDaten(){
		return name + ": Dies ist ein Auto";
	}
}


public class Aufgabe {

	public static void main(String[] args){
		Auto a = new Auto("Auto A");
		Auto b = new Auto("Auto B");
		
		Object[] ar = {a,b};
		
		System.out.println( ((Auto) ar[0]).getDaten() );
		System.out.println( a.getDaten() );
		
		System.out.println( ((Auto) ar[1]).getDaten() );
		System.out.println( b.getDaten() );
	}
	
}


Die Ausgabe ist dann wie zu erwarten:
Auto A: Dies ist ein Auto
Auto A: Dies ist ein Auto
Auto B: Dies ist ein Auto
Auto B: Dies ist ein Auto


Korrekterweise sollte man unter Umständen mit Hilfe von "instanceof" die Objekte aus dem Array auf den Typ Auto überprüfen bevor man castet, da man sonst eine ClassCastException erhält falls in dem Object Array Objekte enthalten sind die nicht vom Typ Auto sind.

SUPERDIM

Junior Schreiberling

  • "SUPERDIM" is male

Posts: 171

Date of registration: Oct 7th 2004

Location: Hannover

Occupation: 1. Semester M.Sc. Informatik

5

Sunday, August 28th 2005, 5:01pm

Das Array sollte vom Typ Auto sein, da dort nix anderes reinkommt (laut Aufgabenstellung).

Die Lösung mit dem Casten gefällt mir garnicht. Erinnert mich an schlecht entworfene Software. :P

Jens

Praktikant

  • "Jens" is male

Posts: 18

Date of registration: Dec 11th 2001

6

Sunday, August 28th 2005, 5:11pm

Hehe joa oder so...kenn die Aufgabe halt nich :P

q_2

Junior Schreiberling

Posts: 134

Date of registration: Oct 25th 2004

7

Sunday, August 28th 2005, 6:37pm

Wie wäre es damit:

Quoted


Auto[] Autos = {new Auto("Auto A"), new Auto("Auto B")};
// oder Auto[] Autos = { a, b};

...
Sytem.out.println(Autos[0].getDaten());
Sytem.out.println(Autos[1].getDaten());
1001 PHP-Klickibunti-made-by-Script-kiddies-Foren sind nicht nur Qual sondern auch Rückschritt!

Teklan

Erfahrener Schreiberling

  • "Teklan" started this thread

Posts: 267

Date of registration: Nov 13th 2004

Location: Hannover

8

Sunday, August 28th 2005, 6:47pm

Thx für die Lösungsvorschläge Leute!

Jep, der Fehler lag daran, dass ich eben nicht "Auto[] ar = ......" deklariert habe. Das mit dem Casten hätte auch geklappt