tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von zeja
ERLEDIGT
JA
ANTWORTEN
2
ZUGRIFFE
359
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    lara23 lara23 ist offline Rookie
    Registriert seit
    Dec 2008
    Beiträge
    5
    Hallo,

    ich habe das Problem, dass bei meinem Array in jedem Feld die gleichen Werte stecken. Habe schon danach gesucht, aber mehr als eine Vermutung, dass es an einem "static" liegt, habe ich nicht dazu gefunden.

    Hier die Klasse, von der ein Array erzeugt werden soll:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    public class Field
    {
        boolean blocked=false;     //nicht begehbare felder
        boolean barred=false;       //versperrte felder
        int xLow;
        int xHigh;
        int yLow;
        int yHigh;
    }

    Und hier die Methode (aus der Klasse Playground), mit der ich die Werte in das Array speichern will:
    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 static Field[][] generateGrid()
        {
            int klength=20;
            Random rnd=new Random();
            Field[][] pgPrivate=new Field[13][11];
            Field aktField=new Field();
            for(int i=0;i<=12;i++)
                for(int j=0;j<=10;j++)
                {
                    aktField.xLow=i*klength;
                    aktField.xHigh=(i+1)*klength;
                    aktField.yLow=i*klength;
                    aktField.yHigh=(i+1)*klength;
                    
                    if((i%2==1)&&(j%2==1))
                    {
                        aktField.blocked=true;
                    }
                    else
                    {
                        //Entscheidet, ob ein Feld verbarrikadiert wird
                        int block = Math.abs(rnd.nextInt() % 10);
                        if (block > 3)
                            if(((i!=0)&&(j!=0))&&(i!=0)&&(j!=1)&&(i!=1)&&(j!=0))
                                aktField.barred=true;
                    }
                    pgPrivate[i][j]=aktField;
                }
            return pgPrivate;
        }

    Und das ist nun das Array, in dem alle Werte in jedem Feld gleich sind:
    Code :
    1
    
    Field[][] p=Playground.generateGrid();

    Ich dachte schon, dass es vielleicht an dem aktField liegt, aber mit
    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
    
    public static Field[][] generateGrid()
        {
            int klength=20;
            Random rnd=new Random();
            Field[][] pgPrivate=new Field[13][11];
            for(int i=0;i<=12;i++)
                for(int j=0;j<=10;j++)
                {
                    pgPrivate[i][j].xLow=i*klength;
                    pgPrivate[i][j].xHigh=(i+1)*klength;
                    pgPrivate[i][j].yLow=i*klength;
                    pgPrivate[i][j].yHigh=(i+1)*klength;
                    
                    if((i%2==1)&&(j%2==1))
                    {
                        pgPrivate[i][j].blocked=true;
                    }
                    else
                    {
                        //Entscheidet, ob ein Feld verbarrikadiert wird
                        int block = Math.abs(rnd.nextInt() % 10);
                        //In 60% der Fälle wird Feld verbarrikadiert
                        if (block > 3)
                            if(((i!=0)&&(j!=0))&&(i!=0)&&(j!=1)&&(i!=1)&&(j!=0))
                                pgPrivate[i][j].barred=true;
                    }
                }
            return pgPrivate;
        }
    bekomme ich eine NullPointerException.

    Schonmal vielen Dank für eure Hilfe.
    MfG
     

  2. #2
    Avatar von zeja
    zeja zeja ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2006
    Beiträge
    2.962
    Code java:
    1
    
    pgPrivate[i][j] = new Field();

    fehlt dir. Daher steht in dem Array an Position i/j nichts drin, und du bekommst eine NullPointerException beim Zugriff.

    Problem an der oberen Lösung ist wiederum, dass du dir nur ein aktField VOR den Schleifen angelegt hast. Damit hast du nur ein Objekt welches du immer wieder veränderst und an die unterschiedlichen Stellen im Array schreibst. Du hast nicht nur die gleichen Werte, sondern die selben.
    lara23 bedankt sich. 

  3. #3
    lara23 lara23 ist offline Rookie
    Registriert seit
    Dec 2008
    Beiträge
    5
    Hey,

    vielen Dank für deine Antwort.
    Ich dachte eigentlich, dass ich das schon probiert hatte - aber da war wohl irgendwas falsch.
    Jetzt geht es auf jeden Fall, vielen Dank!!
     

Ähnliche Themen

  1. Sätze mit gleichen Werten finden und andere Ausschliessen
    Von xrax im Forum Relationale Datenbanksysteme
    Antworten: 6
    Letzter Beitrag: 20.09.10, 13:13
  2. Antworten: 3
    Letzter Beitrag: 05.12.07, 04:56
  3. Antworten: 2
    Letzter Beitrag: 19.07.05, 11:53
  4. Datensätze mit gleichen werten werden nicht gespeichert
    Von die-muecke im Forum Relationale Datenbanksysteme
    Antworten: 4
    Letzter Beitrag: 10.08.04, 20:47
  5. Zwei-Tabellen, aber mit gleichen Werten
    Von Feldhofe im Forum PHP
    Antworten: 8
    Letzter Beitrag: 28.06.02, 15:28