Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    controllo su interi inseriti tramite JOptionPane.showInputDialog

    Salve, volevo chiedervi una cosa che mi stà un pò facendo tribolare..
    io devo inserire un valore intero positivo e lo faccio tramite:
    codice:
    k = Integer.parseInt(JOptionPane.showInputDialog(null, "Inserisci il numero di direzioni per costruire la matrice A: "));
    Questa istruzione è messa dentro ad un ciclo do-while in modo da permettermi di re-inserire il valore se per sbaglio viene inserito un valore negativo (es. -5).

    inoltre, insieme ad altre istruzioni, è messa dentro ad un blocco
    codice:
    try{ 
    .....  
    } catch (HeadlessException | NumberFormatException | IOException e) {           }
    Vorrei sapere se c'è un modo per fare un controllo se all'inserimento di k viene inserita una stringa, un carattere o qualsiasi cosa che non sia un numero intero?

    Grazie anticipatamente per la risposta.

    N.B. Avevo messo un istruzione nel corpo catch che generava un messaggio di errore se ciò accadeva, ma poi mi faceva finire l'esecuzione del programma.

  2. #2
    Ho provato a mettere:
    codice:
    try{
          k = Integer.parseInt(JOptionPane.showInputDialog(null, "Inserisci il numero di direzioni per   costruire la matrice A: "));}}catch(NumberFormatException e) {                     JOptionPane.showMessageDialog(null, "NON HAI INSERITO UN INTERO");
    e mi stampa il messaggio, ma poi l'esecuzione del programma termina con una IndexOfBoundsException riguardante una riga successiva che chiama un metodo per costruire una matrice e che prende k come parametro.

    Qualcuno saprebbe aiutarmi??

  3. #3
    Semplicemente ti basta prima di tutto inserire il try e cath all'interno del while e aggiungere un'altra clausola catch(ArrayIndexOfBoundsException )

  4. #4
    Ok ho risolto con un flag:
    codice:
    boolean flag;
                 do {
                     flag = false;
                     try{
                     k = Integer.parseInt(JOptionPane.showInputDialog(null, "Inserisci il numero di direzioni per costruire la matrice A: "));
                     }catch(NumberFormatException e ){
                         flag = true;
                     }
                     if ( k < 0 || flag == true) {
                         JOptionPane.showMessageDialog(null, "ATTENZIONE! È STATO INSERITO UN VALORE ERRATO.\nINSERIRE UN NUMERO INTERO POSITIVO", "ATTENZIONE!", JOptionPane.WARNING_MESSAGE); 
                     }
                 } while (k < 0 || flag == true);
    Solo che adesso se clikko su ANNULLA o sulla X in alto a destra nella finestra di dialogo continua ad stamparmi il messaggio ovviamente.
    Qualcuno sà come posso fare a "dirlgi di uscire" dal programma se premo annulla o x?

    Grazie anticipatamente

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    JOptionPane.showInputDialog() è un metodo che è sottoposto ad overload.
    Tu stai usando una versione di tale metodo che non ti serve... se passi "null" come primo argomento e una stringa come secondo argomento, quale di queste versioni verrà invocata?

    showInputDialog(Object message, Object initialSelectionValue)
    showInputDialog(Component parentComponent, Object message)

    in questo momento non lo so e non ho nessuna intenzione di andarlo a verificare... rimane il problema che, per quel che desideri fare, c'è un metodo molto più specializzato:

    showInputDialog(Object message)

    Detto questo, per controllare se l'utente ha premuto il pulsante "Annulla" ti è sufficiente verificare che il valore restituito sia nullo. Infatti, se l'utente non digita nulla e conferma viene restituita una stringa vuota; al contrario, se l'utente annulla l'inserimento viene restituito null. E non c'è nemmeno bisogno della variabile booleana supplementare:

    codice:
    do {
       k = -2;   // Valore di default (non valido)
       String value = JOptionPane.showInputDialog("Inserisci il numero di direzioni per costruire la matrice A: ");
       if (value != null) {
          try{
             k = Integer.parseInt( value );
          }catch(NumberFormatException e ){
             k = -2;   // Non serve, ma non fa male
          }
          if (k < 0) {
             JOptionPane.showMessageDialog(null, "ATTENZIONE! È STATO INSERITO UN VALORE ERRATO.\nINSERIRE UN NUMERO INTERO POSITIVO", "ATTENZIONE!", JOptionPane.WARNING_MESSAGE); 
          }
       } else {
          // L'utente ha annullato l'inserimento
          k = -1;
       }
    } while (k < -1);
    Se esci dal do/while dovrai controllare che il valore di k sia >= 0 per procedere, altrimenti significa che l'utente ha annullato l'inserimento e ti comporterai di conseguenza.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.