Pages: [1]   Go Down
Print
Author Topic: Valori contigui matrice  (Read 1276 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Cerberus
Matricola
*
Offline Offline

Posts: 41


« on: 05-10-2011, 14:22:40 »

ciao colleghi, qualcuno è in grado d capire dove cavolo sbajo ? devo implementare questo metodo per forza 4 (trovare quattro valori uguali contigui nelle righe di una matrice)

      
Code:
for (int i=0;i<table.length;i++) {
c=0;
for (int j=0;j<table[0].length-1;j++) {
if (!(table[i][j] == 'O')) {  //se non è una pedina vuota:
if (c==4) fine ="Vince il giocatore "+table[i][j];
if (table[i][j] == table[i][j+1]) c++;
else c=0;
}
}
}
Logged
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.475


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #1 on: 05-10-2011, 18:21:08 »

ciao colleghi, qualcuno è in grado d capire dove cavolo sbajo ?
Sì, ci sono alcuni punti importanti:
ciao
Le parole che iniziano un periodo vanno scritte con la iniziale maiuscola.
in grado d capire
Qui hai dimenticato di scrivere la "i" dopo la "d" per intendere "di".
dove cavolo sbajo ?
"j"->"gli".

Fuori dalla battuta ( ), gli errori nel codice sono che:
- il for più interno ha come condizione di uscita il confronto fra "j" e la lunghezza della "prima" riga (non della riga "i-esima" (hai supposto che la matrice fosse quadrata, ma in generale questo è non vero, quindi dovresti fare un controllo apposito per evitare che si sollevi una ArrayIndexOutOfBoundsException).
- il controllo se "c==4" viene fatto "prima" di controllare se un eventuale pedina è contigua alle altre già contate, perciò "c==4" sarà vero solo se ci sono almeno 5 pedine consecutive uguali (ad esempio prima ce n'erano 3, spazio vuoto, e 1, e l'utente inserisce la 5ª fra questi due gruppi). Il controllo andrebbe fatto dopo .

Buona sera .
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Cerberus
Matricola
*
Offline Offline

Posts: 41


« Reply #2 on: 05-10-2011, 19:38:10 »

ciao colleghi, qualcuno è in grado d capire dove cavolo sbajo ?
Sì, ci sono alcuni punti importanti:
ciao
Le parole che iniziano un periodo vanno scritte con la iniziale maiuscola.
in grado d capire
Qui hai dimenticato di scrivere la "i" dopo la "d" per intendere "di".
dove cavolo sbajo ?
"j"->"gli".

Fuori dalla battuta ( ), gli errori nel codice sono che:
- il for più interno ha come condizione di uscita il confronto fra "j" e la lunghezza della "prima" riga (non della riga "i-esima" (hai supposto che la matrice fosse quadrata, ma in generale questo è non vero, quindi dovresti fare un controllo apposito per evitare che si sollevi una ArrayIndexOutOfBoundsException).
- il controllo se "c==4" viene fatto "prima" di controllare se un eventuale pedina è contigua alle altre già contate, perciò "c==4" sarà vero solo se ci sono almeno 5 pedine consecutive uguali (ad esempio prima ce n'erano 3, spazio vuoto, e 1, e l'utente inserisce la 5ª fra questi due gruppi). Il controllo andrebbe fatto dopo .

Buona sera .

già, però stranamente non funziona neanke il controllo se c==4 è messo dopo..
Logged
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.475


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #3 on: 05-10-2011, 22:43:47 »

già, però stranamente non funziona neanke il controllo se c==4 è messo dopo..
Nessuna stranezza, a meno di bug della JVM o altre cause di forza maggiore.

Il tuo programma fa esattamente quello che c'è scritto nel codice che gli hai scritto.

Dovresti mostrare il nuovo codice, compreso dei due for, e possibilmente l'intero metodo, e se non ti vergogni (o, comunque, se non hai firmato una NDA-accordo di non divulgazione-) il codice dell'intera classe boh.
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Cerberus
Matricola
*
Offline Offline

Posts: 41


« Reply #4 on: 06-10-2011, 00:25:55 »

già, però stranamente non funziona neanke il controllo se c==4 è messo dopo..
Nessuna stranezza, a meno di bug della JVM o altre cause di forza maggiore.

Il tuo programma fa esattamente quello che c'è scritto nel codice che gli hai scritto.

Dovresti mostrare il nuovo codice, compreso dei due for, e possibilmente l'intero metodo, e se non ti vergogni (o, comunque, se non hai firmato una NDA-accordo di non divulgazione-) il codice dell'intera classe boh.

Code:
import javax.swing.*;
 
 class Griglia {
protected char[][] table = new char[7][6];

public Griglia() {
for (int i=0; i<table.length;i++) {
for (int j=0;j<table[0].length;j++) {
table[i][j] = 'O';
}
}
}

public char[][] getTable() {
return table;
}

public String toString() {
String StrTable ="";
for (int i=0; i<table.length;i++) {
for (int j=0;j<table[0].length;j++) {
StrTable += table[i][j]+"  ";
}

StrTable+="\n";
}
return StrTable;
}

public String isFine() {
String  fine="";
int c=0;
//controllo righe
for (int i=0;i<table.length;i++) {
c=0;
for (int j=0;j<table[0].length-1;j++) {
if (!(table[i][j] == 'O')) {

if (table[i][j] == table[i][j+1]) c++;
else c=0;
if (c==4) fine ="Vince il giocatore "+table[i][j];
}
}
} // end controllo righe



c=0;

//controllo colonne
for (int j=0;j<table[0].length;j++) {

//da fare

} // end controllo colonne





return fine;
} //end method isFine
}

ecco qua il codice d tutta la classe, in pratica fino a quando il metodo "isFine" non restituisce una stringa la cui lunghezza supera 0 faccio fare le mosse ai suoi giocatori (tutto questo nel main, ovviamente)
Logged
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.475


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #5 on: 06-10-2011, 00:32:22 »

In effetti non serviva postare tutto il codice, avevo solo letto male io alcuni punti boh.

Praticamente dovresti controllare se c==3 invece che se c==4 (oppure alternativamente reinizializzare c=1 sostituendola ad ogni azzeramento c=0).

Prima ero un po' deconcentrato ...
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Cerberus
Matricola
*
Offline Offline

Posts: 41


« Reply #6 on: 06-10-2011, 00:46:28 »

In effetti non serviva postare tutto il codice, avevo solo letto male io alcuni punti boh.

Praticamente dovresti controllare se c==3 invece che se c==4 (oppure alternativamente reinizializzare c=1 sostituendola ad ogni azzeramento c=0).

Prima ero un po' deconcentrato ...

perfetto come immaginavo grazie mille, anche se non riesco a rassegnarmi xke non capisco il xke devo contarne uno in meno ..
Logged
Pages: [1]   Go Up
Print
Jump to: