Pages: [1]   Go Down
Print
Author Topic: Non ritorna l'output corretto  (Read 1278 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
mafalda
Apprendista Forumista
**
Offline 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:
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..
Logged

...๔єςเ, ๔єςเ, ๔єςเ...
R3m
Apprendista Forumista
**
Offline Offline

Gender: Male
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

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

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?
Logged

...๔єςเ, ๔єςเ, ๔єςเ...
R3m
Apprendista Forumista
**
Offline Offline

Gender: Male
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

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

Gender: Male
Posts: 486



« Reply #6 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?
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 Offline

Posts: 430


CЯΣDΣЯCI SΣMPЯΣ, ΛЯЯΣПDΣЯSI MΛI!


« Reply #7 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  Grazie mille!!!  ok
Logged

...๔єςเ, ๔єςเ, ๔єςเ...
cock86
Forumista Eroico
*****
Offline Offline

Posts: 2.014


OM


« 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 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

...๔єςเ, ๔єςเ, ๔єςเ...
Pages: [1]   Go Up
Print
Jump to: