Sudoku in Java
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: Codice:
Qualche suggerimento? Grazie mille a tutti ;) |
Allora, prima di tutto c'è da capire che livello di programmazione java prevede il corso.
Perchè, così ad esempio, la funzione getValoreIn non va bene. E ti spiego il perchè: se richiami la funzione getValoreIn(-1; 99) otterai un outofboundexception. Quindi banalmente ti direi di estendere la classe con le Exception e fare un raise con i parametri del caso. per quanto riguarda getValoriValidi, devi fare un controllo per cui, il valore contenuto nell'indice x,y rispetti queste 3 regole 1) Non è ripetuto nella riga 2) Non è ripetuto nella colonna 3) Non è ripetuto nel quadrante quindi, diciamo in modo elementare, io svilupperei 3 metodi privati di supporto checkRiga, checkColonna, checkQuadrante Codice:
quindi checkRiga(numRiga){ AH, un suggerimento: COMMENTA IL CODICE! |
Ciao Kaya, intanto grazie per la cortese risposta.
Si lo so, commentare il codice è un abitudine che devo prendere ancora bene, ma finche il testo mi da indicazioni su quello che fanno vari metodi, non mi viene di farlo :D :D Per quanto riguarda il resto, ti spiego tutto. allora, il corso va dalla programmazione base a quella avanzata e sono arrivato al capitolo in cui vengono spiegate le classi ma non sono ancora arrivato alle Exception o alle liste. Inoltre devo svolgere gli esercizi attenendomi strettamente a quanto scritto nella loro descrizione. La funzione dei 3 metodi che mi suggerisci: checkRiga,Colonna Quadrante, in pratica è svolta dal metodo verificaGioco() che controlla se esistono duplicati per riga e colonna all'interno di scacchiera e per questo mi è venuto naturale inserirlo nel metodo getValoriValidi(). il problema è che non capisco come mi vuole far utilizzare getValoriValidi, secondo quale logica per intenderci |
Quella sui commenti è una cazzata. "Si autoesplicano da soli" è una cosa aberrante che nessuno vuole sentire.
Detto questo credo che voglia che tu faccia un discorso diverso. Devi restituire un array in cui restituisce true o false, a seconda del caso in cui in quella cella puoi o non puoi mettere quel valore ad esempio getValoriValidi(1, 1) restituisce [f,f,f,f,f,t,t,t,t] ovvvero => 1-> false 2-> false 3-> false 4-> false 5-> false 6-> true 7-> true 8-> true 9-> true e dice che in quella cella puoi inserire i numeri 6,7,8 e 9. O almeno così ho capito io |
In effetti è il dubbio che ho anche io perché poi c'è il metodo verificaGioco che controlla che i numeri inseriti non violino le regole del gioco.
L'incrocio di questi due metodi mi sta mandando in confusione :D |
Infatti per quello ti avrei suggerito di fare 3 metodi nuovi, cosichè il metodo verificaGioca itera sui 3 metodi.
La funzione getValoriValidi secondo me è utilizzata poichè, in fase di inserimento di un valore ti identifica subito se c'è un errore o meno. Questo può in caso essere utile per creare una serie di flag che identificano dove sono gli errori, e poi verificaGioco controlla se c'è o meno l'errore. |
Tutti gli orari sono GMT +1. Ora sono le: 22:40. |
Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Hardware Upgrade S.r.l.