tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
14
ZUGRIFFE
865
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    New2Java New2Java ist offline Mitglied
    Registriert seit
    Nov 2010
    Beiträge
    12
    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 mit
    Code :
    1
    
    int c= j*4+i+1
    als {1;2;3;4;...} eindeutig erkennen.


    Gruß New2Java
     

  2. #2
    MiMi MiMi ist offline Mitglied Smaragd
    Registriert seit
    Sep 2007
    Beiträge
    1.177
    Du erstellst sogar 2 neue Room Objekte.
    Code java:
    1
    2
    
     r[i] = new Room(0, "0", "0",i,j);
         System.out.print(new Room(0, "0", "0",i,j));
    somit ist das in der Ausgabe ein anderes als das was du ins Array steckst.
    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.
    Code java:
    1
    
    System.out.print("Bla: " + bla + " Blub: " + blub);
    Und dann nach deiner Zuweisung im Array das neue Objekt ausgeben mit der toString Methode
    Code java:
    1
    2
    
     r[i] = new Room(0, "0", "0",i,j);
         System.out.print((r[i]).toString());
    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 kannst
    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:
    Code java:
    1
    
    System.out.println("Test :)");
    Tabs sind uebrigens keine Feinde :)
    Der "Erledigt Button" beisst net :) Und der "Danke Button" ist auch nicht nur zur zierde
    Danke :D

  3. #3
    New2Java New2Java ist offline Mitglied
    Registriert seit
    Nov 2010
    Beiträge
    12
    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[][] = new Room[5][5]; 
         for (
    int i=04i++) {
         for (
    int j=04j++)  {
         
    int cj*4+i+1;
         
    r[i][j] = new Room(0"0""0",i,j);
         
    System.out.print("[Room " "/"j"] mit id:" "  ");
         
    System.out.print((r[i][j]).toString());

                                    }
         
    System.out.println();
                                   }
        } 

    PHP-Code:
    System.out.print((r[i][j]).toString()); 
    gibt das gleiche aus wie
    PHP-Code:
    System.out.print((r[i][j])); 
    nämlich
    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 AString BString Cint Iint J)
        {
            
    A;
            
    B;
            
    C;
            
    I;
            
    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.
     

  4. #4
    Tsunamii Tsunamii ist offline Mitglied Silber
    Registriert seit
    Jul 2009
    Beiträge
    75
    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
    ....
    Mach dir keine Sorgen die Ausgabe passt so wie sie ist.
    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.
     

  5. #5
    MiMi MiMi ist offline Mitglied Smaragd
    Registriert seit
    Sep 2007
    Beiträge
    1.177
    Zitat Zitat von MiMi Beitrag anzeigen
    DDu koenntest in deiner Room Klasse eine toString Methode erstellen. In der du dann die Variablen ausgibst.
    Code java:
    1
    
    System.out.print("Bla: " + bla + " Blub: " + blub);
    [...]
    Zitat Zitat von New2Java Beitrag anzeigen
    Muss ich erst eine Funktion toString() erstellen, eigentlich gibt die Funktion toString() das Objekt doch als String aus und ist in Java implementiert?
    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:
    Code java:
    1
    
    System.out.println("Test :)");
    Tabs sind uebrigens keine Feinde :)
    Der "Erledigt Button" beisst net :) Und der "Danke Button" ist auch nicht nur zur zierde
    Danke :D

  6. #6
    New2Java New2Java ist offline Mitglied
    Registriert seit
    Nov 2010
    Beiträge
    12
    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.


    PHP-Code:
    public class Area
    {
        private 
    int a;
        private 
    String bla;
        private 
    String blub;
        private 
    int i;
        private 
    int j;
        private 
    int c;
        

        
    Area(int aString blaString blubint iint jint c){
            
    this.a;
            
    this.bla bla;
            
    this.blub blub;
            
    this.i;
            
    this.j;
            
    this.c;
        }


        @
    Override
        
    public String toString(){
            return 
              
    "Objektnummer:[" "]" 
            
    "  Name:[" bla "]" 
            
    "  Beschreibung:[" blub "]"
            
    "  Koordinaten[" "/" "]"
            
    "  ID in Area:[" "]";
        }


        public static 
    void main(String[] args)
        {
           
         
    Area[][] = new Area[5][5]; 
         for (
    int i=04i++) {
         for (
    int j=04j++)  {
         
    int cj*4+i+1;
         
    r[i][j] = new Area(0"Name""Desc"ijc);

         
    System.out.print((r[i][j]).toString());

                                    }
         
    System.out.println();
                                   }
        }



    Gruß New2Java
    Geändert von New2Java (20.11.10 um 15:24 Uhr)
     

  7. #7
    New2Java New2Java ist offline Mitglied
    Registriert seit
    Nov 2010
    Beiträge
    12
    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 a1String b1String d1int i1int j1int c1)

        {
            
    this.a1;
            
    this.b1;
            
    this.d1;
            
    this.i1;
            
    this.j1;
            
    this.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[][] = new Room[5][5];
         
    int c 1;
         for (
    int i=04i++) {
         for (
    int j=04j++, c++)  {
         
    r[i][j] = new Room(0"Name""Desc"ijc);

         
    System.out.println(r[i][j].toString());

                                    }
         
    System.out.println();
                                   }
        }




    Dann werde ich mal als nächstes probieren auf die einzelnen Objekte zuzugreifen.

    Gruß New2Java
    Geändert von New2Java (20.11.10 um 16:53 Uhr)
     

  8. #8
    New2Java New2Java ist offline Mitglied
    Registriert seit
    Nov 2010
    Beiträge
    12
    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 idString nameString description)

        {
            
    this.id id;
            
    this.name name;
            
    this.description description;


                    
    int n 4;  
                    
    Room[][] = new Room[n][n];
                    
    int c 1;
                    for (
    int i=0ni++) 
                    {
                            for (
    int j=0nj++)  
                            {    
    c=i*4+j+1;
                                 
    r[i][j] = new Room(0"name""description"ijc);
                            }
                    }
        }
        
        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=0ni++) 
                    {
                            for (
    int j=0nj++, 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
     

  9. #9
    Maddin Maddin ist offline Mitglied Silber
    Registriert seit
    Jul 2010
    Beiträge
    71
    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
    Code java:
    1
    
    i < r.length
    und in der zweiten
    Code java:
    1
    
    j < r[i].length
    schreiben.

    Gruß,
    Martin
     

  10. #10
    New2Java New2Java ist offline Mitglied
    Registriert seit
    Nov 2010
    Beiträge
    12
    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...

    PHP-Code:
    Room[][] r
    ...da hinhauen, dann gibt er mir auf jedenfall eine NullPointerException als Fehler

    Ein Moment ich poste gleich.. ich glaube der Fehler liegt bei
    PHP-Code:
    Room[][] = new Room[n][n]; 
    Gruß New2Java
    Geändert von New2Java (20.11.10 um 20:49 Uhr)
     

  11. #11
    New2Java New2Java ist offline Mitglied
    Registriert seit
    Nov 2010
    Beiträge
    12
    Jetzt klappt erst mal alles! Ich weiß wohl doch mehr als ich mir zu traue..

    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 idString nameString description)

        {
            
    this.id id;
            
    this.name name;
            
    this.description description;
            

                    
    int n 4;  
                    
    = new Room[n][n];
                    
    int c 1;
                    for (
    int i=0ni++) 
                    {
                            for (
    int j=0nj++)  
                            {    
    c=i*4+j+1;
                                 
    r[i][j] = new Room(0"name""description"ijc);
                            }
                    }
        }
        
        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=0ni++) 
                    {
                            for (
    int j=0nj++, c++)  
                            {
                                
    System.out.println(r[i][j].toString());
                            }
                         
    System.out.println();
                    }
        }


    Danke Leute!

    MfG New2Java
     

  12. #12
    New2Java New2Java ist offline Mitglied
    Registriert seit
    Nov 2010
    Beiträge
    12
    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
    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"120);
        } 
    Dies ist nur ein Beispiel, für r[i][j] bekomme ich es dann auch selbst hin.

    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?

    PHP-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 idString nameString descriptionint iint jint 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,  20);
            
    System.out.println("Ihr habt den Raum einer neuen Area zugeordnet.");
        }
        

        


    MfG New2Java
    Geändert von New2Java (20.11.10 um 22:34 Uhr)
     

  13. #13
    Maddin Maddin ist offline Mitglied Silber
    Registriert seit
    Jul 2010
    Beiträge
    71
    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ß
     

  14. #14
    New2Java New2Java ist offline Mitglied
    Registriert seit
    Nov 2010
    Beiträge
    12
    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 New2Java
    Geändert von New2Java (21.11.10 um 12:25 Uhr)
     

  15. #15
    New2Java New2Java ist offline Mitglied
    Registriert seit
    Nov 2010
    Beiträge
    12
    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

  1. C# - Kann eine Klasse sich selbst an eine andere übergeben?
    Von Aero13 im Forum .NET Datenverwaltung
    Antworten: 2
    Letzter Beitrag: 12.01.11, 15:23
  2. Innerhalb einer Klasse eine Instanz einer anderen Klasse
    Von HackerNeo im Forum VisualStudio & MFC
    Antworten: 1
    Letzter Beitrag: 17.11.09, 13:08
  3. Klasse in einer Klasse erstellen
    Von xloouch im Forum PHP
    Antworten: 3
    Letzter Beitrag: 18.06.08, 12:21
  4. Antworten: 2
    Letzter Beitrag: 02.01.07, 16:27
  5. Antworten: 7
    Letzter Beitrag: 13.06.05, 12:34