Si quell'errore l'ho capito, è che non mi torna perchè in eclipse invece mi da un errore diverso![]()
Si quell'errore l'ho capito, è che non mi torna perchè in eclipse invece mi da un errore diverso![]()
Sì, come dice Alex'87 il messaggio di errore è esplicativo: se dichiari una classe "public" il nome del file in cui la salvi deve essere lo stesso di tale classe. Comunque, visto che sei agli inizi non preoccuparti troppo di questi dettagli, prendili così come sono e ti saranno più chiari man mano che andrai avanti.
Riguardo all'errore su Eclipse, probabilmente non hai specificato qualche percorso di cui ha bisogno, ad esempio il classpath... ma non usandolo non saprei dirti con precisione.
In ogni caso, per ora ti consiglio di imparare lavorando solo con editor di testo e compilazione da linea di comando: l'utilizzo di ambienti IDE avanzati (come Eclipse o Netbeans) demandali a quando sarai un po' più esperto...!
Ok ragazzi grazie mille![]()
Allora continuo con il terminale![]()
Sto sviluppando un programmino che generi un calendario di calcio (a scontri diretti) quindi è possibile che apri un nuovo topic se qualcosa non mi torna![]()
Grazie mille a tutti![]()
Ho un nuovo problema ora![]()
Una volta generata la matrice ho bisogno che ogni riga contenga solo numeri diversi (compresi tra 1 e 8) quindi che ogni numero ci sia solo una vota.
Stavo pensando ad un algoritmo del genere:
Ma durante la compilazione mi dicecodice:import java.util.Random; public class prova2 { private static final int MATRIX_ROWS = 5; private static final int MATRIX_COLUMNS = 8; public static void main(String[] args){ // creo la matrice con il numero di righe e colonne definite int matrice[][] = new int[MATRIX_ROWS][MATRIX_COLUMNS]; // creo il generatore di numeri random Random random = new Random(); // cliclo l'array bidimensionale for (int i = 0; i < MATRIX_ROWS; i++) { for (int j = 0; j < MATRIX_COLUMNS; j++) { for(int x=0;x<MATRIX_COLUMNS;x++){ do{ // genero il numero casuale tra 1 e 8 int squadra = (int)(Math.random()*8)+1; } while(matrice[i][j]!=matrice[i][x] && x==j); } matrice[i][j] =squadra; // stampo la linea System.out.print("[" + matrice[i][j]+ "]"); } // stampo un carriage reutrn System.out.print("\n"); } } }L'algoritmo è corretto? Dove sbaglio?rova2.java:29: cannot find symbol
symbol : variable squadra
location: class prova2
matrice[i][j] =squadra;
^
1 error
Prova a fare una cosa del genere:
Prova così, però non sono sicuro funzioni!!!codice:import java.util.Random; public class prova2 { private static final int MATRIX_ROWS = 5; private static final int MATRIX_COLUMNS = 8; public static void main(String[] args){ // creo la matrice con il numero di righe e colonne definite int matrice[][] = new int[MATRIX_ROWS][MATRIX_COLUMNS]; // creo il generatore di numeri random Random random = new Random(); // cliclo l'array bidimensionale for (int i = 0; i < MATRIX_ROWS; i++) { Vector<Integer> n = new Vector<Integer>(); for (int j = 0; j < MATRIX_COLUMNS; j++) { int squadra = (int) (Math.random() * (8) + 1); while (n.contains(squadra)) { squadra = (int) (Math.random() * (8) + 1); } n.addElement(squadra); matrice[i][j] =squadra; // stampo la linea System.out.print("[" + matrice[i][j]+ "]"); // stampo un carriage reutrn System.out.print("\n"); } } }
La legge e l'ordine saranno rispettati solo quando si concederà la giustizia a tutti indistintamente.
eccolo qua, l'ho provato!!!In quello postato precedentemente avevo messo pure una parentesi fuori posto e una mancante!
Questo funziona correttamente:
Ciaooocodice:import java.util.Random; import java.util.Vector; public class Prova2 { private static final int MATRIX_ROWS = 5; private static final int MATRIX_COLUMNS = 8; public static void main(String[] args) { // creo la matrice con il numero di righe e colonne definite int matrice[][] = new int[MATRIX_ROWS][MATRIX_COLUMNS]; // creo il generatore di numeri random Random random = new Random(); // cliclo l'array bidimensionale for (int i = 0; i < MATRIX_ROWS; i++) { Vector<Integer> n = new Vector<Integer>(); for (int j = 0; j < MATRIX_COLUMNS; j++) { int squadra = (int) (Math.random() * (8) + 1); while (n.contains(squadra)) { squadra = (int) (Math.random() * (8) + 1); } n.addElement(squadra); matrice[i][j] = squadra; // stampo la linea System.out.print("[" + matrice[i][j] + "]"); } // stampo un carriage reutrn System.out.print("\n"); } } }![]()
La legge e l'ordine saranno rispettati solo quando si concederà la giustizia a tutti indistintamente.
anzi tutto grazie per la rispostaAvere qualcosa di già funzionante è già un buon punto di partenza
![]()
Solo che ci sono cose che io ancora non ho fatto come i vector ed altri comandi che non capisco![]()
Premsso che mi andrò a cercare su internet quei comandi che non capisco per cercare di capirli, c'è un metodo per fare la stessa cosa con l'algoritmo che avevo scritto prima io? Oppure è completamente sbagliato?
Questo è quello che ho fatto ma mi da un errore nella variabile "squadra"
codice:import java.util.Random; public class prova2 { private static final int MATRIX_ROWS = 5; private static final int MATRIX_COLUMNS = 8; public static void main(String[] args){ // creo la matrice con il numero di righe e colonne definite int matrice[][] = new int[MATRIX_ROWS][MATRIX_COLUMNS]; // creo il generatore di numeri random Random random = new Random(); // cliclo l'array bidimensionale for (int i = 0; i < MATRIX_ROWS; i++) { for (int j = 0; j < MATRIX_COLUMNS; j++) { for(int x=0;x<MATRIX_COLUMNS;x++){ do{ // genero il numero casuale tra 1 e 8 int squadra = (int)(Math.random()*8)+1; } while(matrice[i][j]!=matrice[i][x] && x==j); } matrice[i][j] =squadra; // stampo la linea System.out.print("[" + matrice[i][j]+ "]"); } // stampo un carriage reutrn System.out.print("\n"); } } }prova2.java:30: cannot find symbol
symbol : variable squadra
location: class prova2
matrice[i][j] =squadra;
^
1 error
L'errore sta nel fatto che dichiari la variabile "squadra" all'interno del do-while e poi cerchi di utilizzarla all'esterno: non puoi farlo, in quanto "squadra" è locale al ciclo, fuori è come se non esistesse.
Prova un codice di questo tipo (non ho il tempo di testarlo ora, provalo tu e se c'è qualcosa che non capisci chiedimi pure):
Ti ho marcato i punti di INIZIO e FINE codice, così riesci a capire cosa devi sostituire in quello che hai scritto.codice:for (int j = 0; j < MATRIX_COLUMNS; j++) { // INIZIO NUOVO CODICE boolean unico; do { unico = true; matrice[i][j] = (int)(Math.random()*8)+1; for (int x = 0; x < j; x++) { if (matrice[i][j] == matrice[i][x]) { unico = false; } } } while (!unico); // FINE NUOVO CODICE // stampo la linea System.out.print("[" + matrice[i][j]+ "]");
L'algoritmo (non propriamente efficiente) comunque è praticamente analogo al tuo
Scusami ma adesso non riesco a risponderti e a provare a vedere dove sta l'errore, comunque i vector sono in pratica degl'array normali, solo che, e non è poco, hanno lunghezza variabile e non possono contenere tipi primitivi come int, double etc..
Quando lo definisci tra parentesi <...> indichi il tipo, che come detto prima non può essere primitivo.
addElements() non è altro che un metodo che aggiunge un oggetto, nel tuo caso di tipo Integer in coda al "vettore" ovvero alla fine.
contains() è un altro metodo che controlla se il vettore contiene l'elemento passato tra le parentesi del metodo.
La legge e l'ordine saranno rispettati solo quando si concederà la giustizia a tutti indistintamente.
Grazie mille a tutti e due, entrambi gli script sono perfettamente funzionanti![]()
Ora non mi resta che ultimare un'ultima cos e poi ho fatto![]()