Domanda

Sto cercando di eseguire un po 'di codice che esegue la scansione per un valore di input dell'utente. Questa azione è contenuta in un metodo personalizzato che ho scritto, denominato GetTrianGledim (); Il metodo legge nel valore INT utente, assicura che sia all'interno di un determinato intervallo, quindi restituisce il valore INT inserito. Il metodo funziona alla grande e non ho problemi con esso.

Il problema sorge quando inserisco un valore non int per il mio metodo GetTrianGledim (). Mi dà un errore di inputmistchatcheception. Ho scritto una dichiarazione try-cat in un ciclo di do-while per tentare di risolvere questo problema. Ma questa è la prima volta che abbia mai usato una dichiarazione try-catch, e apparentemente mi manca qualcosa.

Ecco il codice per la dichiarazione try-cat nidificata all'interno del ciclo DO-WHILE:

//loop to scan for triangle dimension
        boolean bError = true;
        int triangle;

        do{
            try {
                triangle = getTriangleDim();
                bError=false;
                }
            catch (Exception e){
                System.out.println("You did not enter an integer, please enter an integer value");
                triangle = getTriangleDim();

                }
        }while (bError);
.

Se lo testo inserendo un valore di char al posto dell'int, in realtà cattura l'errore una volta, quindi stampa la mia "Non hai .....". Ma se rientro un altro numero non int, ricevo di nuovo un errore di runtime che dice ....... hai indovinato ........ Errore di inputmismatchException.

Il codice per il mio metodo è qui:

//method for scanning triangle dimensions from keyboard
    public static int getTriangleDim(){
        int triangle = 0;
        Scanner keyboard = new Scanner(System.in);
        do{
        System.out.print("Enter a non-zero integer length (+/-1 - +/-16): ");
        triangle = keyboard.nextInt();
        if((!(triangle <= 16 && triangle >= 1))&&(!(triangle >= -16 && triangle <= -1)))
            System.out.println("Inpute value outside of range");
        }while((!(triangle <= 16 && triangle >= 1))&&(!(triangle >= -16 && triangle <= -1)));
        return triangle;
    }
.

Ho bisogno del ciclo di do-while per continuare, ma continuo a ricevere questi errori.

È stato utile?

Soluzione

Non è necessario richiedere l'ingresso nel blocco catch. Sei già in un ciclo, quindi puoi catturare l'eccezione, dì all'utente di darti un input valido, e quindi non devi fare nient'altro - andrai indietro all'inizio. .

Come nota laterale (e come hai notato), il tuo codice non sarà attualmente compilato se si tenta di utilizzare triangle al di fuori di quel blocco try, perché "triangle might not have been initialized". Ciò è dovuto al fatto che il compilatore non può determinare a tempo di compilazione quale il tuo programma farà in fase di esecuzione < / A>: cioè, il compilatore non può vedere che triangle verrà sempre inizializzato entro tale loop. Quindi la tua dichiarazione variabile dovrebbe anche impostare triangle ad un po 'di valore predefinito. 0 è il normale predefinito per int, ma usa qualsiasi cosa ha senso nel tuo programma (sembra che 0 stia bene, in base al codice getTriangleDim).

int triangle = 0;
do { // etc.
.

In questo modo è possibile "promettere" il compilatore che triangle avrà un valore entro il tempo in cui lasci il loop e sarai in grado di usarlo altrove.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top