Problemi return int

di il
7 risposte

Problemi return int

Salve a tutti il mio problema è il seguente. Vorrei far ritornare un intero, banale niente di complicato ma ho implementato un if per un controllo che necessito. il mio codice che vorrei implementare, sbagliato è:

public int activate(String title, String teacher)
{
if(indexC != MAX_COURSE)
{
course[indexC] = (title + ", " + teacher);
code = MIN_COURSE + indexC;
indexC++;
return code;
}
else
{
System.out.println("Massimo numero corsi raggiunto");
}

}

dove MIN_COURSE E MAX_COURSE sono delle costanti, indexC e code sono interi.

Il codice richiederebbe che return code sia fuori dall'if ma così ma così se il numero di elementi presenti nel vettore è maggiore della sua dimensione mi stampa

code
Massimo numero corsi raggiunto
code
Massimo numero corsi raggiunto

E così via per ogni elemento in più nel vettore. Vorrei quindi risolvere questo problema grazie in anticipo

7 Risposte

  • Re: Problemi return int

    dongio99 ha scritto:


    Il codice richiederebbe che return code sia fuori dall'if
    Al compilatore non interessa tanto se un if è fuori o dentro un if. Il compilatore effettua una analisi statica del flusso del codice e (si) assicura che qualunque sia il percorso che fa il codice, il metodo ritorni qualcosa. Hai un if e un else, quindi 2 rami. Il compilatore non sa ovviamente cosa succederà a runtime ma si aspetta che in entrambi i casi ci sia un return.

    Ora: puoi mettere un return nel else? O puoi far lanciare una eccezione? Devi valutarlo tu.
  • Re: Problemi return int

    Vorrei non tornasse niente e che però il codice continui stampando una sola volta l'errore. In caso io per verificare adesso che il codice funziona sto semplicemente utilizzando un for che crea un numero maggiore di elementi rispetto alla dimensione massima. Non esiste qualche keywords magica tipo "return null" o altro?
  • Re: Problemi return int

    dongio99 ha scritto:


    Vorrei non tornasse niente
    Se il tipo di ritorno è un int, no.

    dongio99 ha scritto:


    tipo "return null"
    Se fosse Integer invece che int, sì.

    Ma forse sarebbe più sensato restituire es. un boolean ("sì" / "no"). E poi quel code ce l'hai comunque, cioè ci accedi sicuramente (non so altro del tuo codice).
  • Re: Problemi return int

    Code è un intero non un boolean. Adesso ti metto la consegna.

    Per definire un nuovo insegnamento si utilizza il metodo activate() che riceve come parametri il titolo del corso e il nome del docente titolare. Il metodo restituisce un intero che corrisponde al codice del corso. I codici vengono assegnati progressivamente a partire da 10.

    Per conoscere le informazioni relative ad un corso si usa il metodo course() che riceve come parametro il codice del corso e resituisce una stringa contenente codice, titolo e titolare del corso, separati da virgole, es. "10,Programmazione a Oggetti,James Gosling".
    Si assuma che ciascun ateneo non possa attivare più di 50 insegnamenti.


    Questa è solo una parte naturalmente ma il problema è qui
  • Re: Problemi return int

    Allora, in Java un metodo che deve ritornare un valore (in questo caso un intero),

    DEVE

    rironare un valore

    SEMPRE

    che tu lo voglia o no.

    QUINDI, devi inventarti un valore che abbia senso e che tu interpreterai come nessun valore.

    In questo caso la soluzione e' semplice: se non puoi aggiungere un nuovo corso, lo segnali e ritorni "-1",
    che e' un intero valido, come valore intero, ma NON VALIDO se inteso come numero di corsi (mai visto un'universita' che abbia -1 corsi di computer science )


    Nota: la condizione e' un po' troppo stringente.
    E' corretta, MA se per caso uno sbaglia a scrivere e mette MIN_COURSE > MAX_COURSE, (tipo MIN_COURSE = 11, e MAX_COURSE = 4, perche' gli e' scappato un 1 di troppo), il tuo codice permeterebbe di inserire un INFINITO NUMERO di corsi. Invece, se scrivi
    
    if(indexC < MAX_COURSE) ...
    
    sei sicuro che indexC NON POTRAI' MAI essere maggiore di MAX_COURSE
  • Re: Problemi return int

    dongio99 ha scritto:


    Code è un intero non un boolean.
    Non ho affatto detto che code è o dovrebbe essere boolean ..

    dongio99 ha scritto:


    Per definire un nuovo insegnamento si utilizza il metodo activate() che riceve come parametri il titolo del corso e il nome del docente titolare. Il metodo restituisce un intero che corrisponde al codice del corso. I codici vengono assegnati progressivamente a partire da 10.
    [...]
    Si assuma che ciascun ateneo non possa attivare più di 50 insegnamenti.
    Ma non dice cosa dovrebbe succedere se non c'è più spazio disponibile .... e quindi potresti benissimo seguire quanto ha detto migliorabile: restituire un valore tipo -1
  • Re: Problemi return int

    Si non volevo mettere un flag come in C però da quello che ho capito è l'unica soluzione. Il fatto è che non volevo/non potrei modificare il main quindi la procedura di controllo volevo avvenisse nel metodo.
Devi accedere o registrarti per scrivere nel forum
7 risposte