mafalda
Apprendista Forumista

Offline
Posts: 430
CЯΣDΣЯCI SΣMPЯΣ, ΛЯЯΣПDΣЯSI MΛI!
|
 |
« on: 08-05-2010, 08:44:09 » |
|
Qualcuno mi può aiutare con questo semplice esercizio. Invece di tornarmi come output l'array di numeri, mi torna un indirizzo. Posto il codice: class Esercizio { public static void main (String [] args) { int [] Array= {5, 9, 7, 8, 6, 6, 3, 4, 7, 7, 9, 8}; System.out.println(cambia(Array,0,11)); }
public static int [] cambia (int [] Array,int a,int b) { if (a==b) return Array; int c= (int) ((a+b)/2); int tmp = Array[a]; Array[a] = Array[b]; Array[b] = tmp; cambia(Array,a,c); cambia(Array,c+1,b); } } Grazie..
|
|
|
Logged
|
...๔єςเ, ๔єςเ, ๔єςเ...
|
|
|
R3m
Apprendista Forumista

Offline
Gender: 
Posts: 486
|
 |
« Reply #1 on: 08-05-2010, 09:05:52 » |
|
semplice, l'errore è al primo return...perchè torni Array e non un indice dell'array stesso if (a==b) return Array;
Diciamo che Array è un puntatore alla memoria che contiene tutti gli elementi, e Array[0],[1]...ecc sono gli indici, sono due cose diverse.
|
|
|
Logged
|
Ciò che è nostro è stato in campo sudato....ciò che vostro è stato in aula assegnato. In serie B non sei mai stato perchè la prescrizione t'ha salvato.
|
|
|
mafalda
Apprendista Forumista

Offline
Posts: 430
CЯΣDΣЯCI SΣMPЯΣ, ΛЯЯΣПDΣЯSI MΛI!
|
 |
« Reply #2 on: 08-05-2010, 09:43:34 » |
|
Ecco grazie!!!  . Il mio problema adesso è un altro perchè togliendo la if, il compilatore mi dice il seguente messaggio: "missing return statement", e il codice è questo: class Esercizio { public static void main (String [] args) { int [] Array= {5, 9, 7, 8, 6, 6, 3, 4, 7, 7, 9, 8}; System.out.println(cambia(Array,0,11)); }
public static int [] cambia (int [] Array,int a,int b) { int c= (int) ((a+b)/2); int tmp = A[a]; A[a] = A[b]; A[b] = tmp; cambia(Array,a,c); cambia(Array,c+1,b); } } Come dovrei risolvere il problema? Cosa scrivere? 
|
|
|
Logged
|
...๔єςเ, ๔єςเ, ๔єςเ...
|
|
|
R3m
Apprendista Forumista

Offline
Gender: 
Posts: 486
|
 |
« Reply #3 on: 08-05-2010, 09:52:50 » |
|
francamente dipende da cosa vuoi che stampi quella funzione, comunque hai sbagliato, il problema non era nell'if ma in quello che ritorni...prova a mettere if(a == b) return Array[a];
|
|
|
Logged
|
Ciò che è nostro è stato in campo sudato....ciò che vostro è stato in aula assegnato. In serie B non sei mai stato perchè la prescrizione t'ha salvato.
|
|
|
mafalda
Apprendista Forumista

Offline
Posts: 430
CЯΣDΣЯCI SΣMPЯΣ, ΛЯЯΣПDΣЯSI MΛI!
|
 |
« Reply #4 on: 08-05-2010, 09:58:20 » |
|
ok provo e ti faccio sapere..
|
|
|
Logged
|
...๔єςเ, ๔єςเ, ๔єςเ...
|
|
|
mafalda
Apprendista Forumista

Offline
Posts: 430
CЯΣDΣЯCI SΣMPЯΣ, ΛЯЯΣПDΣЯSI MΛI!
|
 |
« Reply #5 on: 08-05-2010, 10:00:57 » |
|
Non funziona uguale..c'è il seguente errore
incompatible types found : int required: int[]
|
|
|
Logged
|
...๔єςเ, ๔єςเ, ๔єςเ...
|
|
|
R3m
Apprendista Forumista

Offline
Gender: 
Posts: 486
|
 |
« Reply #6 on: 08-05-2010, 10:03:29 » |
|
Si chiedo scusa  non avevo considerato una cosa..ti ho scritto il programma corretto class Esercizio { public static void main (String [] args) { int [] Array= {5, 9, 7, 8, 6, 6, 3, 4, 7, 7, 9, 8}; cambia(Array,0,11); for( int i=0; i<Array.length; i++) System.out.print( Array[i]+" " ); }
public static void cambia ( int[] A, int a, int b ) { if(a == b) return; int c= (int) ((a+b)/2); int tmp = A[a]; A[a] = A[b]; A[b] = tmp; cambia(A,a,c); cambia(A,c+1,b); } }
Per caso questo è uno degli esercizi di Faro della categoria ricorsione?
|
|
|
Logged
|
Ciò che è nostro è stato in campo sudato....ciò che vostro è stato in aula assegnato. In serie B non sei mai stato perchè la prescrizione t'ha salvato.
|
|
|
mafalda
Apprendista Forumista

Offline
Posts: 430
CЯΣDΣЯCI SΣMPЯΣ, ΛЯЯΣПDΣЯSI MΛI!
|
 |
« Reply #7 on: 08-05-2010, 10:10:53 » |
|
Si chiedo scusa  non avevo considerato una cosa..ti ho scritto il programma corretto class Esercizio { public static void main (String [] args) { int [] Array= {5, 9, 7, 8, 6, 6, 3, 4, 7, 7, 9, 8}; cambia(Array,0,11); for( int i=0; i<Array.length; i++) System.out.print( Array[i]+" " ); }
public static void cambia ( int[] A, int a, int b ) { if(a == b) return; int c= (int) ((a+b)/2); int tmp = A[a]; A[a] = A[b]; A[b] = tmp; cambia(A,a,c); cambia(A,c+1,b); } }
Per caso questo è uno degli esercizi di Faro della categoria ricorsione? Si perfetto  Grazie mille!!! 
|
|
|
Logged
|
...๔єςเ, ๔єςเ, ๔єςเ...
|
|
|
cock86
|
 |
« Reply #8 on: 08-05-2010, 11:37:56 » |
|
avete risolto il problema cambiando metodo, e va bene. Però trovo utile che Mafalda cerchi di correggere il suo codice. "missing return statement" perchè?? tu crei un metodo e dice nella firma che deve tornare un vettore interi, eliminando il blocco selettivo con tutto il return di mezzo, il metodo non restituisce più niente, e allora c'è unìinconsistenza tra la firma e il codice, invece ancora prima il problema era appunto che tu restituivi il riferimento all'array e non l'array stesso.
|
|
|
Logged
|
Un "buon informatico" trova una soluzione ad ogni tipo di problema. Un "ottimo informatico" trova la soluzione più efficiente ad ogni tipo di problema! Non stancatevi di migliorare la vostra soluzione!
|
|
|
mafalda
Apprendista Forumista

Offline
Posts: 430
CЯΣDΣЯCI SΣMPЯΣ, ΛЯЯΣПDΣЯSI MΛI!
|
 |
« Reply #9 on: 08-05-2010, 12:26:02 » |
|
Si si infatti adesso mi è tutto chiaro...capitano questi errori e parlarne aiuta a risolverli 
|
|
|
Logged
|
...๔єςเ, ๔єςเ, ๔єςเ...
|
|
|
|