View Full Version : [JAVA] aiuti per un progetto
DexTer82
27-12-2005, 23:14
Salve gente,
avrei qualke casotto per un progetto da fare. Apro questo 3D tenendovi aggiornati sui problemi ke mi capiteranno nel farlo :P
In primis vorrei chiedervi come fare a creare tot array in base al parametro ke gli pasos in ingresso, ovvero se faccio
prg 10
lui mi deve creare 10 array.
Non riesco a capire come fare perkè anche facendo array.[i] o [i].array in un for mi da errori di compilazione e googlando un bel po nn ho trovto soluzioni, spere come ovviare? Devo per forza passarli in ingresso è l'unica soluzione!
Grazie in anticipo :)
Da quello che ho capito, stai cercando di fare un array bidimensionale, dove la seconda dimensione te la dà il parametro in ingresso.
Se ti crea problemi, puoi sempre fare un vettore di array, così tagli la testa al toro e non fai confusioni con gli indici ;)
PS: e neanche coi pollici :Prrr:
DexTer82
28-12-2005, 11:05
No no!
in primis devo per forza usare gli array magari potessi fare di testa mia :D
poi io dovrei fare in questo modo.
java programma 8
quindi il programma mi crea 8 array, poi faro una savitchin che mi chiede in ingresso 8 numeri uno per ogni array ke dovro spezzare in singole cifre per riempire l'array per poterlo poi darlo in pasto a degli algoritmi di ordinamento. Quindi volevo capire se è possibile creare degli array con un ciclo for ke faccia array1 array2 arraynumeromaxkehodato oppure son costretto a operare con i bidimensionali che nn avendoli mai usati tendevo a usare come seconda alternativa :P
Di sicuro se hai M=numero di array passati al programma, ognuno di dimensione fissa N, la cosa più elegante è una bella matrice MxN; per come gestirli, cerchi un po' di doc ;) altrimenti dovrei farlo io per te perché è un po' che non mastico i bidimensionali.
Se non vuoi, o se la dimensione dei singoli array varia, puoi usare il vettore (scartato, anche se non capisco il motivo) o una array di oggetti.
Dovresti verificare, ma dovrebbe funzionare qualcosa del tipo:
Object arrayGlobale[] = new Object[dimensioneIndicata];
e in ogni elemento dell'arrayGlobale, metti il singolo array.
Perdona la franchezza, ma delle 3 possibilità (array bidimensionale, vettore di array, array di array) questa mi sembra la più scandalosa ;)
Salve gente,
avrei qualke casotto per un progetto da fare. Apro questo 3D tenendovi aggiornati sui problemi ke mi capiteranno nel farlo :P
In primis vorrei chiedervi come fare a creare tot array in base al parametro ke gli pasos in ingresso, ovvero se faccio
prg 10
lui mi deve creare 10 array.
Non riesco a capire come fare perkè anche facendo array.[i] o [i].array in un for mi da errori di compilazione e googlando un bel po nn ho trovto soluzioni, spere come ovviare? Devo per forza passarli in ingresso è l'unica soluzione!
Grazie in anticipo :)Ciao, da quanto ho capito vuoi creare dinamicamente N array. Quindi in pratica puoi usare un array bidimensionale. Non hai specificato cosa dovranno contenere gli array, se tipi primitivi (int, long, ecc...) o oggetti.
Io ti faccio un esempio supponendo un array bidimensionale di int:
int narray = 10; /* Quello che ricevi in input */
int[][] biarray = new int[narray][];
a questo punto puoi creare i tuoi N array:
biarray[0] = new int[dim1];
biarray[1] = new int[dim2];
...
biarray[9] = new int[dim10];
Nota che le varie dimensioni dim1, dim2, ecc... non necessariamente devono essere uguali! Java supporta quelli che vengono definiti "jagged array" cioè array di array non rettangolari.
DexTer82
28-12-2005, 15:06
Dopo un po di indagini in effetit mi conviene usare i bidimensionali!
Ora pero ho un problema. ho fatto questo programma funzionante:
public class test {
public static void main (String[] args) {
System.out.println ("Inserisci quanti array vuoi: ");
int input = SavitchIn.readLineInt();
System.out.println ("");
int[][] matrice = new int[input][];
int random;
// Creo gli array e li riempo di zeri
for (int i=0; i<input; i++){
matrice[i] = new int[10];
for (int a=0; a<10; a++) {
matrice[i][a] = 0;
System.out.println ("Array " + i + " ha valore " + matrice[i][a] + " in posizione " + a);
}
}
// Inserisco i valori da input nell array spezzandoli in singole cifre
for (int i=0; i<input; i++){
System.out.println ("Inserisci il numero per l'array " + i);
String word = SavitchIn.readLine();
int b = word.length();
for (int j=0; j<b; j++){
char c = word.charAt(j);
System.out.println("Carattere preso: "+ c );
matrice[i][j] = c;
System.out.println ("Array " + i + " ha valore " + matrice[i][j] );
}
}
}
}
Ora il programma funge ma l'ultimo print non mi da i valori corretti.
SE metto come valore 65 il char c trova sia 6 ke 5, ma la stampa mi da numeri sfasati! SApete come risolvere? sto impazzendo su sta cosa nn trovo proprio l'errore :P
SE metto come valore 65 il char c trova sia 6 ke 5, ma la stampa mi da numeri sfasati! SApete come risolvere? sto impazzendo su sta cosa nn trovo proprio l'errore :P
Occhio a non confondere un carattere con il suo codice ASCII!
Nel blocco finale tu chiedi una stringa, supponiamo "123". Ognuno di questi 3 caratteri viene preso singolarmente e messo nell'array (che è di int). Quindi tu stai memorizzando il valore del carattere! Cioè stamperebbe 49, 50 e 51.
Se vuoi stampare proprio il carattere hai 2 possibilità:
- fare il cast:
System.out.println ("Array " + i + " ha valore " + (char) matrice[i][j] );
- dichiarare l'array non di int ma di char.
DexTer82
28-12-2005, 15:37
VEro ke erroraccio :D
Ora con il cast funge bene! pero ho un dubbio. l'array contieneil valore che gli do in input oppure contiene il valore "ASCII" ?
Perkè fare gli int non mi conveniva poiche dovevo "spezzare" i numeri interi in singoli numeri e nn ho trovato metodi che lo facevano, menter per le stringhe esiste il charAt che mi fa prendere le singole cifre
Di sicuro se hai M=numero di array passati al programma, ognuno di dimensione fissa N, la cosa più elegante è una bella matrice MxN; per come gestirli, cerchi un po' di doc ;) altrimenti dovrei farlo io per te perché è un po' che non mastico i bidimensionali.
Se non vuoi, o se la dimensione dei singoli array varia, puoi usare il vettore (scartato, anche se non capisco il motivo) o una array di oggetti.
Dovresti verificare, ma dovrebbe funzionare qualcosa del tipo:
Object arrayGlobale[] = new Object[dimensioneIndicata];
e in ogni elemento dell'arrayGlobale, metti il singolo array.
Perdona la franchezza, ma delle 3 possibilità (array bidimensionale, vettore di array, array di array) questa mi sembra la più scandalosa ;)
In java non esistono array bidimensionali: hai sempre a che fare con array di oggetti, e quindi con array di array.
VEro ke erroraccio :D
Ora con il cast funge bene! pero ho un dubbio. l'array contieneil valore che gli do in input oppure contiene il valore "ASCII" ?
Perkè fare gli int non mi conveniva poiche dovevo "spezzare" i numeri interi in singoli numeri e nn ho trovato metodi che lo facevano, menter per le stringhe esiste il charAt che mi fa prendere le singole cifre
Dipende molto da cosa ti è stato chiesto di fare.
Con il codice come l'hai postato, ogni singolo carattere della stringa che inserisci viene memorizzato nell'array (tralasciamo che è di int) e quindi potresti mettere anche caratteri che non siano dei digit 0-9. In pratica non stai maneggiando dei valori numerici ma dei singoli caratteri.
La mia impressione è che non fosse questo che si voleva fare ma bensì una cosa come la seguente: ricevo una stringa del tipo "10 20 30 40" e nell'array bisogna mettere:
matrice[i][0] = 10;
matrice[i][1] = 20;
ecc...
Se è questo che si voleva fare non è difficile. La stringa la prendi già in input con:
String word = SavitchIn.readLine();
(tra l'altro cos'è SavitchIn? Forse una classe di utilità fatta da qualcuno?)
A questo punto (nota, per Java 1.4+) si può usare:
String[] strvalori = word.split ("\\s+"); /* spezza i valori usando gli spazi come separatori */
A questo punto prendi ogni elemento di strvalori e con il metodo parseInt della classe Integer lo converti in numero e lo memorizzi nell'array.
Così ti quadra di più? Fammi sapere! :)
DexTer82
28-12-2005, 16:09
Allora faccio un po di chiarimenti sul progetto.
dovrei scrivere un programma che prende in ingresso una quantita di numeri di 10 cifre ( se sono meno di 10 cifre i rimanenti "spazi" li riempio di 0 ) e queste cifre devon esser rappresentate come array di 10 elementi. poi una volta presi in ingresso devo riordinare gli array con il radix sort ke al suo interno ha un counti sort (un bordello ma ci pensero piu avanti :D ). Questo è il succo dell'esercizio!
PEr questo mi serve avere negli array numeri veri e propri (non ASCII) per poter poi fare i confronti e ordinarli!
P.s. La savitchIn è una classe ke permette di leggere input da tastiera
In java non esistono array bidimensionali
int[][] nums = new int[3][2];
Quindi per te questo non sarebbe un array bidimensionale??
Allora faccio un po di chiarimenti sul progetto.
dovrei scrivere un programma che prende in ingresso una quantita di numeri di 10 cifre ( se sono meno di 10 cifre i rimanenti "spazi" li riempio di 0 ) e queste cifre devon esser rappresentate come array di 10 elementi. poi una volta presi in ingresso devo riordinare gli array con il radix sort ke al suo interno ha un counti sort (un bordello ma ci pensero piu avanti :D ). Questo è il succo dell'esercizio!
PEr questo mi serve avere negli array numeri veri e propri (non ASCII) per poter poi fare i confronti e ordinarli!
Ok ... così è più chiaro. Quindi tu ricevi una stringa del tipo "1234567890" e devi fare un array di int con dentro 1, 2, 3, ecc....
Oltre a scansionare la stringa e prendere il singolo carattere con charAt (come fai già), devi usare il metodo statico digit() della classe Character, che ti restituisce il valore del digit (es. '8' -> 8) e sei a posto. Nota, ti ritorna -1 se il char non è un digit!
P.s. La savitchIn è una classe ke permette di leggere input da tastieralo immaginavo ;)
DexTer82
28-12-2005, 16:50
Tadàààààà!!!
Ho risolto usando
int c = Integer.parseInt("" + word.charAt(j));
In questo modo uso il charAt per i singoli caratteri, e il parse per mandarli come int e il tutto funge bene!!
Grazie mille a tutti!!! :D
Tanto tempo poke ora e riscrivo un altro problema mi sa :D
Ancora grazie :)
int c = Integer.parseInt("" + word.charAt(j));
Certo! È una alternativa al Character.digit(). Naturalmente, se il carattere non è un digit, la parseInt ti lancia una NumberFormatException!
int[][] nums = new int[3][2];
Quindi per te questo non sarebbe un array bidimensionale??
se vuoi lo puoi vedere con un array bidimensionale, ma non è un array bidimensionale nel senso proprio del termine, come li trovi in c/c++, in cui allochi uno spazio di memoria contiguo che contiene l'intera matrice
In java hai sempre una rray di riferimenti ad altri oggetti, che in questo caso saranno array a loro volta dando l'illusione di una matrice.
se vuoi lo puoi vedere con un array bidimensionale, ma non è un array bidimensionale nel senso proprio del termine, come li trovi in c/c++, in cui allochi uno spazio di memoria contiguo che contiene l'intera matrice
In java hai sempre una rray di riferimenti ad altri oggetti, che in questo caso saranno array a loro volta dando l'illusione di una matrice.
A fare i pignoli, allora non esistono neanche gli array in Java nel senso che dici tu, visto che l'array stesso è un oggetto e una variabile di quel tipo fa riferimento all'oggetto stesso e non al primo elemento dello spazio di memoria allocato.
Se si accetta di chiamare un oggetto di quel tipo "array", mi sembra duro non accettare di chiamare array bidimensionale un'organizzazione di oggetti come quella considerata.
Dal mio canto, ho sempre chiamato (e non penso di avere sbagliato), vettori bidimensionali vettori in cui ogni elemento era a sua volta un vettore.
La bidimensionalità (o tridimensionalità, ecc) è legata alla rappresentazione nello spazio N-dimensionale di un oggetto, non alla sua organizzazione.
Sempre IMHO ;)
Non voglio contestare il fatto che possa esesre chiamato array bidimensionale, lo uso anche io quel termine, ma ero intervenuto perchè mi era sembrato di aver letto qualcosa del tipo: o usi un array bidimensionale o un array di array, visto che in java sono la stessa cosa, a differenza del c/c++ in cui sono cose diverse.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.