Pages: [1]   Go Down
Print
Author Topic: [risolto]Problema con un esercizio  (Read 713 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Giovanni Di Gregorio
Matricola
*
Offline Offline

Gender: Male
Posts: 56



WWW
« on: 14-12-2011, 16:04:20 »

Ciao a tutti, ho provato a svolgere questo esercizio trovato nelle dispense del professor Cincotti. Il numero 16
Quote
Una scacchiera S di dimensione 100x100 viene rappresentata mediante un array bidimensionale di
boolean in cui ogni posizione o è vuota (false) oppure contiene una pedina (true). Scrivere un
metodo che prenda come parametro formale una scacchiera S, e restituisca in output un boolean che
indichi se la scacchiera contiene almeno due pedine contigue orizzontali o verticali.
Il codice che ho scritto è questo
Code:
import java.lang.Math;
public class Es16
{
public static void main (String[]args)
{
int r=0, c=0, pedina;
boolean Scacchiera[][], risultato=false;
Scacchiera = new boolean [100][100]; //creo la scacchiera
for(r=0; r<=99; r++)//aggiungo le pedine
{
for(c=0; c<=99; c++)
{
pedina = (int)(Math.random()*2);
 //genero un numero da 0 ad 1, se =0 non c'è la pedina, altrimenti c'è la pedina
if(pedina==1)
Scacchiera [r][c] = true;
else
Scacchiera[r][c] = false;
}
c = 0;
}
//controllo le righe
for(r=0; r<=99; r++)
{
for(c=0; c<=99; c++)
{
if(Scacchiera[r][c])
{
int d;
d = c+1;
if((Scacchiera[r][c])&&(Scacchiera[r][d]))
    risultato = true;
c = d;
}
}
c=0;
}
//controllo le colonne
for(c=0; c<=99; c++)
{
for(r=0; r<=99; r++)
{
if(Scacchiera[r][c])
{
int m;
m = r+1;
if((Scacchiera[r][c])&&(Scacchiera[m][c]))
risultato = true;
r = m;
}
}
}
//stampo il risultato
if(risultato)
System.out.print("Ho trovato 2 pedine contigue");
else
System.out.print("Non ho trovato 2 pedine contigue");
}
}
quando lo compilo mi da exit code = 0, ma quando lo eseguo mi da un problema:
Quote
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 100
   at Es16.main(Es16.java:35)
>Exit code: 1
A cosa è dovuto?
« Last Edit: 14-12-2011, 16:31:19 by Giovanni Di Gregorio » Logged
Giovanni Di Gregorio
Matricola
*
Offline Offline

Gender: Male
Posts: 56



WWW
« Reply #1 on: 14-12-2011, 16:27:55 »

Ah capito, l'errore è nel caso in cui la posizione della riga è uguale a 99, io ho messo di incrementarla! Quindi, avrà trovato un true nella posizione 99 ed incremento la riga così da andare fuori dalla matrice! Provo a correggere!
Infatti, adesso funziona!
Code:
import java.lang.Math;
public class Es16
{
public static void main (String[]args)
{
int r=0, c=0, pedina;
boolean Scacchiera[][], risultato=false;
Scacchiera = new boolean [100][100]; //creo la scacchiera
for(r=0; r<=99; r++)//aggiungo le pedine
{
for(c=0; c<=99; c++)
{
pedina = (int)(Math.random()*2);
 //genero un numero da 0 ad 1, se =0 non c'è la pedina, altrimenti c'è la pedina
if(pedina==1)
Scacchiera [r][c] = true;
else
Scacchiera[r][c] = false;
}
}
//controllo le righe
for(r=0; r<=99; r++)
{
for(c=0; c<=99; c++)
{
if((Scacchiera[r][c]==true)&&(c!=99))
{
int d;
d = c+1;
if((Scacchiera[r][c])&&(Scacchiera[r][d]))
    risultato = true;
c = d;
}
}
}
//controllo le colonne
for(c=0; c<=99; c++)
{
for(r=0; r<=99; r++)
{
if((Scacchiera[r][c])&&(r!=99))
{
int m;
m = r+1;
if((Scacchiera[r][c])&&(Scacchiera[m][c]))
risultato = true;
r = m;
}
}
}
//stampo il risultato
if(risultato)
System.out.print("Ho trovato 2 pedine contigue");
else
System.out.print("Non ho trovato 2 pedine contigue");
}
}
Logged
Pages: [1]   Go Up
Print
Jump to: