PDA

View Full Version : Array di interi...problemino


Lo_Straniero2003i
19-06-2006, 14:08
Salve, ragazzi. Ho un array di interi non necessariamente ordinato in ordine crescente. Devo ottenere questo risultato:
array iniziale:
int num[] = {0,0,1,1,1,3,3,4,4,4}
array che devo ottenere:
int num[] = {0,0,1,1,1,3,3}
Cioè devo eliminare il numero che si ripete più volte più grande. Potete aiutarmi??? GRAZIE!!! :D

motogpdesmo16
19-06-2006, 14:24
IMHo: parti dall'algoritmo del massimo di un vettore e, contestualmente, ci valorizzi una variabile-contatore che conta le ripetizioni di quel valore nell'array.
Inizia ad abbozzare qualcosa...

Lo_Straniero2003i
19-06-2006, 14:48
Potresti scrivermi una porzione di codice per favore? Il linguaggio è indifferente. Grazie.

andbin
19-06-2006, 14:56
Ho un array di interi non necessariamente ordinato in ordine crescente. Devo ottenere questo risultato:
array iniziale:
int num[] = {0,0,1,1,1,3,3,4,4,4}
array che devo ottenere:
int num[] = {0,0,1,1,1,3,3}
Cioè devo eliminare il numero che si ripete più volte più grande.Se ho capito bene se c'è il caso particolare come sopra (1 e 4 che si ripetono 3 volte) devi eliminare solo il maggiore cioè 4. Giusto?
Inoltre per l'array di destinazione devi usare lo stesso array o un altro (anche allocato dinamicamente)??

Comunque credo che convenga:
1) Ordinare in modo crescente l'array.
2) Cercare il numero che si ripete più volte.
3) Copiare i dati in un altro array saltando il numero che compare più volte.

Poi magari posta qualcosa che vediamo. ;)

motogpdesmo16
19-06-2006, 14:59
Per calcolare il massimo assumiamo inizialmente che il massimo elemento è il primo e poi facciamo una scansione degli elementi del vettore.
Se troviamo un elemento che è maggiore del massimo, quello è il nuovo massimo.

massimo=x[0];
for(i=0; i<=numeroelementi-1; i=i+1)
{
if( x[i]>massimo )
{
massimo=x[i];
}
}

Vorrei capire comunque se l'array finale e quindi, stando al tuo esempio, quello in cui non compare il numero 4, deve essere sempre num oppure un altro.

Lo_Straniero2003i
19-06-2006, 15:04
E tutto giusto...ma non ci riesco!! :muro:
Per favore, mi scriveresti il codice? sò che sarà na stupidagine...ma proprio non riesco ad arrivarci... :cry:

Lo_Straniero2003i
19-06-2006, 15:13
La ricerca del massimo era chiara; ma da un vettore iniziale, devo avere lo stesso vettore senza il num che si ripete più volte più grande.

motogpdesmo16
19-06-2006, 15:39
La ricerca del massimo era chiara; ma da un vettore iniziale, devo avere lo stesso vettore senza il num che si ripete più volte più grande.
Seguendo quanto detto da andbin e supponendo il vettore di dimensione massima DIMAX
1-ordiniamo il vettore in maniera crescente

for (i=0;i<(dimax-1);i++)
{
for (j=i+1;j<dimax;j++)
{
if (num[i]<=num[j])
{
appoggio=num[i];
num[i]=num[j];
num[j]=appoggio[i];
}
}
}

2-determiniamo l'elemento massimo e le sue occorrenze (quante volte esso è presente) che andremo a memorizzare in una variabile contatore "cont" inizializzata a 0:
massimo=x[0];
cont=0;
for(i=0; i<=(dimax-1); i++)
{
if( num[i]>=massimo )
{
massimo=num[i];
cont++;
}
}
3-eliminiamo dal vettore ordinato gli ultimi cont elementi e pertanto il ciclo si arresta fino a quando i vale dimax-cont, cioè il totale degli elementi del vettore meno gli elementi duplicati:
for (i=dimax;i=(dimax-cont);i--)
{
num[i]='';
}

Non uso java da un bel po'. pertanto non sono sicuro che num[i]='' sia una assegnazione legittima avendo dichiarato precedentemente int num[]

Spero di esserti stato comunque utile.

trallallero
19-06-2006, 15:43
for (i=0;i<(dimax-1);i++)
{
for (j=i+1;j<dimax;j++)
{
if (num[i]<=num[j])
{
appoggio=num[i];
num[i]=num[j];
num[j]=num[i];
}
}
}



ehm ... perche' assegni un valore ad appoggio se poi non lo usi ?
servira' a qualcosa no ? ;)

trallallero
19-06-2006, 15:47
2-determiniamo l'elemento massimo e le sue occorrenze (quante volte esso è presente) che andremo a memorizzare in una variabile contatore "cont" inizializzata a 0:

massimo=x[0];
cont=0;
for(i=0; i<=(dimax-1); i++)
{
if( num[i]>massimo )
{
massimo=num[i];
cont++;
}
}

"cont" messo li conta solo quante volte trova un numero piu' grande, cioe' i cambi di valore ;)

motogpdesmo16
19-06-2006, 15:51
ehm ... perche' assegni un valore ad appoggio se poi non lo usi ?
servira' a qualcosa no ? ;)
si per la fretta ho dimenticato di rivalorizzare num con appoggio.
inoltre nella ricerca del massimo, la clausola è ">=" e non solo uguale e pertanto il cont piazzato li conta quante volte avviene il cambio di valore o alternativamente quando viene trovato un valore massimo uguale a quello già memorizzato.
Dovrebbero essere risolti ora gli errori a cui facevi riferimento....

trallallero
19-06-2006, 15:55
si per la fretta ho dimenticato di rivalorizzare num con appoggio.
inoltre nella ricerca del massimo, la clausola è ">=" e non solo uguale e pertanto il cont piazzato li conta quante volte avviene il cambio di valore o alternativamente quando viene trovato un valore massimo uguale a quello già memorizzato.
Dovrebbero essere risolti ora gli errori a cui facevi riferimento....
ok :)
ocio che la fretta é una brutta bestia ;)

trallallero
19-06-2006, 16:00
si per la fretta ho dimenticato di rivalorizzare num con appoggio.
inoltre nella ricerca del massimo, la clausola è ">=" e non solo uguale e pertanto il cont piazzato li conta quante volte avviene il cambio di valore o alternativamente quando viene trovato un valore massimo uguale a quello già memorizzato.
Dovrebbero essere risolti ora gli errori a cui facevi riferimento....

'azz ... t'ho letto di fretta :D
No, l'errore non e' il > ;)
Qui hai 2 rami:
- il numero e' uguale a quello appena letto ?
si -> incrementa cont di 1
no -> resetta cont = 1 ed assegna a massimo il numero trovato

Questo ovviamente dato per scontato che l'array e' in ordine crescente ;)

motogpdesmo16
19-06-2006, 16:06
'azz ... t'ho letto di fretta :D
No, l'errore non e' il > ;)
Qui hai 2 rami:
- il numero e' uguale a quello appena letto ?
si -> incrementa cont di 1
no -> resetta cont = 1 ed assegna a massimo il numero trovato

Questo ovviamente dato per scontato che l'array e' in ordine crescente ;)
Mi sa che hai proprio ragione. Si vede che ho fatto di fretta...ma a grandi linee l'ho fatto.
massimo=x[0];
cont=0;
for(i=0; i<=(dimax-1); i++)
{
if( num[i]>massimo )
{
cont++;
}
else
{
massimo=num[i];
cont=1;
}

}

Intendevi questo, vero?

Furla
19-06-2006, 17:43
non ho capito bene il problema...
il numero incriminato è il più alto indipendentemente dal numero di volte che si ripete o è quello che si presenta il maggior numero di volte ed in caso di pareggio fra due numeri è il più alto?

per intenderci, nel seguente vettore rimarrebbe l'uno o gli zeri?

{0,0,0,1}

Lo_Straniero2003i
19-06-2006, 19:11
Il vettore da te scritto resterebbe tale ;)

Lo_Straniero2003i
19-06-2006, 20:14
Scusa motogpdesmo16... mi serve capire questo:

hai scritto questo: for (i=dimax;i=(dimax-cont);i--)
{
num[i]='';
}

ma la condizione è che i==(dimax-cont) ???

motogpdesmo16
19-06-2006, 20:46
Scusa motogpdesmo16... mi serve capire questo:

hai scritto questo: for (i=dimax;i=(dimax-cont);i--)
{
num[i]='';
}

ma la condizione è che i==(dimax-cont) ???
for (i=dimax;i<=(dimax-cont);i--)
{
num[i]='';
}

ennesimo errore di scrittura. Scusami ancora...ma oggi evidentemente era giornata di mente annebbiata.

trallallero
20-06-2006, 07:17
ennesimo errore di scrittura. Scusami ancora...ma oggi evidentemente era giornata di mente annebbiata.

se pensi al mare mentre scrivi é normale :D


if( num[i]>massimo )
{
cont++;
}
else
{
massimo=num[i];
cont=1;
}

Intendevi questo, vero?

niente, proprio stordito completamente :Prrr: :D
diciamo che cosi' funziona meglio:

if( num[i] > massimo )
{
massimo = num[i];
cont = 1;
}
else
{
cont++;
}


dai se ti puó consolare pensa che io fino a settembre non ho ferie :muro:
chissá le boiate che scriveró ad Agosto :p

Lo_Straniero2003i
20-06-2006, 09:05
Scusatemi, ma in java come faccio a dare il valore a vuoto? Perchè se metto "" o '' mi dà errore...mi sta portando via troppo tempo sto esercizio...e la prox settimana ho l'esame!!! :muro:

trallallero
20-06-2006, 09:18
Scusatemi, ma in java come faccio a dare il valore a vuoto? Perchè se metto "" o '' mi dà errore...mi sta portando via troppo tempo sto esercizio...e la prox settimana ho l'esame!!! :muro:

e perché non dovrebbe darti errore ?
stai cercando di assegnare niente ad un intero.
Ma il niente non esiste ;) al limite "null" (che in C 'e 0)

ti conviene copiare i numeri in un altro array, omettendo quelli che devi togliere ;)

poi c'e' una cosa che non ho capito ...
nel caso di
int num[] = {0,0,1,1,1,1, 3,3,4,4,4}
cosa devi togliere ? i 4 o gli 1 ?

motogpdesmo16
20-06-2006, 09:18
se pensi al mare mentre scrivi é normale :D


if( num[i]>massimo )
{
cont++;
}
else
{
massimo=num[i];
cont=1;
}

Intendevi questo, vero?

niente, proprio stordito completamente :Prrr: :D
diciamo che cosi' funziona meglio:

if( num[i] > massimo )
{
massimo = num[i];
cont = 1;
}
else
{
cont++;
}


dai se ti puó consolare pensa che io fino a settembre non ho ferie :muro:
chissá le boiate che scriveró ad Agosto :p
si infatti proprio stordito alla grande!!
Scusate ancora..pensavo di fare cosa utile...

motogpdesmo16
20-06-2006, 09:27
e perché non dovrebbe darti errore ?
stai cercando di assegnare niente ad un intero.
Ma il niente non esiste ;) al limite "null" (che in C 'e 0)

ti conviene copiare i numeri in un altro array, omettendo quelli che devi togliere ;)

poi c'e' una cosa che non ho capito ...
nel caso di
int num[] = {0,0,1,1,1,1, 3,3,4,4,4}
cosa devi togliere ? i 4 o gli 1 ?
quindi ben ricordavo che valorizzando vettore[i]='' con vettore di tipo int arrivava l'errore....
Nel caso da te proposto, se non ricordo male, (eliminare il numero + grande con il maggior numero di occorrenza) dovrebbe essere tolto il 4. Ma, viste le castronerie che ho scritto ieri pomeriggio :D :D , può essere l'esatto contrario...
Avevo pensato anche io ad una copia dei valori in un altro array e poi effettuare la sovrascrittura dell'array iniziale. Penso sia ammessa dalla traccia questa operazione in quanto dice che "devo avere lo stesso vettore" (non è specificato che NON ci possono essere operazioni di cancellazione dell'array iniziale durante l'esecuzione dell'algoritmo...).

trallallero
20-06-2006, 09:28
si infatti proprio stordito alla grande!!
Scusate ancora..pensavo di fare cosa utile...

dai che succede ;)
a me succede proprio sulle cose stupide proprio perché sono stupide quindi non ti devi concentrare molto :)

Lo_Straniero2003i
20-06-2006, 09:32
Noooo...nel caso da te datomi il vettore resterebbe così com'è...solo quando un numero si presenta in ugual volte ad un altro numero mi devi iliminare il 4, nel tuo caso si ripete quattro volte 1 e quattro volte 4 ecco che li devi eliminare il 4, cioè il numero massimo..

trallallero
20-06-2006, 09:32
quindi ben ricordavo che valorizzando vettore[i]='' con vettore di tipo int arrivava l'errore....
Nel caso da te proposto, se non ricordo male, (eliminare il numero + grande con il maggior numero di occorrenza) dovrebbe essere tolto il 4. Ma, viste le castronerie che ho scritto ieri pomeriggio :D :D , può essere l'esatto contrario...
Avevo pensato anche io ad una copia dei valori in un altro array e poi effettuare la sovrascrittura dell'array iniziale. Penso sia ammessa dalla traccia questa operazione in quanto dice che "devo avere lo stesso vettore" (non è specificato che NON ci possono essere operazioni di cancellazione dell'array iniziale durante l'esecuzione dell'algoritmo...).

quindi la traccia ce l'hai anche tu ? se serve posso aiutare anche perché Lo_Straniero2003i lo "vedo" un po' preoccupato.
Io sto aspettando che attivino il server di test alfa quindi per un pó ho tempo :D

trallallero
20-06-2006, 09:35
Noooo...nel caso da te domandatomi il vettore resterebbe così com'è...sono quando un numero si presenta in ungual volte ad un altro numero mi devi iliminare il 4, nel tuo caso si ripete quattro volte 1 e quattro volte 4 ecco che li devi eliminare il 4..

dai posta la traccia che cosí non si capisce 'na fava ;)
se é come penso di aver capito non é cosí semplice come sembrava ;)
devi "leggere" l'array + volte per capire cosa eliminare

Lo_Straniero2003i
20-06-2006, 09:39
Testo dell’esercizio
1) Definire una classe Esercizio che contiene i seguenti metodi di classe:
/* Prende in ingresso una matrice mat di stringhe ed una stringa s; restituisce
l’indice della colonna di mat che contiene più volte la stringa s; in caso ci
siano più colonne che contengono il numero massimo di stringhe, restituisce
quella con l’indice più piccolo */
public static int maxOccorrenze (String[][] mat, String s);

/* Visualizza la colonna j-esima della matrice mat */
public static void stampaColonna (String[][] mat, int j);

2) Definire una classe di test, TestEsercizio, la quale contiene il solo metodo main. Tale metodo
effettua nell’ordine le seguenti operazioni: (a) chiede all’utente di inserire una matrice mat di
stringhe (non necessariamente quadrata), ed una stringa s; le dimensioni di mat e le stringhe da
inserire in mat sono scelte dall’utente (b) Utilizzando la classe Esercizio, visualizza all’utente
l’indice della colonna di mat che contiene più volte la stringa s, e visualizza anche tutte le
stringhe di tale colonna.

Questo è il testo dell'esercizio.

Lo_Straniero2003i
20-06-2006, 09:45
E' il punto maxOccorrenze che non sto riuscendo a fare, perchè se la stringa si ripetesse in volte diverse nelle colonne non ci sarebbe problema. Quindi io creo un array di interi:

public static int maxOccorrenze(String [][] mat, String s) {
int cont[];
cont = new int[mat[0].length];
for(int i=0; i<mat.length; i++) {
for(int j=0; j<mat[0].length; j++) {
if(mat[i][j].equals(s) && mat[i][j].length()==s.length()) {
cont[j]=i;
}
}
}

che per ogni indice di colonna in cui mi trova la parola mi inserisci l'indice i corrispondente.

Es:
ciao ciao
xxx ciao

cont mi diventa {0,1,1}.

trallallero
20-06-2006, 09:49
Testo dell’esercizio
1) Definire una classe Esercizio che contiene i seguenti metodi di classe:
/* Prende in ingresso una matrice mat di stringhe ed una stringa s; restituisce
l’indice della colonna di mat che contiene più volte la stringa s; in caso ci
siano più colonne che contengono il numero massimo di stringhe, restituisce
quella con l’indice più piccolo */
public static int maxOccorrenze (String[][] mat, String s);

/* Visualizza la colonna j-esima della matrice mat */
public static void stampaColonna (String[][] mat, int j);

2) Definire una classe di test, TestEsercizio, la quale contiene il solo metodo main. Tale metodo
effettua nell’ordine le seguenti operazioni: (a) chiede all’utente di inserire una matrice mat di
stringhe (non necessariamente quadrata), ed una stringa s; le dimensioni di mat e le stringhe da
inserire in mat sono scelte dall’utente (b) Utilizzando la classe Esercizio, visualizza all’utente
l’indice della colonna di mat che contiene più volte la stringa s, e visualizza anche tutte le
stringhe di tale colonna.

Questo è il testo dell'esercizio.

quindi l'array di interi in questione lo crei tu per facilitarti la ricerca ?

Lo_Straniero2003i
20-06-2006, 09:53
Esatto!!

trallallero
20-06-2006, 10:00
cont = new int[mat[0].length];


La mat non e' per forza quadrata se ho letto bene.
Come fai a sapere che la lenght dell'indice 0 e' giusto ?


if(mat[i][j].equals(s) && mat[i][j].length()==s.length()) {

non ti basta la equals() per sapere se la stringa e' uguale ?
perché controlli anche la length ?

Per resto, se ti sei bloccato sul "" o '' puoi usare il -1 per annullare il valore ;)
Questo perché l'indice 0 corrisponde al primo indice quindi 0 non puoi usarlo

Lo_Straniero2003i
20-06-2006, 10:09
cotrollo anche se il numero di caratteri della striga è uguale al numero di di caratteri dell'elemento dell'array..è solo aggiutivo...ma non influisce sulla condizione. Poi la la length di mat è giusto perchè Il primo pezzo dell'esercizio fa la classe che può essere usata cn qualsiasi altro esercizio. Poi infatti io creo una classe test per vedere se la classe esercizio funziona. Quando metto mat.length intendo dire dimesione delle righe, mentre mat[0].length quella delle colonne.

trallallero
20-06-2006, 10:22
cotrollo anche se il numero di caratteri della striga è uguale al numero di di caratteri dell'elemento dell'array..è solo aggiutivo...ma non influisce sulla condizione. Poi la la length di mat è giusto perchè Il primo pezzo dell'esercizio fa la classe che può essere usata cn qualsiasi altro esercizio. Poi infatti io creo una classe test per vedere se la classe esercizio funziona. Quando metto mat.length intendo dire dimesione delle righe, mentre mat[0].length quella delle colonne.

vabbé, io il java lo conosco poco, ma se ti blocchi fammi sapere che ci diamo un occhio

moGio
20-06-2006, 11:35
Testo dell’esercizio
1) Definire una classe Esercizio che contiene i seguenti metodi di classe:
/* Prende in ingresso una matrice mat di stringhe ed una stringa s; restituisce
l’indice della colonna di mat che contiene più volte la stringa s; in caso ci
siano più colonne che contengono il numero massimo di stringhe, restituisce
quella con l’indice più piccolo */
public static int maxOccorrenze (String[][] mat, String s);

/* Visualizza la colonna j-esima della matrice mat */
public static void stampaColonna (String[][] mat, int j);

2) Definire una classe di test, TestEsercizio, la quale contiene il solo metodo main. Tale metodo
effettua nell’ordine le seguenti operazioni: (a) chiede all’utente di inserire una matrice mat di
stringhe (non necessariamente quadrata), ed una stringa s; le dimensioni di mat e le stringhe da
inserire in mat sono scelte dall’utente (b) Utilizzando la classe Esercizio, visualizza all’utente
l’indice della colonna di mat che contiene più volte la stringa s, e visualizza anche tutte le
stringhe di tale colonna.

Questo è il testo dell'esercizio.


Salva quanto segue in un file dal nome Esercizio.java (ti genera 2 classi), ed esegui la TestEsercizio


import java.io.*; // serve per leggere da tastiera

class Esercizio {

/* Restituisce il piu' basso indice della colonna di mat
* che contiene il maggior numero di volte la stringa s
*/
public static int maxOccorrenze (String[][] mat, String s) {
if (mat == null)
return -1;

int indice = -1; // l'indice cercato
int max = -1; // il numero massimo di occorrenze di s trovato

// scorro la matrice per colonne
for (int c=0; c<mat[0].length; c++) {

// conto le occorrenze di s pe la colonna in elaborazione
int occorrenze = 0;
for (int r=0; r<mat.length; r++)
if (mat[r][c].equals(s))
occorrenze++;

// questa colonna ha il record di occorrenze, memorizzo indice e record
if (occorrenze > max) {
indice = c;
max = occorrenze;
}
}

return indice;
}

/* Visualizza la colonna j-esima della matrice mat */
public static void stampaColonna (String[][] mat, int j) {
if (mat == null)
return;

System.out.println ("Stampa colonna n." + (j+1));
for (int r=0; r<mat.length; r++)
System.out.println ("r." + (r+1) + " " + mat[r][j]);
}
}


class TestEsercizio {

/* Chiede all'utente dimensioni matrice, stringa di ricerca e matrice stessa.
* Usando la classe Esercizio individua la colonna con piu' occorrenze della stringa.
* Usando la classe Esercizio stampa la colonna della matrice.
*/
public static void main (String args[]) {
// chiedo dimensioni matrice e stringa
int numRighe = leggiInt ("Numero di righe della matrice: ", 1, 10);
int numColonne = leggiInt ("Numero di colonne della matrice: ", 1, 10);
String str = leggiRiga ("Stringa di ricerca: ");

// creo la matrice e la popolo
String mat[][] = new String[numRighe][numColonne];
for (int r=0; r<numRighe; r++)
for (int c=0; c<numColonne; c++)
mat[r][c] = leggiRiga ("Inserisci la stringa alla riga " + (r+1) + " colonna " + (c+1) + ": ");

// Individuo la colonna con piu' occorrenze di str
Esercizio esercizio = new Esercizio();
int indice = esercizio.maxOccorrenze(mat, str);

// Stampo la colonna della matrice
esercizio.stampaColonna(mat, indice);
}

/* metodo di comodo che legge una riga da tastiera */
private static String leggiRiga (String prompt) {
InputStreamReader isr = new InputStreamReader (System.in);
BufferedReader br = new BufferedReader (isr);
String s = null;

try {
System.out.print(prompt);
s = br.readLine ();
} catch ( IOException ioe ) {
System.out.println ("Errore di lettura. Termine programma.");
System.exit(1);
}

return s;
}

/* Metodo di comodo che legge un numero.
* Per controllo si impone che il numero sia compreso tra 2 estremi
*/
private static int leggiInt (String prompt, int min, int max) {
int n = 0;
String s = leggiRiga (prompt);

try {
n = Integer.parseInt (s);
} catch (NumberFormatException nfe) {
System.out.println ("Errore di conversione numero. Termine programma.");
System.exit(1);
}

if (n < min || n > max) {
System.out.println ("Numero " + n + " fuori dai limiti (min=" + min + ", max=" + max + ")");
System.exit(1);
}

return n;
}
}


ciao trallalero :)

trallallero
20-06-2006, 11:37
ciao trallalero :)

ciao :ciapet:
'azz! giá 2 messaggi :D

EDIT: 68 messaggi ? :eek: mi ricordavo 2 al massimo :D

Lo_Straniero2003i
20-06-2006, 13:16
strazz!!! grazie moGio m'hai salvato il .... :D

Grazie a tutti!!!
E' proprio un bellissimo ambiente!!!

moGio
20-06-2006, 13:29
Figurati :)

solo una precisazione: nell'esercizio si richiede che i due metodi maxOccorrenze() e stampaColonna() siano statici

in un linguaggio ad oggetti e' una cosa un po' antipatica ricorrere a metodi statici, ma visto che ;'esercizio lo richiedeva ho obbedito :)

pero' poi quando tali metodi li ho chiamati, non li ho usati come statici, ma ho comunque istanziato un oggetto di tipo Esercizio e poi ho invocato quelli di tale oggetto.


// Individuo la colonna con piu' occorrenze di str
Esercizio esercizio = new Esercizio();
int indice = esercizio.maxOccorrenze(mat, str);

// Stampo la colonna della matrice
esercizio.stampaColonna(mat, indice);


mentre invece, visto che gia' li abbiamo fatti statici, almeno usiamoli come tali in questo modo:


// Individuo la colonna con piu' occorrenze di str
int indice = Esercizio.maxOccorrenze(mat, str);

// Stampo la colonna della matrice
Esercizio.stampaColonna(mat, indice);


funziona comunque in entrambi i casi.

Lieto di esserti stato d'aiuto. Ciao.

:) :) :)

Lo_Straniero2003i
20-06-2006, 14:20
si lo sapevo. Tutto è svolto ok. Ma una domanda:

Hai scritto questo:
System.out.println ("Stampa colonna n." + (j+1));
for (int r=0; r<mat.length; r++)
System.out.println ("r." + (r+1) + " " + mat[r][j]);

Ho provato ad eseguire l'esercizio:
mi da sempre indice 1 nel rislutato.
se io faccio:
ciao ciao ciao
xxxx ciao ciao
vvvv bbbb ciao

Ed s = "ciao" mi restituisce si la colonna dove compare più frequentemente la parola ma sempre con indice 1.

moGio
20-06-2006, 14:54
si lo sapevo. Tutto è svolto ok. Ma una domanda:

Hai scritto questo:
System.out.println ("Stampa colonna n." + (j+1));
for (int r=0; r<mat.length; r++)
System.out.println ("r." + (r+1) + " " + mat[r][j]);

Ho provato ad eseguire l'esercizio:
mi da sempre indice 1 nel rislutato.
se io faccio:
ciao ciao ciao
xxxx ciao ciao
vvvv bbbb ciao

Ed s = "ciao" mi restituisce si la colonna dove compare più frequentemente la parola ma sempre con indice 1.


ho appena provato:


> java TestEsercizio
Numero di righe della matrice: 3
Numero di colonne della matrice: 3
Stringa di ricerca: ciao
Inserisci la stringa alla riga 1 colonna 1: ciao
Inserisci la stringa alla riga 1 colonna 2: ciao
Inserisci la stringa alla riga 1 colonna 3: ciao
Inserisci la stringa alla riga 2 colonna 1: xxxx
Inserisci la stringa alla riga 2 colonna 2: ciao
Inserisci la stringa alla riga 2 colonna 3: ciao
Inserisci la stringa alla riga 3 colonna 1: vvvv
Inserisci la stringa alla riga 3 colonna 2: bbbb
Inserisci la stringa alla riga 3 colonna 3: ciao
Stampa colonna n.3
r.1 ciao
r.2 ciao
r.3 ciao
>


Quando vado a stampare il numero di riga e/o di colonna, io incremento sempre di 1 perche' in java gli indici partono da 0, ma quando interagisco con l'utente voglio che partano da 1.

quando chiedo all'utente di popolare la tabella, gli chiedo riga per riga tutte le colonne (come se stesse scrivendo)

nell'esempio mi ha restituito la colonna giusta (la terza)... generando la seguente matrice:


ciao ciao ciao
xxxx ciao ciao
vvvv bbbb ciao


come hai fatto la prova?

Lo_Straniero2003i
20-06-2006, 15:03
Ah...quindi tu (mi permetto di darti del tu) dici che è un problema di popolamento dell'array? Io faccio così:

[CODE]

class TestEsercizio2 {
public static void main(String [] args) {
String[][] nomi;
int ris;
String a;
ReadStream in = new ReadStream();
int f,h;
System.out.println("Inserisci il da dimensone delle righe:");
f = in.readInt();
System.out.println("Inserisci la dimensione dell colonne:");
h = in.readInt();
nomi = new String[f][h];
for(int i=0; i<f; i++) {
for(int j=0; j<h; j++) {
System.out.println("Inserisci l'elemento " + i + "," + j + " della matrice:");
nomi[i][j] = in.readString();
}
}
System.out.println("Inserisci la stringa da ricercare:");
a = in.readString();
ris = (Esercizio2.maxOccorrenze(nomi, a));
System.out.print("La colonna con piu' elementi uguali e' la numero ");
Esercizio2.stampaColonna(nomi, ris);

}
}

[\CODE]

Mi correggono :)

E che all'esame il tempo è poco e non si ha tempo di fare i commenti!! :muro:

trallallero
20-06-2006, 15:14
Ah...quindi tu (mi permetto di darti del tu)
Aaaaaaaaaaaaaah!!! :eek: SACRILEGIO!!!
ma tu non sai chi é moGio ? :read:

Devi dargli del loro! :D

trallallero
20-06-2006, 15:18
scherzi a parte ...
il codice andrebbe postato con
{CODE}
...
codice
,,,
{/CODE}
ovviamente le parentresi graffe sono quadre []
diventa piú leggibile ;)

moGio
20-06-2006, 15:43
Ah...quindi tu (mi permetto di darti del tu) dici che è un problema di popolamento dell'array? Io faccio così:

[CODE]

class TestEsercizio2 {
public static void main(String [] args) {
String[][] nomi;
int ris;
String a;
ReadStream in = new ReadStream();
int f,h;
System.out.println("Inserisci il da dimensone delle righe:");
f = in.readInt();
System.out.println("Inserisci la dimensione dell colonne:");
h = in.readInt();
nomi = new String[f][h];
for(int i=0; i<f; i++) {
for(int j=0; j<h; j++)
System.out.println("Inserisci l'elemento " + i + "," + j + " della matrice:");
nomi[i][j] = in.readString();
}
}
System.out.println("Inserisci la stringa da ricercare:");
a = in.readString();
ris = (Esercizio2.maxOccorrenze(nomi, a));
System.out.print("La colonna con piu' elementi uguali e' la numero ");
Esercizio2.stampaColonna(nomi, ris);

}
}

[\CODE]

Mi correggono :)

E che all'esame il tempo è poco e non si ha tempo di fare i commenti!! :muro:


certo che va benissimo il tu... e non dar retta a quel burlone di trallallero: sono anche io in fase di imparare java.

per quanto riguarda il tuo codice... hem... come dire...

probabilmente il problema e' il loop nidificato:


nomi = new String[f][h];
for(int i=0; i<f; i++) {
for(int j=0; j<h; j++)
System.out.println("Inserisci l'elemento " + i + "," + j + " della matrice:");
nomi[i][j] = in.readString();
}


questo loop stampa si tante volte la richiesta, ma mette il valore una sola volta per riga alla cella j

pero', su due piedi, io dubito fortemente che tu riesca a compilarlo... alcune cose:
- J e' usato fuori dal suo scope (viene dichiarato nel loop successivo)
- h,f ed a vengono usate senza inizializzarle (anche questo da errore in compilazione, o un warning)
- ReadStream non esiste
- readString() non esiste
- tutte le operazioni di lettura possono sollevare un'eccezione del tipo IOException e se non la controlli non compila il programma
- la readInt() legge i successivi 4 byte di uno stream ed io te la sconsiglierei per leggere da input... dovresti riuscire a digitare con la tastiera 4 byte di seguito :)

prova a cercare di capire meglio l'esempio che ti ho postato perche' fa esattamente quanto l'esercizio si prefigge... guardando le classi usate sul libro...

e non scoraggiarti: ci sono passato da poco anche io :)

in bocca al lupo

Lo_Straniero2003i
20-06-2006, 15:47
CREPI!!!
Grazie di tutto gente!!!

Lo_Straniero2003i
20-06-2006, 15:55
Per quanto riguarda la classe ReadStream è una classe che il docente ha messo a diposizione di tutti in quanto ancora non siamo capacia di fare classi così complicate...dice lui... :eek: