Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: taulukon koko

Sivun loppuun

tkok [01.12.2008 18:33:12]

#

Hei,

Jos määrittelen 10x10 boolean taulukon näin:
Javaa:

boolean[][] Tekoaly0= {
		{false,false,false,false,false,false,false,false,false,false},
		{false,false,false,true,true,false,false,false,false,false},
		{false,false,false,false,false,false,false,false,false,false},
		{false,false,false,false,false,false,false,false,false,false},
		{false,false,false,false,false,false,false,false,false,false},
		{false,false,true,false,false,true,false,false,false,false},
		{false,false,true,false,false,true,false,false,false,false},
		{true,false,false,false,false,false,false,false,false,false},
		{true,false,true,true,false,false,false,false,false,false},
		{false,false,false,false,false,false,false,false,false,false}
							};

ja haluaisin myöhemmin lisätä taulukkoon sarakkeita tai rivejä jotka sisältävät pelkkiä falseja, kuinka se tehdään?, siis kuinka laajennan taulukkoa myöhemmin?

os [01.12.2008 18:38:17]

#

Käytä listaa

tkok [01.12.2008 18:43:12]

#

Ja näköjään huonoa otsikkoa ei voi muokata jälkikäteen ilman moderaattorin oikeuksia :( (mod. paransi otsikkoa)

Antti Laaksonen [01.12.2008 18:46:30]

#

Tietääkseni Javan taulukon koko on kiinteä eikä sen kokoa voi muuttaa myöhemmin. Voit kuitenkin varata uuden suuremman taulukon ja kopioida sinne vanhan tiedot tai käyttää os:n neuvon mukaisesti jotain muuta tietorakennetta.

Tiedätkö etukäteen, kuinka suuri taulukko voi olla korkeintaan? Silloin helppo ratkaisu on varata heti aluksi tarpeeksi suuri taulukko.

tkok [01.12.2008 18:49:42]

#

Antti Laaksonen kirjoitti:

Tiedätkö etukäteen, kuinka suuri taulukko voi olla korkeintaan? Silloin helppo ratkaisu on varata heti aluksi tarpeeksi suuri taulukko.

Tehtävänä oli tehdä laivanupotuspeli, jonka taulun koko on ainakin 81 ruutua, nyt sain sen kuitenkin valmiiksi ja rupesin väkertää versiota jossa taulukon koon saisi itse määrätä. mutta toki voisin laittaa hyvän maun mukaisen ylärajan taulukolle, jolloin ongelma ratkeaisi. Näin teen.

os [01.12.2008 18:50:42]

#

Listaa voit käyttää esimerkiksi näin:

// import java.util.ArrayList;

// --- Jäsenet

int rivit = 0;
int sarakkeet = 0;

// Lista listoja
ArrayList< ArrayList<Boolean> > t = new ArrayList< ArrayList< Boolean > >();

// --- Metodit

boolean haeAlkio(int rivi, int sarake)
{
   return t.elementAt(rivi).elementAt(sarake);
}

void asetaAlkio(int rivi, int sarake, boolean arvo)
{
   return t.elementAt(rivi).set(sarake, arvo);
}

void lisaaRivi(int paikka)
{
   // Lisätään uusi lista
   ArrayList< Boolean > rivi = new ArrayList<Boolean>();
   for (int i=0; i<sarakkeet; i++) rivi.add(false);
   t.add(paikka, rivi);
   rivit++;
}

void lisaaSarake(int paikka)
{
   // Lisätään jokaiseen listaan uusi alkio
   for (ArrayList<Boolean> rivi : t)
      rivi.add(paikka,false);

   sarakkeet++;
}

Miksi laivanupotuspelin ruudukon kokoa muuten pitäisi voida muuttaa jälkeenpäin? Mikset vain alusta jokaisen pelin alussa oikeankokoista taulukkoa?

tkok [01.12.2008 19:06:58]

#

os kirjoitti:

Miksi laivanupotuspelin ruudukon kokoa muuten pitäisi voida muuttaa jälkeenpäin? Mikset vain alusta jokaisen pelin alussa oikeankokoista taulukkoa?

Alunperin taulukot olivat 10x10 kokoisia.
Tein peliin kaksi erinlaista ja eri tasoista teko"älyä", toisen jossa laivat on aina samoin ja toisen jossa arvotaan kymmenen paikka joihin laivat sijoitetaan. Nyt kun halusin tehdä pelikentän koosta muutettavan kokoisen, ajattelin säilyttää tämän 2 vaihtoehtoisen tekoälyn, kuitenkin toinensen esimerkki taulu oli 10x10 ja päätin että jos pelaaja valitsee isomman kenttä koon, voisi ohjelma lisätä tarvittavat rivit ja sarakkeet Tekoaly0 taulukkoon joka myöhemmin (jos tämä taso 0 valitaan) kopioidaan AIlaivat-tauluun.

EDIT: ehkä hölmöä puhua tekoälystä tässä tilanteessa.Tekoäly tason valinta vaikuttaa myös tietokoneen ampumis koordinaattien valintaan.

os [01.12.2008 20:36:19]

#

Joo, on kyllä tosiaan aika "tason nolla" vastustaja, jos laivat on aina samassa paikassa :)

Metabolix [01.12.2008 22:52:01]

#

Vastaavan taulukon saa helposti aikaan, kun käyttääkin tavallista yksiulotteista taulukkoa kaksiulotteisena kaavalla indeksi = x + leveys * y. Tällöin joutuu tietenkin itse tekemään mahdolliset tarkistukset siitä, että luvut ovat kunnossa, ja säilyttämään tuon leveyden jossain. Taulukonhan saa luotua näin:

boolean [] t;
t = new boolean[leveys * korkeus];

Edit. Jaa, ja näköjään myös kaksiulotteinen onnistuu Javassa suoraan:

boolean [][] t;
t = new boolean[leveys][korkeus];

Jackal von ÖRF [02.12.2008 01:24:48]

#

Kaksiuloitteisen taulukon tekeminen on vielä helpompaa, koska ei tarvitse laskea indeksejä käsipelillä:

boolean[][] t = new boolean[leveys][korkeus];

Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta