Nigy
11-09-2019, 09:48
Ciao a tutti ragazzi, sono nuovo del forum e in un certo senso anche di Java.
Sono alle prese con un esercizio che mi chiede di creare il gioco del Sudoku secondo queste indicazioni:
Si crei una classe Sudoku che possiede i seguenti attributi:
scacchiera: un array 9x9 di interi che rappresenta lo stato attuale del gioco e in cui gli zeri rappresentano le celle ancora non riempite.
inizio: un array 9x9 di valori booleani che specifica quali elementi dell'array scacchiera possiedono un valore che non può essere modificato.
e i seguenti metodi:
Sudoku: un costruttore che crea un nuovo gioco in cui tutte le caselle sono vuote.
toString: restituisce una stringa stampabile che rappresenta il gioco.
aggiungiIniziali(riga, colonna, valore): aggiunge nella posizione specificata da riga e colonna il valore iniziale dato da valore che non può essere modificato.
aggiungiMossa(riga, colonna,valore): aggiunge nella posizione specificata da riga e colonna il valore specificato da valore. Tale valore può essere modificato.
verificaGioco(): restituisce vero se i valori inseriti non violano le regole del gioco.
getValoreIn(riga,colonna): restituisce il valore contenuto nella posizione specificata da riga e colonna.
getValoriValidi(riga, colonna): restituisce una array monodimensionale di nove valori booleani, ognuno dei quali corrisponde a una cifra e risulta vero se la cifra può essere posta alla posizione specificata da riga e colonna senza violare le regole del gioco.
pieno():restituisce vero se ogni cella possiede un valore.
reset(): imposta a zero tutte le celle che non contengono valori immutabili.
Ho implementato il codice in questo modo:
public class Sudoku {
private int scacchiera[][]=new int[9][9];
private boolean inizio[][]=new boolean[9][9];
public Sudoku() {
for(int i=0;i<scacchiera.length;i++) {
for(int j=0;j<scacchiera[0].length;j++) {
scacchiera[i][j]=0;
}
}
for(int i=0;i<inizio.length;i++) {
for(int j=0;j<inizio[0].length;j++) {
inizio[i][j]=false;
}
}
}
public void aggiungiIniziali(int riga, int colonna, int valore) {
scacchiera[riga][colonna]=valore;
inizio[riga][colonna]=true;
}
public void aggiungiMossa(int riga,int colonna,int valore) {
if(getValoriValidi(riga, colonna)[colonna]==true) {
scacchiera[riga][colonna]=valore;
if(!verificaGioco()) {
System.out.println("Hai gia inserito il "+getValoreIn(riga, colonna)+ " in questa riga o colonna");
System.out.println("inserisci un altro valore");
scacchiera[riga][colonna]=0;
}
}else {
System.out.println("Non puoi modificare il valore di questa cella.");
}
}
public boolean verificaGioco() {
int riga[]=new int[9];
int colonna[]=new int[9];
for(int i=0;i<scacchiera.length;i++) {
for(int j=0;j<scacchiera[0].length;j++) {
riga[i]=scacchiera[i][j];
colonna[i]=scacchiera[j][i];
for(int j2=j+1;j2<riga.length;j2++) {
if(riga[i]==0 || colonna[i]==0) {
continue;
}
if( (riga[i]==scacchiera[i][j2]) || (colonna[i]==scacchiera[j2][i]) ) {
return false;
}
}
}
}
return true;
}
private int getValoreIn(int riga,int colonna) {
return scacchiera[riga][colonna];
}
private boolean[] getValoriValidi(int riga, int colonna) {
boolean array[]=new boolean[9];
if(inizio[riga][colonna]==false ) {
if(verificaGioco()) {
array[colonna]=true;
}
}
return array;
}
public boolean pieno() {
for(int i=0;i<scacchiera.length;i++) {
for(int j=0;j<scacchiera[0].length;j++) {
if(scacchiera[i][j]==0) {
return false;
}
}
}
return true;
}
public void reset() {
for(int i=0;i<inizio.length;i++) {
for(int j=0;j<inizio[0].length;j++) {
if(inizio[i][j]==false) {
scacchiera[i][j]=0;
}
}
}
}
public void mioString() {
for(int i=0;i<scacchiera.length;i++) {
for(int j=0;j<scacchiera[0].length;j++) {
if(scacchiera[i][j]==0) {
System.out.print(" "+" ");
}else {
System.out.print(scacchiera[i][j]+" ");
}
}
System.out.println();
}
}
}
ma quello che non riesco proprio a capire è che logica vuole farmi usare attraverso il metodo getValoriValidi. Penso di averlo sviluppato in accordo con l'indicazione per quel metodo, ma non riesco ad inserirlo correttamente nel programma.
Qualche suggerimento?
Grazie mille a tutti ;)
Sono alle prese con un esercizio che mi chiede di creare il gioco del Sudoku secondo queste indicazioni:
Si crei una classe Sudoku che possiede i seguenti attributi:
scacchiera: un array 9x9 di interi che rappresenta lo stato attuale del gioco e in cui gli zeri rappresentano le celle ancora non riempite.
inizio: un array 9x9 di valori booleani che specifica quali elementi dell'array scacchiera possiedono un valore che non può essere modificato.
e i seguenti metodi:
Sudoku: un costruttore che crea un nuovo gioco in cui tutte le caselle sono vuote.
toString: restituisce una stringa stampabile che rappresenta il gioco.
aggiungiIniziali(riga, colonna, valore): aggiunge nella posizione specificata da riga e colonna il valore iniziale dato da valore che non può essere modificato.
aggiungiMossa(riga, colonna,valore): aggiunge nella posizione specificata da riga e colonna il valore specificato da valore. Tale valore può essere modificato.
verificaGioco(): restituisce vero se i valori inseriti non violano le regole del gioco.
getValoreIn(riga,colonna): restituisce il valore contenuto nella posizione specificata da riga e colonna.
getValoriValidi(riga, colonna): restituisce una array monodimensionale di nove valori booleani, ognuno dei quali corrisponde a una cifra e risulta vero se la cifra può essere posta alla posizione specificata da riga e colonna senza violare le regole del gioco.
pieno():restituisce vero se ogni cella possiede un valore.
reset(): imposta a zero tutte le celle che non contengono valori immutabili.
Ho implementato il codice in questo modo:
public class Sudoku {
private int scacchiera[][]=new int[9][9];
private boolean inizio[][]=new boolean[9][9];
public Sudoku() {
for(int i=0;i<scacchiera.length;i++) {
for(int j=0;j<scacchiera[0].length;j++) {
scacchiera[i][j]=0;
}
}
for(int i=0;i<inizio.length;i++) {
for(int j=0;j<inizio[0].length;j++) {
inizio[i][j]=false;
}
}
}
public void aggiungiIniziali(int riga, int colonna, int valore) {
scacchiera[riga][colonna]=valore;
inizio[riga][colonna]=true;
}
public void aggiungiMossa(int riga,int colonna,int valore) {
if(getValoriValidi(riga, colonna)[colonna]==true) {
scacchiera[riga][colonna]=valore;
if(!verificaGioco()) {
System.out.println("Hai gia inserito il "+getValoreIn(riga, colonna)+ " in questa riga o colonna");
System.out.println("inserisci un altro valore");
scacchiera[riga][colonna]=0;
}
}else {
System.out.println("Non puoi modificare il valore di questa cella.");
}
}
public boolean verificaGioco() {
int riga[]=new int[9];
int colonna[]=new int[9];
for(int i=0;i<scacchiera.length;i++) {
for(int j=0;j<scacchiera[0].length;j++) {
riga[i]=scacchiera[i][j];
colonna[i]=scacchiera[j][i];
for(int j2=j+1;j2<riga.length;j2++) {
if(riga[i]==0 || colonna[i]==0) {
continue;
}
if( (riga[i]==scacchiera[i][j2]) || (colonna[i]==scacchiera[j2][i]) ) {
return false;
}
}
}
}
return true;
}
private int getValoreIn(int riga,int colonna) {
return scacchiera[riga][colonna];
}
private boolean[] getValoriValidi(int riga, int colonna) {
boolean array[]=new boolean[9];
if(inizio[riga][colonna]==false ) {
if(verificaGioco()) {
array[colonna]=true;
}
}
return array;
}
public boolean pieno() {
for(int i=0;i<scacchiera.length;i++) {
for(int j=0;j<scacchiera[0].length;j++) {
if(scacchiera[i][j]==0) {
return false;
}
}
}
return true;
}
public void reset() {
for(int i=0;i<inizio.length;i++) {
for(int j=0;j<inizio[0].length;j++) {
if(inizio[i][j]==false) {
scacchiera[i][j]=0;
}
}
}
}
public void mioString() {
for(int i=0;i<scacchiera.length;i++) {
for(int j=0;j<scacchiera[0].length;j++) {
if(scacchiera[i][j]==0) {
System.out.print(" "+" ");
}else {
System.out.print(scacchiera[i][j]+" ");
}
}
System.out.println();
}
}
}
ma quello che non riesco proprio a capire è che logica vuole farmi usare attraverso il metodo getValoriValidi. Penso di averlo sviluppato in accordo con l'indicazione per quel metodo, ma non riesco ad inserirlo correttamente nel programma.
Qualche suggerimento?
Grazie mille a tutti ;)