Forum Informatica Unict

LAUREA TRIENNALE (D.M. 270/04) => Programmazione 2, 9 CFU => Topic started by: mafalda on 08-05-2010, 08:44:09



Title: Non ritorna l'output corretto
Post by: mafalda 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:
Code:
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..


Title: Re:Non ritorna l'output corretto
Post by: R3m on 08-05-2010, 09:05:52
semplice, l'errore è al primo return...perchè torni Array e non un indice dell'array stesso

Code:
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.


Title: Re:Non ritorna l'output corretto
Post by: mafalda on 08-05-2010, 09:43:34
Ecco grazie!!! .smile. Il mio problema adesso è un altro perchè togliendo la if, il compilatore mi dice il seguente messaggio: "missing return statement", e il codice è questo:

Code:
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? .leggo


Title: Re:Non ritorna l'output corretto
Post by: R3m 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

Code:
if(a == b)
    return Array[a];


Title: Re:Non ritorna l'output corretto
Post by: mafalda on 08-05-2010, 09:58:20
ok provo e ti faccio sapere..


Title: Re:Non ritorna l'output corretto
Post by: mafalda on 08-05-2010, 10:00:57
Non funziona uguale..c'è il seguente errore

incompatible types
found   : int
required: int[]


Title: Re:Non ritorna l'output corretto
Post by: R3m on 08-05-2010, 10:03:29
Si chiedo scusa  :yoh non avevo considerato una cosa..ti ho scritto il programma corretto

Code:
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?


Title: Re:Non ritorna l'output corretto
Post by: mafalda on 08-05-2010, 10:10:53
Si chiedo scusa  :yoh non avevo considerato una cosa..ti ho scritto il programma corretto

Code:
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  .smile Grazie mille!!!  :-OK .applausi


Title: Re:Non ritorna l'output corretto
Post by: cock86 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.


Title: Re:Non ritorna l'output corretto
Post by: mafalda on 08-05-2010, 12:26:02
Si si infatti adesso mi è tutto chiaro...capitano questi errori e parlarne aiuta a risolverli  .wink