Pages: [1]   Go Down
Print
Author Topic: SAPETE DARMI UNA MANO CON QUESTO PROG???  (Read 1429 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Alec
Matricola
*
Offline Offline

Gender: Male
Posts: 45


SF--->Sono Fuori


« on: 30-06-2009, 16:43:52 »

salve a tutti non capisco l'erroreeeeeee helpppp
è il compito di lab di prog1 del 23/06...mi da questo errore:

>javac lab.java
lab.java:60: missing return statement
   }
   ^
1 error
>Exit code: 1

 e non capisco il motivo  testate
Code:
abstract class numero
{
protected byte [] cifre;
public numero (byte [] x)
{
cifre=new byte [x.length];
for (int i=0; i<x.length; i++)
{
cifre[i]=x[i];
}
}
private int valore()
{
int valore=0;
int temp=cifre.length-1;
for (int i=0; i<cifre.length; i++)
{
if (i<0)
valore=cifre[temp];
else
{
int temp2 = i*10;
valore+=Math.pow(cifre[temp],temp2);
}
temp--;
}
return valore;
}
public int somma(numero n)
{
int temp1=((numero)n).valore();
int temp2=valore();
return (temp1+temp2);
}
abstract byte cifra();
}

class A extends numero
{
public A (byte [] x)
{
super(x);
}
public byte cifra()
{
return cifre[0];
}
private int c(int cc)
{
if (cc<3)
return (5);
else
if(cc<=3 && cc<7)
return(c(cc-1));
else

if (cc>=7)
return (c(cc-2)+cc);

}
public int codice()
{
int temp = cifra();
return (c(temp));
}
}

class B extends numero
{
public B (byte [] x)
{
super(x);
}
public byte cifra()
{
return cifre[cifre.length-1];
}
}

« Last Edit: 30-06-2009, 16:45:59 by Alec » Logged

"coDito ergo sum"
"i coDe therefore i am"
Fr3d3R!K
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.463



« Reply #1 on: 30-06-2009, 16:54:48 »

scusa ma a che ti serve l'istruzione
Code:
if (cc>=7)
? hai già analizzato tutte i possibili casi. Caso minore di 3, caso "tra 3 e 7". Rimane solamente un caso (se non è minore di 3 e compreso tra 3 e 7 sicuramente sarà maggiore di 7) quindi basta l'else.
Saluti.
Logged

Search Button, CODE Tag, Google & Italian language are your friends! Use Them!
Alec
Matricola
*
Offline Offline

Gender: Male
Posts: 45


SF--->Sono Fuori


« Reply #2 on: 30-06-2009, 17:04:30 »

grazie mille ok

però è una stranezza perche non mi funzionava....fondamentalmente una volta che dava vero non doveva semplicemente andare avanti???
« Last Edit: 30-06-2009, 17:06:18 by Alec » Logged

"coDito ergo sum"
"i coDe therefore i am"
Fr3d3R!K
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.463



« Reply #3 on: 30-06-2009, 17:13:44 »

E se per assurdo la condizione fosse stata falsa? ricordati che i computer sono stupidi, non danno per scontato nulla...
Il problema stava (come puoi vedere dal messaggio del compilatore) tutto nei return. Ogni struttura di selezione deve avere un return, così da garantire l'uscita dal metodo in ogni caso (e qui arriverà reverse a dare la definizione più tecnica della mia univ). Nel tuo caso manca il return per il caso in cui anche il terzo if fallisca. Siccome il fallimento dei primi due porta (come ti ho detto nel precedente messaggio) ad una sola conclusione, va messo l'else che starà a significare che la terza è anche l'ultima alternativa possibile. Spero sia tutto chiaro
Saluti.
Logged

Search Button, CODE Tag, Google & Italian language are your friends! Use Them!
Alec
Matricola
*
Offline Offline

Gender: Male
Posts: 45


SF--->Sono Fuori


« Reply #4 on: 30-06-2009, 17:17:40 »

cristallino direi...  yoh

grazie ancora
Logged

"coDito ergo sum"
"i coDe therefore i am"
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.474


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #5 on: 30-06-2009, 17:21:45 »

però è una stranezza perche non mi funzionava
Analizziamo bene il codice, parentesizzando i blocchi per una migliore leggibilità:
Code:
private int c(int cc)
{
if (cc<3)  //sezione A: c'è un RETURN in ogni sotto percorso
return (5);  //primo (ed unico) sottopercorso della sezione A
else //sezione B: c'è un return solo nelle sottosezioni BA e BBA, ma non in tutto B
{
if(cc<=3 && cc<7)  //sezione BA: c'è un return in ogni sotto percorso
return(c(cc-1));    //primo (ed unico) sottopercorso della sezione B1
else                        //sezione BB: c'è un return solo nella sottosezione BBA, ma non in tutto BB
{
if (cc>=7)       //sezione BBA: c'è un return in ogni sotto percorso
return (c(cc-2)+cc);
//poiché non c'è "else" qui, allora se [cc >= 7] è FALSO allora, si continua
//in questo pezzo di codice, che è vuoto e NON ha alcuna istruzione return;
}
}
}
Cioè, non tutti i percorsi che il flusso d'esecuzione potrebbe ipoteticamente seguire c'è una istruzione return.
Che poi effettivamente il blocco in cui dovrebbe stare il return non sarà mai raggiunto, questo è un dettaglio che il compilatore da solo non può prevedere (almeno non quello standard fornitoci da Sun a quanto pare).
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Vitocr
Matricola
*
Offline Offline

Posts: 84



« Reply #6 on: 30-06-2009, 17:52:40 »

devi togliere l'ultimo if.....cioè "l'if (cc>=7)" in quanto è scontato che se "cc" nn è minore 3 e "cc" nn è compreso tra 3 e 7..........sarà sicuramente maggiore di 7........quindi nel codice dovresti mettere qualcosa del tipo:


if (cc < 3)
       return 5

else if (cc<=3 && cc<7)
      return (c(cc-1))

else 
       return (c(cc-2)+cc)

 
Logged
Pages: [1]   Go Up
Print
Jump to: