Programmazione > Java

Creare una sorta di "goto" uscendo da un if-else

(1/6) > >>

Gas75:
Salve,
sto sviluppando un progettino/programmino matematico in Java, piuttosto essenziale e che già funziona tranne quando viene immesso un valore matematicamente non accettabile. :-\ Mi spiego meglio. :)

Tramite la classe Scanner ricevo in input tre valori di tipo int, r, i e g.
Ho bisogno di controllare che g sia un valore strettamente positivo prima di eseguire tutte le operazioni che portano all'output. Chiaramente potrei risolvere chiedendo da subito g e poi, se positiva chiedere anche r e i:
Code: You are not allowed to view links. Register or Loginif (g > 0) {
System.out.print("Immetti r: ");
int r = input.nextInt();
System.out.print("Immetti i: ");
int i = input.nextInt();
// tutto il resto del codice
} else {
System.out.print("Valore di g non valido!");
}
--- End code ---
Purtroppo sono vincolato, per la natura stessa di come viene generalmente impostato il problema matematico, a richiedere i dati in quell'ordine, per cui il controllo dev'essere fatto dopo l'immissione dell'ultimo valore che è quello da controllare.
Un "goto" tipico del Basic sarebbe l'ideale ma in Java, mi pare, non esiste una classe del genere.
Qualche idea a riguardo?

davenull:
ho eliminato la dicitura "java" dal titolo del tuo topic creando immediatamente la sezione adeguata. purtroppo non conosco il java e non posso aiutarti, lo iniziai a studiare anni fa quando era ancora della sun, poi è passata ad oracle (non vedo di buon occhio la oracle) e l'ho abbandonato come linguaggio. segnalo la tua richiesta di aiuto a tetsuya che conosce molto bene il java, sia per android che per x86!!! :)

devilicecream:
Secondo il mitico Dijkstra, il goto è un comando che non bisognerebbe mai utilizzare, perchè porta a diversi punti di uscita negli algoritmi e genera facilmente "spaghetti code".
Gli amici Bohm e Jacopini hanno inoltre dimostrato un teorema secondo cui qualunque programma scritto utilizzando il goto è riscrivibile senza di esso.
Nel tuo caso è abbastanza semplice:

Code: You are not allowed to view links. Register or Loginint isGValid = 0;
while (!isGValid) {
    System.out.print("Immetti r: ");
    int r = input.nextInt();
    System.out.print("Immetti i: ");
    int i = input.nextInt();
    System.out.print("Immetti g: ");
    int g = input.nextInt();
    if (g > 0) {
        isGValid = 1;
        // Tutto il resto del codice
    } else {
        System.out.print("Valore di g non valido!");
    }
}


--- End code ---

davenull:
nel mio caso creo tanti piccoli sottoprogrammi che fanno cose diverse, e si richiamano tra loro. in questo modo evito il goto ed il cosiddetto spaghetti code, infatti il mio codice è leggibilissimo e stracommentato!!! :D
i commenti sono fondamentali, specialmente se crei un progetto, lo abbandoni e lo riprendi dopo anni. non ti ricordi più cosa ti frullava nella testa quando hai creato il progetto, e soprattutto non è facilmente leggibile e modificabile nel caso in cui lo devi passare ad altri!!! giusto walter???
io sono del parere che puoi scrivere il miglior programma al mondo, ma se non è ben commentato è da cestinare!!!

Gas75:
You are not allowed to view links. Register or LoginSecondo il mitico Dijkstra, il goto è un comando che non bisognerebbe mai utilizzare, perchè porta a diversi punti di uscita negli algoritmi e genera facilmente "spaghetti code".
Gli amici Bohm e Jacopini hanno inoltre dimostrato un teorema secondo cui qualunque programma scritto utilizzando il goto è riscrivibile senza di esso.
Nel tuo caso è abbastanza semplice:

Code: You are not allowed to view links. Register or Loginint isGValid = 0;
while (!isGValid) {
    System.out.print("Immetti r: ");
    int r = input.nextInt();
    System.out.print("Immetti i: ");
    int i = input.nextInt();
    System.out.print("Immetti g: ");
    int g = input.nextInt();
    if (g > 0) {
        isGValid = 1;
        // Tutto il resto del codice
    } else {
        System.out.print("Valore di g non valido!");
    }
}

--- End code ---

--- End quote ---
Grazie, funzionicchia ;D ma va usato un boolean al posto di un int come "valore di controllo" isGValid...
Non va bene perché mi chiede daccapo anche i primi due valori mentre a me serve che torni soltanto su g. Per questo cercavo un "goto", che sinceramente a me non ha mai rappresentato problemi, tutt'ora lo sfrutto per dei programmini sulla mia calcolatrice. Forse perché sono programmi semplici, ma mi riesce più facile controllare dei "salti" di codice che scrivere un programma "saltando" da un .java all'altro!

Navigation

[0] Message Index

[#] Next page

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 
There was an error while thanking
Thanking...
Go to full version