|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
[JAVA] Aiuto per newbie
Chi gentilmente potrebbe scrivermi questi tre metodi (con dei commenti vicino)? Mi servono per l'Università grazie mille
1. Scrivere un metodo statico static int[] rimuoviDuplicati (int[] A) che restituisce un nuovo array ottenuto dall’array A rimuovendo tutti i duplicati. 2. Scrivere un metodo statico static boolean arrayUguali(int[] A,int[] B) che restituisce true se gli array A e B sono uguali (cioè hanno tutti gli elementi corrispondenti uguali), e false altrimenti. 3. Scrivere un metodo static boolean stessiElementi(int[] A, int[] B) che restituisce true se gli array A e B contengono gli stessi elementi e false altrimenti. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
|
di primo acchito non mi sembrano difficili neanche per te
butta giù due righe di codice che poi le correggiamo insieme |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Il problema è che non so molto bene come operare sugli array. Per esempio in questi casi semplici.
Ad esempio provo a fare il secondo public static boolean arrayUguali (int[] a, int[] b){ for (int i=0; i<a.length; i++){ if (a[i]==b[i]){ ...... ecco per esempio qua non saprei dove mettere il return. Perché se lo metto subito dopo la condizione, quando vado a compilare naturalmente mi dice che manca appunto il return. |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
Attento che cosi facendo non realzzi correttamente il metodo, perchè se controlli l'uguaglianza devi comunque scorrere tutto l'array e non ritornare appena trovi due elementi uguali.
Alternativamente puoi controllare la disuguaglianza tra due elementi e quindi ritornare false appena trovi una coppia di elementi diversi. Inoltre tieni presente che o1 == o2 è true se o1 e o2 sono lo stesso oggetto o1.equals(o2) è true se o1 e o2 sono uguali, cioè hanno lo stesso valore, ma possono anche essere oggetti diversi.
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Dec 2001
Città: Roma
Messaggi: 542
|
Non ho capito bene la differenza tra il secondo ed il terzo metodo...nel secondo gli elementi devono essere gli stessi nelle stesse posizioni, mentre nel terzo devono essere gli stessi elementi ma possono essere in posizioni diverse, è così?
Se ho capito bene per il secondo metodo puoi fare Codice:
public static boolean arrayUguali (int[] a, int[] b){
if (a.length != b.length) return false;
boolean b = true;
for (int i=0; i<a.length; i++){
if (a[i]!=b[i]){
b = false;
break;
}
}
return b;
}
Quello che ha detto anx721 sull'equals e sull'operatore == è vero, però se devi lavorare su array di interi non ci devi fare caso perchè gli int non sono oggetti ma tipi primitivi su cui vale solo l'uguaglianza di valore (==).
__________________
Il 90% dei problemi di un computer si trova tra la tastiera e la sedia. XP2500+@3200+|A7N8X Deluxe|1,25 GB DDR400|Radeon 9550|HD 160+320 GB SATA|WinXP Pro|Fastweb 6 Mb/s Ultima modifica di gabriele81 : 26-02-2004 alle 22:42. |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
attenzione ai nomi delle variabili locali...
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Dec 2001
Città: Roma
Messaggi: 542
|
Quote:
oooooops non me ne ero accorto..... la variabile booleana va chiamata in un altro modo perchè già un array si chiama b.
__________________
Il 90% dei problemi di un computer si trova tra la tastiera e la sedia. XP2500+@3200+|A7N8X Deluxe|1,25 GB DDR400|Radeon 9550|HD 160+320 GB SATA|WinXP Pro|Fastweb 6 Mb/s |
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
|
Quote:
Puoi provare a stendere del codice, anche stupido e sbagliato, poi possiamo intervenire e aiutarti. Nell'esempio da te citato ti dice che manca il ritorno di un valore, perchè tu dichiari un metodo Boolean e il compilatore pretnde che alla fine del metodo tu gli restituisca un boolean Codice:
public static boolean arrayUguali (int[] a, int[] b){
if (a.length != b.length)
return false; //che senso ha un controllo di uguaglianza su 2 array di lunghezza diversa?
for (int i=0; i<a.length; i++){
if (a[i]!=b[i])
return false;
}
return true;
}
|
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Quote:
Cmq grazie a tutti per l'aiuto. |
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
|
Tu chiedi in un certo modo e qui troverai tutto l'aiuto possibile
|
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
Quote:
Concordo in tutto con cn73, se vedi questi tre metodi già risolti forse li capirai, ma non avrai capito perchè sono fatti in un certo modo, se fai delle prove e sbagli e chiedi poi perchè non funzionano qlcosa capisci.
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
|
|
|
|
|
|
#12 | |
|
Bannato
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
|
Re: [JAVA] Aiuto per newbie
Quote:
I miei neuroni (stanchi) hanno prodotto quel che segue: Codice:
static int[] rimuoviDuplicati(int[] arrayA) {
int[] indiciDuplicati = new int[arrayA.length];
int limiteIndiciDuplicati = 0;
for(int i = 0; i < arrayA.length - 1; i++) {
int elemento = arrayA[i];
for(int j = (i + 1); j < arrayA.length; j++) {
if(arrayA[j] == elemento) {
//duplicato
indiciDuplicati[limiteIndiciDuplicati] = j;
limiteIndiciDuplicati++;
}
}
}
int[] nuovoArray = new int[arrayA.length - limiteIndiciDuplicati];
int indiceNuovoArray = 0;
for(int i = 0; i < arrayA.length; i++) {
boolean add = true;
for(int j = 0; j < limiteIndiciDuplicati; j++) {
if(i == indiciDuplicati[j]) {
add = false;
}
}
if(add) {
nuovoArray[indiceNuovoArray] = arrayA[i];
indiceNuovoArray++;
}
}
return nuovoArray;
}
2 Qui non dovrebbe essere nulla di trascendentale. Codice:
static boolean arrayUguali(int[] arrayA, int[] arrayB) {
boolean answer = (arrayA.length == arrayB.length);
int index = 0;
while(answer && index < arrayA.length) {
answer = arrayA[index] == arrayB[index];
index++;
}
return answer;
}
Bisogna capire cosa significhi "stessi elementi". Due array che contengono gli stessi numeri in posizioni diverse hanno gli stessi elementi. Ma un array che contenga una certa quantità di duplicati ha gli stessi elementi di un array che contenga gli stessi numeri senza duplicati? Ad esempio: 1 2 3 4 5 6 6 6 6 ha gli stessi "elementi" di 6 5 4 3 2 1 ? |
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
|
PGI hai notato che se gli passiamo 2 array vuoti i metodi da noi proposti restituiscono true? E' corretto?
|
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
Quote:
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
|
|
|
|
|
|
#15 | |
|
Bannato
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
|
Quote:
Mi sembra comunque corretto quanto dice anx721, in fondo due array vuoti sono pur sempre "uguali" dal punto di vista del contenuto. |
|
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
|
ho fatto anch'io un esperimento come ripasso
ulteriori controlli mettili tu Codice:
static int[] Duplicati(int[] ArrayDup) {
ArrayList lista = new ArrayList();
for (int i = 0; i < ArrayDup.length; i++){
Integer t = new Integer(ArrayDup[i]);
if( !lista.contains(t) )
lista.add(t);
}
int i = 0;
int[] array = new int[lista.size()];
Iterator iter = lista.iterator();
while (iter.hasNext())
array[i++] = Integer.parseInt(iter.next().toString());
return array;
}
Ultima modifica di misterx : 27-02-2004 alle 20:39. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:37.



















