[JAVA] array ophalen

Pagina: 1
Acties:
  • 261 views sinds 30-01-2008

  • Vincent17
  • Registratie: Juni 2001
  • Laatst online: 24-05 18:40
ik heb 2 classes, nou wil ik uit de ene classe de array implementeren in de andere classe.

De classe waar ik de array uit wil halen:

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
public class Board { 
     
    int aboard[] = new int[9]; 
     
    public void Board() { 
         
        for (int i = 0; i < 10; i++) 
            aboard[i]=0; 
    } 
     
    public int[] get_array() { 
         
        return aboard; 
    } 
     
    public void put_array(int positie, int token) { 
         
        if(token == 1) { 
             
            aboard[positie] = 1; 
             
        } 
         
        if(token == 2) { 
             
            aboard[positie] = 2; 
             
        } 
         
    } 
     
}


Klasse waar ik de code wil implementeren:
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
public class WinRule 
{ 
         
    int Leeg = 0;                                           // niet ingevuld hokje 
    int MAXH = 3;                                           // aantal rijen 
    int MAXV = 3;                                           // aantal kolommen 
    boolean WIN = false;                                   // default is niet gewonnen 
     
    int positie = get_Array();               // HIER WIL IK DE ARRAY OPHALEN 

    public boolean WinRule() 
    { 
    
    WIN = false; 
     
     
                                                   // waarde: 0= leeg, 1 = X, 2 = O (rondje) 
    int start = 0;                                 // start op de 1ste positie 


    while (start < 9)   
    { 
       if (positie[start] != Leeg) 
          { 
              if (positie[start] == positie[start+1])             // horizontale rij gewonnen? 
                 {  if (positie[start+1] == positie[start+2]) 
                    { 
                       WIN = true;                                      // gewonnen !!!!! 
                       break; 
                    } 
                 } 
          }                                                                       // einde IF        
    start += MAXH;                                                         // volgende rij 
    }                                                                       // end while 
     
     
    start = 0; 
    while (start < (MAXH))                                                         // controle van de kolommen 
    { 
       if (positie[start] != Leeg) 
          { 
              if (positie[start] == positie[start+MAXH])                            // kolom gewonnen? 
                 {  if (positie[start+MAXH] == positie[start+2*MAXH]) 
                    { 
                       WIN = true;                                              // gewonnen !!!!! 
                       break; 
                    } 
                 } 
          }                                                                                 // einde IF        
    start += 1;                                                                              // volgende kolom 
    }                                                                                       // end while 
    start = 0; 
    { 
      if (positie[start] != Leeg) 
         { 
          if (positie[start] == positie[start+MAXH+1])                            // diagonaal gewonnen? 
                 {  if (positie[start+MAXH+1] == positie[start+2*(MAXH+1)]) 
                    { 
                       WIN = true;                                              // gewonnen !!!!! 
                    }                   
                  }     
           }       
      }                                         
       
    start = (MAXH-1); 
    { 
      if (positie[start] != Leeg) 
         { 
          if (positie[start] == positie[start+MAXH-1])                            // diagonaal gewonnen? 
                 {  if (positie[start+MAXH-1] == positie[start+(MAXH+1)]) 
                    { 
                       WIN = true;                                              // gewonnen !!!!! 
                    }                   
                  }     
           }       
      }                              
    return WIN; 
   

}                                                                                               // einde WinRule 
    
    

}


Mijn dank grenst aan hondsdolheid

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Waarom gebruik je je Bord niet gewoon? Je kunt gewoon een instantie aanmaken van Bord en daar get_array op aanroepen hoor (get_array() dus, niet get_Array(), dat maakt uit in Java). Maar dan moet je wel een instantie hebben.
Verder: Wat heb je al geprobeerd, wat lukte wel/wat niet enz, want dit moet je toch wel zelf kunnen zien als je enkele dingen van java hebt doorgelezen?

[ Voor 26% gewijzigd door Glimi op 14-01-2004 14:53 ]


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Je bent inconsequent met int en int[] bezig.
want bij:
code:
9
int positie = get_Array();

Krijg je een int[] terug die je in een int wil stoppen.

Overig commentaar:
• Inconsequent met hoofdletters, zowel met aanroepen van dezelfde methodes, als met de naamgeveing. De conventie is namelijk om variabelen die geheel in caps zijn geschreven constanten te laten zijn.
• MAXH en MAXV lijken wel constanten te zijn, maar zet er dan ook static voor.
• ipv sommige breaks kan je volgens mij meteen al return true doen...

[ Voor 57% gewijzigd door Voutloos op 14-01-2004 15:13 ]

{signature}


  • Rac-On
  • Registratie: November 2003
  • Niet online
je zult eerst een instantie aan moeten maken van het type board. Daarna kan je daar de funtie get array op afroepen.

of je maakt board static, dat kan ook, dan hoef je er geen instantie van aan te maken, maar kan je de methode aanroepen op de class zelf...

doet niet aan icons, usertitels of signatures


  • JeroenTheStig
  • Registratie: Mei 2000
  • Laatst online: 05:52
Ik zie dat je Board classe een beetje gevaarlijk in elkaar is gedrukt. Als ik de methode put_array() bekijk, dan zie ik dat er totaal niet gecontroleerd wordt of de positie geen arrayOutOfBoundsException veroorzaakt.

In de WinRule klasse wil je gebruik maken van de Board, alleen je vergeet hier een instantie van te maken. Ook hier zal ik een aanpassing maken, en ik denk dat je dan wel weer verder kunt.


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
public class Board { 
     
    int aboard[] = new int[9]; 
     
    public void Board() { 
         
        for (int i = 0; i < aboard.length; i++)     // je had hier 10 staan, dat levert een indexoutofbounds exception op. 
            aboard[i]=0; 
    } 
     
    public int[] get_array() { 
         
        return aboard; 
    } 
     
    public void put_array(int positie, int token) { 
        if (positie > aboard.length()) throw new IndexOutOfBoundsException("vauwtje :P ");  
        // nja, je begrijpt t probleem hoop ik :)
        if(token == 1) { 
             
            aboard[positie] = 1; 
             
        } 
         
        if(token == 2) { 
             
            aboard[positie] = 2; 
             
        } 
         
    } 
     
}



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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
public class WinRule 
{ 
         
    int Leeg = 0;                                           // niet ingevuld hokje 
    int MAXH = 3;                                           // aantal rijen 
    int MAXV = 3;                                           // aantal kolommen 
    boolean WIN = false;                                   // default is niet gewonnen 
    Board board; 
    int[] positie;               // HIER WIL IK DE ARRAY OPHALEN 
 

    public WinRule() {   // constructor, initialiseer hier je board 
      board = new Board();
     
    }

     public void getArray() {  // haal je array op
        positie = board.get_array();
    }

    public boolean WinRule() 
    { 
    
    WIN = false; 
     
     
                                                   // waarde: 0= leeg, 1 = X, 2 = O (rondje) 
    int start = 0;                                 // start op de 1ste positie 


    while (start < 9)   
    { 
       if (positie[start] != Leeg) 
          { 
              if (positie[start] == positie[start+1])             // horizontale rij gewonnen? 
                 {  if (positie[start+1] == positie[start+2]) 
                    { 
                       WIN = true;                                      // gewonnen !!!!! 
                       break; 
                    } 
                 } 
          }                                                                       // einde IF        
    start += MAXH;                                                         // volgende rij 
    }                                                                       // end while 
     
     
    start = 0; 
    while (start < (MAXH))                                                         // controle van de kolommen 
    { 
       if (positie[start] != Leeg) 
          { 
              if (positie[start] == positie[start+MAXH])                            // kolom gewonnen? 
                 {  if (positie[start+MAXH] == positie[start+2*MAXH]) 
                    { 
                       WIN = true;                                              // gewonnen !!!!! 
                       break; 
                    } 
                 } 
          }                                                                                 // einde IF        
    start += 1;                                                                              // volgende kolom 
    }                                                                                       // end while 
    start = 0; 
    { 
      if (positie[start] != Leeg) 
         { 
          if (positie[start] == positie[start+MAXH+1])                            // diagonaal gewonnen? 
                 {  if (positie[start+MAXH+1] == positie[start+2*(MAXH+1)]) 
                    { 
                       WIN = true;                                              // gewonnen !!!!! 
                    }                   
                  }     
           }       
      }                                         
       
    start = (MAXH-1); 
    { 
      if (positie[start] != Leeg) 
         { 
          if (positie[start] == positie[start+MAXH-1])                            // diagonaal gewonnen? 
                 {  if (positie[start+MAXH-1] == positie[start+(MAXH+1)]) 
                    { 
                       WIN = true;                                              // gewonnen !!!!! 
                    }                   
                  }     
           }       
      }                              
    return WIN; 
   

}                                                                                               // einde WinRule 
    
    

}
Mijn dank grenst aan hondsdolheid
:o

[ Voor 3% gewijzigd door JeroenTheStig op 14-01-2004 15:03 ]


  • Stimpy001
  • Registratie: Maart 2000
  • Laatst online: 16-09-2025
Glimi schreef op 14 januari 2004 @ 14:52:
Waarom gebruik je je Bord niet gewoon? Je kunt gewoon een instantie aanmaken van Bord en daar get_array op aanroepen hoor (get_array() dus, niet get_Array(), dat maakt uit in Java). Maar dan moet je wel een instantie hebben.
Ik heb al een tijdje niets meer gedaan met Java maar met het bovenstaande ben ik het helemaal eens.

Zorg ook gewoon voor een duidelijke naamgeving. get_array() lijkt inderdaad heel veel op get_Array() van Java zelf. Nu is het nog te overzien maar als je straks programma's hebt met meer code (lees meerdere classes), dan gaat dit problemen geven. Je weet dan namelijk niet meer waar je het over hebt.

Mijn tip: maak inderdaad een instantie aan van Board en hernoem get_Array() naar getBoardLayout o.i.d. want volgens mij wil je gewoon de lay-out van het board (zie hier de logica van de instantie) terugkrijgen.

[ Voor 3% gewijzigd door Stimpy001 op 14-01-2004 15:05 . Reden: Natuurlijk weer spelfouten ]

Wat jij vergeten bent, hoeft voor mij geen spoed te zijn.


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
rac-on schreef op 14 januari 2004 @ 14:55:
of je maakt board static, dat kan ook, dan hoef je er geen instantie van aan te maken, maar kan je de methode aanroepen op de class zelf...
Static methodes kun je niet overriden in overervende classes. Probeer ze dan ook te vermijden als het kan, want het sloopt je uitbreidbaarheid. Alleen bij echte toolclasses zou ik ze willen aanraken (bijv Arrays, Collections ed)
BoKToR schreef op 14 januari 2004 @ 15:00:
Ik zie dat je Board classe een beetje gevaarlijk in elkaar is gedrukt. Als ik de methode put_array() bekijk, dan zie ik dat er totaal niet gecontroleerd wordt of de positie geen arrayOutOfBoundsException veroorzaakt.
En nu gooi je nog steeds een OutOfBounds-exceptie? Wat is het verschil dan? Gooi gewoon of een IllegalArgumentException als je het wilt wrappen, of gebruik het liefst nog een collection, waar je al dat gezeur niet hebt.
Verder worden alleen de waardes 1 en twee aangenomen als token: waarom worden die niet gecontroleerd dan?

Topicstarter
'Magic'values zijn een slecht ding. Weet jij nog wat 1 en twee zijn over twee weken? Maak dan gewoon constantes waarin je het aanduid met een naam.

  • JeroenTheStig
  • Registratie: Mei 2000
  • Laatst online: 05:52
Glimi schreef op 14 januari 2004 @ 15:06:
[...]

Static methodes kun je niet overriden in overervende classes. Probeer ze dan ook te vermijden als het kan, want het sloopt je uitbreidbaarheid. Alleen bij echte toolclasses zou ik ze willen aanraken (bijv Arrays, Collections ed)


[...]

En nu gooi je nog steeds een OutOfBounds-exceptie? Wat is het verschil dan? Gooi gewoon of een IllegalArgumentException als je het wilt wrappen, of gebruik het liefst nog een collection, waar je al dat gezeur niet hebt.
Verder worden alleen de waardes 1 en twee aangenomen als token: waarom worden die niet gecontroleerd dan?

Topicstarter
'Magic'values zijn een slecht ding. Weet jij nog wat 1 en twee zijn over twee weken? Maak dan gewoon constantes waarin je het aanduid met een naam.
jep je hebt gelijk. De manier waarop slaat nergens op, en is onvolledig, maar wat ik er mee aan wilde geven is dat de TS moet checken of z'n parameters deugen. En je kunt inderdaad een collection gebruiken, maar ik denk dat de TS nog niet zo ver is.

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
BoKToR schreef op 14 januari 2004 @ 15:11:
jep je hebt gelijk. De manier waarop slaat nergens op, en is onvolledig, maar wat ik er mee aan wilde geven is dat de TS moet checken of z'n parameters deugen. En je kunt inderdaad een collection gebruiken, maar ik denk dat de TS nog niet zo ver is.
Het is ook niet echt 'fout' of iets dergelijks, maar ik hoopte ermee aan te geven dat het geen goed idee is voor de topicstarter om de code over te nemen, niet te begrijpen en het gewoon te laten werken. Daar leert hij niets van en hij kan voor sommige verassingen komen te staan als het opeens iets doet wat hij niet verwacht.

Nouja, rest mij niet meer dan de topicstarter succes te wensen. Nu zal hij zelf aan de slag moeten :)
Pagina: 1

Dit topic is gesloten.