ERLEDIGT
JA
JA
ANTWORTEN
14
14
ZUGRIFFE
865
865
EMPFEHLEN
-
Hallo, folgendes Problem.
Ich habe eine Klasse mit:
Code :1
public Room(int Bla, String Blub, String Blob, int Ic, int Jc)
und eine zweite Klasse mit:
Code :1
public Area(int Bla, String Blub, String Blob)
In der Klasse "Area" sollen 16 Objekte für die Klasse Room erzeugt werden.
Code :1 2 3 4 5 6 7 8 9 10 11 12
public void create() { Room[] r = new Room[5]; for (int i=0; i < 4; i++) { for (int j=0; j < 4; j++) { r[i] = new Room(0, "0", "0",i,j); System.out.print(new Room(0, "0", "0",i,j)); } } }
Als Ausgabe bekomme ich:
Room@54a6af6e
Room@4f2b3349
......
Ist diese Ausgabe normal?
Ich hätte es mir eher so vorgestellt:
Room@00000
Room@00001
Room@00002
Room@00003
Room@00010
....
Aber habe ich mit diesem Code wirklich Objekte der Art Room(0, "0", "0",i,j) erstellt?
Bzw. wie kann ich nun auf die einzelnen Objekte zugreifen?
Schließlich kann ich sie mitals {1;2;3;4;...} eindeutig erkennen.Code :1
int c= j*4+i+1
Gruß New2Java
-
Du erstellst sogar 2 neue Room Objekte.
somit ist das in der Ausgabe ein anderes als das was du ins Array steckst.Code java:1 2
r[i] = new Room(0, "0", "0",i,j); System.out.print(new Room(0, "0", "0",i,j));
2. ist die Ausgabe das Objekt und nicht das was du sehen willst. Du koenntest in deiner Room Klasse eine toString Methode erstellen. In der du dann die Variablen ausgibst.
Und dann nach deiner Zuweisung im Array das neue Objekt ausgeben mit der toString MethodeCode java:1
System.out.print("Bla: " + bla + " Blub: " + blub);
Habs jetzt mal so hingeschrieben und net getestet, aber so in etwa duerfte es das sein was du sehen wolltest? Das beantwortet dann auch direkt wie du auf die einzelnen Objekte zugreifen kannstCode java:1 2
r[i] = new Room(0, "0", "0",i,j); System.out.print((r[i]).toString());
r[i], wobei i die Stelle im Array ist.
Noch ne Sache du schreibst 4 mal auf die gleiche Stelle im Array. Da sich in der 2. for-Schleife dein i nicht aendert.Waere super wenn ihr euren Code in dieser Form einfuegt:
[JAVA]System.out.println("Test :)");[/JAVA]
wird zu:
Tabs sind uebrigens keine Feinde :)Code java:1
System.out.println("Test :)");
Der "Erledigt Button" beisst net :) Und der "Danke Button" ist auch nicht nur zur zierde
Danke :D
-
Also mein funktion zum erstellen von 16 neuen Objekten namens Raum in der Klasse Area, sieht wie folgt aus:
PHP-Code:public void create()
//erstellt 16 Räume
{
Room[][] r = new Room[5][5];
for (int i=0; i < 4; i++) {
for (int j=0; j < 4; j++) {
int c= j*4+i+1;
r[i][j] = new Room(0, "0", "0",i,j);
System.out.print("[Room " + i + "/"+ j+ "] mit id:" + c + " ");
System.out.print((r[i][j]).toString());
}
System.out.println();
}
}
gibt das gleiche aus wiePHP-Code:System.out.print((r[i][j]).toString());
nämlichPHP-Code:System.out.print((r[i][j]));
.Code :1
Room@23309e87
Muss ich erst eine Funktion toString() erstellen, eigentlich gibt die Funktion toString() das Objekt doch als String aus und ist in Java implementiert?
Meine Klasse Room sieht wie folgt aus:
PHP-Code:public class Room
{
private int a;
private String b;
private String c;
private int i;
private int j;
public Room(int A, String B, String C, int I, int J)
{
a = A;
b = B;
c = C;
i = I;
j = J;
}}
Ich habe die Befürchtung, das i und j bei den neuen Räumen verloren gehen bzw. das Objekt gar nicht richtig in der Schleife aufgefüllt wird?!
Gruß New2Java.
-
Mach dir keine Sorgen die Ausgabe passt so wie sie ist.Als Ausgabe bekomme ich:
Room@54a6af6e
Room@4f2b3349
......
Ist diese Ausgabe normal?
Ich hätte es mir eher so vorgestellt:
Room@00000
Room@00001
Room@00002
Room@00003
Room@00010
....
Der Teil nach dem @ ist nämlich keine Nummerierung der einzelnen Objekte sondern der Hashwert der Objekte, der zur Identifizierung und auch zum Vergleichen benutzt wird.
Denn zwei Instanzen sind nur dann identisch wenn auch der Hashwert identisch ist.
-
Anscheinend net gut gelesen? Wie ich sagte, du musst dann eine toString erstellen um die Ausgabe so zu haben wie du sie moechtest.
Ansonsten koenntest du auch getter erstellen und dann in deiner System out einfach
(r[i][j]).getI(), (r[i][j]).getA() etc machen. In deiner Room Klasse koennte dann auch eine Methode getID sein in dieser gibst du das Ergebnis aus j*4+i+1; zurueck.
PS: In deiner Klasse Room solltest du darauf achten, dass man variablen in Java klein schreibt.
EDIT: Achja, die API hilft
Java Object
Geändert von MiMi (19.11.10 um 08:40 Uhr)
Waere super wenn ihr euren Code in dieser Form einfuegt:
[JAVA]System.out.println("Test :)");[/JAVA]
wird zu:
Tabs sind uebrigens keine Feinde :)Code java:1
System.out.println("Test :)");
Der "Erledigt Button" beisst net :) Und der "Danke Button" ist auch nicht nur zur zierde
Danke :D
-
Hier mal mein neuer Code mit der Erstellung neuer Objekte einer Klasse, als nächstes versuche ich es mit erstellen von Objekten einer anderen Klasse.
Gruß New2JavaPHP-Code:public class Area
{
private int a;
private String bla;
private String blub;
private int i;
private int j;
private int c;
Area(int a, String bla, String blub, int i, int j, int c){
this.a = a;
this.bla = bla;
this.blub = blub;
this.i = i;
this.j = j;
this.c = c;
}
@Override
public String toString(){
return
"Objektnummer:[" + a + "]"
+ " Name:[" + bla + "]"
+ " Beschreibung:[" + blub + "]"
+ " Koordinaten[" + i + "/" + j + "]"
+ " ID in Area:[" + c + "]";
}
public static void main(String[] args)
{
Area[][] r = new Area[5][5];
for (int i=0; i < 4; i++) {
for (int j=0; j < 4; j++) {
int c= j*4+i+1;
r[i][j] = new Area(0, "Name", "Desc", i, j, c);
System.out.print((r[i][j]).toString());
}
System.out.println();
}
}
}
Geändert von New2Java (20.11.10 um 15:24 Uhr)
-
Okay alles klar, ich habe es hinbekommen.
PHP-Code:public class Room
{
private int a;
private String b;
private String d;
private int i;
private int j;
private int c;
public Room(int a1, String b1, String d1, int i1, int j1, int c1)
{
this.a = a1;
this.b = b1;
this.d = d1;
this.i = i1;
this.j = j1;
this.c = c1;
}
public int a() {return a;}
public String b() {return b;}
public String d() {return d;}
public int i() {return i;}
public int j() {return j;}
public int c() {return c;}
@Override
public String toString(){
return
"Objektnummer:[" + a() + "]"
+ " Name:[" + b() + "]"
+ " Beschreibung:[" + d() + "]"
+ " Koordinaten[" + i() + "/" + j() + "]"
+ " ID in Area:[" + c() + "]";
}
}
PHP-Code:public class Area
{
private Room room;
public static void main(String[] args)
{
Room[][] r = new Room[5][5];
int c = 1;
for (int i=0; i < 4; i++) {
for (int j=0; j < 4; j++, c++) {
r[i][j] = new Room(0, "Name", "Desc", i, j, c);
System.out.println(r[i][j].toString());
}
System.out.println();
}
}
}
Dann werde ich mal als nächstes probieren auf die einzelnen Objekte zuzugreifen.
Gruß New2JavaGeändert von New2Java (20.11.10 um 16:53 Uhr)
-
Okay ich verzweifel wieder ein wenig...
ich möchte jetzt die arrays in einer Methode ausgeben, aber wie?
PHP-Code:public class Area
{
private int id;
private String name;
private String description;
private Room room;
public Area(int id, String name, String description)
{
this.id = id;
this.name = name;
this.description = description;
int n = 4;
Room[][] r = new Room[n][n];
int c = 1;
for (int i=0; i < n; i++)
{
for (int j=0; j < n; j++)
{ c=i*4+j+1;
r[i][j] = new Room(0, "name", "description", i, j, c);
}
}
}
public int id() {return id;}
public String name() {return name;}
public String description() {return description;}
public void look()
{
int n = 4;
int c = 1;
for (int i=0; i < n; i++)
{
for (int j=0; j < n; j++, c++)
{
System.out.println(r[i][j].toString());
}
System.out.println();
}
}
}
Wie kann ich dem compiler klar machen, was ich mit r[i][j] in der Methode meine
?
MfG New2Java
-
Hi,
Die Variable "r" existiert weder global noch in der Methode.
Eines von beiden musst ändern.
EDIT: Die beiden Variablen "n" und "c" in deiner look-Methode sind unnötig.
Du kannst auch einfach in der ersten for-Schleife
und in der zweitenCode java:1
i < r.length
schreiben.Code java:1
j < r[i].length
Gruß,
Martin
-
c und n stehen nur da wegen copy&paste :P
Ich weiß, dass das genau das Problem. Ich weiß nicht wie ich r definieren soll! Mir fehlt einfach die Grundlage dafür...
Ich kann doch nicht einfach...
...da hinhauen, dann gibt er mir auf jedenfall eine NullPointerException als FehlerPHP-Code:Room[][] r;
Ein Moment ich poste gleich.. ich glaube der Fehler liegt beiGruß New2JavaPHP-Code:Room[][] r = new Room[n][n];
Geändert von New2Java (20.11.10 um 20:49 Uhr)
-
Jetzt klappt erst mal alles! Ich weiß wohl doch mehr als ich mir zu traue..

Danke Leute!PHP-Code:public class Area
{
private int id;
private String name;
private String description;
private Room room;
private String[][] Room[][];
Room[][] r;
public Area(int id, String name, String description)
{
this.id = id;
this.name = name;
this.description = description;
int n = 4;
r = new Room[n][n];
int c = 1;
for (int i=0; i < n; i++)
{
for (int j=0; j < n; j++)
{ c=i*4+j+1;
r[i][j] = new Room(0, "name", "description", i, j, c);
}
}
}
public int id() {return id;}
public String name() {return name;}
public String description() {return description;}
public void look()
{
int n = 4;
int c = 1;
for (int i=0; i < n; i++)
{
for (int j=0; j < n; j++, c++)
{
System.out.println(r[i][j].toString());
}
System.out.println();
}
}
}
MfG New2Java
-
Okay, zurück zum Topic. Folgendes Problem.
Ich erstelle ein neues Objekt "Raum" in der Klasse "Raum" und möchte dieses in einem Array speichern und einem bestimmten Objekt "Area" zu weisen.
Klasse Raum
Dies ist nur ein Beispiel, für r[i][j] bekomme ich es dann auch selbst hin.PHP-Code:private int i;
private int j;
private Area area;
private String[][] Room[][];
Room[][] r;
....
...
public void transfer(Area newArea)
{
area = newArea;
r[1][2] = new Room(0, "Neues", "Objekt", 1, 2, 0);
}
Also: Dieser array r[1][2] existiert schon in der Klasse Area, wie kann ich diesen nun dort überspeichern oder besser übergeben?
Oder warum bekomme ich hier die NullPointerException?
MfG New2JavaPHP-Code:public class Room
{
private int id;
private String name;
private String description;
private int i;
private int j;
private int c;
private Area area;
private String[][] Room[][];
Room[][] r;
public Room(int id, String name, String description, int i, int j, int c)
{
this.id = id;
this.name = name;
this.description = description;
this.i = i;
this.j = j;
this.c = c;
}
public int id() {return id;}
public String name() {return name;}
public String description() {return description;}
public int i() {return i;}
public int j() {return j;}
public int c() {return c;}
public Room[][] Getr() {return r;}
@Override
public String toString(){
return
"[" + id() + "]"
+ " [" + name() + "]"
+ " [" + description() + "]"
+ " [" + i() + "/" + j() + "]"
+ " [" + c() + "]";
}
public void transfer(Area newArea)
{
area = newArea;
r[1][2] = new Room(0, "Neues", "Objekt", 1, 2, 0);
System.out.println("Ihr habt den Raum einer neuen Area zugeordnet.");
}
}
Geändert von New2Java (20.11.10 um 22:34 Uhr)
-
Hi,
Die NullPointer bekommst du, weil du in der transfer-Methode versuchst, auf eine Stelle der Room-Matrix zuzugreifen, die Variable "r" aber noch gar nicht erzeugt wurde.
Was ist denn area? Eine Liste? Oder wie willst den Raum darin speichern?
Übrigens: Setz das Ganze mal in Java-Code-Tags, dann stehen Zeilenangaben da
Gruß
-
Die r[i][j] werden in Area erzeugt.
Hier mal meine Codes:
Code java: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 53 54 55
public class Area { private int id; private String name; private String description; private Room room; private String[][] Room[][]; private Room[][] r; public Area(int id, String name, String description) { this.id = id; this.name = name; this.description = description; int n = 4; r = new Room[n][n]; int c = 1; for (int i=0; i < n; i++) { for (int j=0; j < n; j++) { c=i*4+j+1; r[i][j] = new Room(0, "name", "description", i, j, c); this.r = r; } } } public int id() {return id;} public String name() {return name;} public String description() {return description;} public Room[][] Getr() {return r;} public void look() { int n = 4; int c = 1; for (int i=0; i < n; i++) { for (int j=0; j < n; j++, c++) { System.out.println(r[i][j].toString()); } System.out.println(); } } }
Code java: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 53 54 55 56 57 58
public class Room { private int id; private String name; private String description; private int i; private int j; private int c; private Area area; private String[][] Room[][]; private Room[][] r; public Room(int id, String name, String description, int i, int j, int c) { this.id = id; this.name = name; this.description = description; this.i = i; this.j = j; this.c = c; } public int id() {return id;} public String name() {return name;} public String description() {return description;} public int i() {return i;} public int j() {return j;} public int c() {return c;} @Override public String toString(){ return "[" + id() + "]" + " [" + name() + "]" + " [" + description() + "]" + " [" + i() + "/" + j() + "]" + " [" + c() + "]"; } public void transfer(Area newArea) { area = newArea; r[1][2] = new Room(0, "Neues", "Objekt", i, j, 0); System.out.println("Ihr habt den Raum einer neuen Area zugeordnet."); } }
Ich möchte eigentlich eine Gruppe von Array-Objekten in beiden Klassen nutzen.
Edit: Achja bei area.r[1][2] bekomme ich den "has private access in" Wahrscheinlich muss ich r in Area um deklarieren, so dass es zugänglich ist, aber wie?
Klasse "Area": Erzeugt ein Objekt "Area" das 16 Objekte "Room" enthält.
Klasse "Room": Erzeugt ein freies Objekt "Room" und soll nun die Methode bekommen, einer Area zugewiesen zu werden und das Objekt "Room", was vorher in der Area an Position (i,j) war überschreiben.
MfG New2JavaGeändert von New2Java (21.11.10 um 12:25 Uhr)
-
Okay, ich hätte in area einfach private auf public setzen müssen ~~ und dann area.r[i][j] und alles klappt.
Code java:1
public Room[][] r;
Ähnliche Themen
-
C# - Kann eine Klasse sich selbst an eine andere übergeben?
Von Aero13 im Forum .NET DatenverwaltungAntworten: 2Letzter Beitrag: 12.01.11, 15:23 -
Innerhalb einer Klasse eine Instanz einer anderen Klasse
Von HackerNeo im Forum VisualStudio & MFCAntworten: 1Letzter Beitrag: 17.11.09, 13:08 -
Klasse in einer Klasse erstellen
Von xloouch im Forum PHPAntworten: 3Letzter Beitrag: 18.06.08, 12:21 -
Variablenwert von einer Klasse in eine andere Klasse geben
Von spiderman21 im Forum JavaAntworten: 2Letzter Beitrag: 02.01.07, 16:27 -
Per Klick eine andere Klasse ausführen!
Von fatmc im Forum JavaAntworten: 7Letzter Beitrag: 13.06.05, 12:34





Zitieren
Login





