Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2011
    Messaggi
    15

    Controllo su Integer.parseInt()

    Ciao a tutti,
    usando JOptionPane mi sono imbattuto in un problema. JOptionPane è un ottimo I/O ma in input purtroppo accetta solo String. Dato che mi sono incaponito e voglio fare in modo che accetti solo int, tramite Integer.parseInt() riesco a trasformare la stringa in un intero.

    Ma adesso, come faccio a controllare se Integer.parseInt() mi restituisce un intero oppure no?

    Ho tentato con la funzione isNaN() ma non mi funziona. Vi riporto il codice:

    codice:
    .....
    String fraj = JOptionPane.showInputDialog("Inserisci Un Numero");
    do {
    	JOptionPane.showMessageDialog(null, "Non Hai Inserito Un Numero");
    	fraj = JOptionPane.showInputDialog("Inserisci Un Numero");
    	} while (isNaN(Integer.parseInt(fraj)));
    j = Integer.parseInt(fraj);
    .....
    Ho tentato anche con un blocco Try/Catch ma non mi riesce a fare un ciclo.
    Spero di essere stato chiaro e che mi possiate dare una mano.

    Ciao

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Controllo su Integer.parseInt()

    Originariamente inviato da odranoel
    Ma adesso, come faccio a controllare se Integer.parseInt() mi restituisce un intero oppure no?

    Ho tentato anche con un blocco Try/Catch ma non mi riesce a fare un ciclo.
    Il modo corretto e appropriato è catturare NumberFormatException.

    Per il fatto del ciclo, si potrebbe fare così. Innanzitutto fai un ciclo while(true) { ..... } e nel corpo come prima cosa fai la richiesta con il showInputDialog. Quindi fai un try-catch e nel blocco try fai il Integer.parseInt del String ricevuto. Se è ok non lancia nulla e puoi fare un break per uscire dal ciclo. Se passa nel catch puoi scegliere di mostrare un messaggio di errore o non fare nulla. Tanto il ciclo poi si ripete.

    Meglio ancora se tutto questo fosse incapsulato in un metodo. Puoi fare direttamente un return del valore restituito da parseInt.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2011
    Messaggi
    15
    Grazie bella idea!
    adesso provo tutte e due le soluzioni poi ti faccio sapere

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2011
    Messaggi
    15
    Dunque ho fatto la modifica che mi hai suggerito, o almeno l'ho capita così:

    codice:
    private static int inserisciNum() {
    	int j = 0;
    	while (true) {
    		String fraj = JOptionPane.showInputDialog("Inserisci Un Numero");
    		try {
    			j = Integer.parseInt(fraj);
    		} catch (NumberFormatException e) {
    			JOptionPane.showMessageDialog(null, "Non Hai Inserito Un Numero");
    		}
    		System.out.println(j);
    		return j;
    	}
    }
    Ancora non funziona, non so dove sbaglio. Nel senso se inserisco un numero ok bene, se inserisco un char mi ritorna zero e non cicla.

    Riesci a darmi un suggerimento?
    Grazie

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2011
    Messaggi
    15
    Ho risolto!

    Posto il codice nel caso servisse a qualcuno.

    codice:
    private static int inserisciNum() {
    	int j = 0;
    	while (true) {
    		String fraj = JOptionPane.showInputDialog("Inserisci Un Numero");
    		try {
    			j = Integer.parseInt(fraj);
    			break;
    		} catch (NumberFormatException e) {
    			JOptionPane.showMessageDialog(null, "Non Hai Inserito Un Numero");
    		}
    	}
    	System.out.println(j);
    	return j;
    }
    Ciao grazie andbin.

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da odranoel
    codice:
    private static int inserisciNum() {
    	int j = 0;
    	while (true) {
    		String fraj = JOptionPane.showInputDialog("Inserisci Un Numero");
    		try {
    			j = Integer.parseInt(fraj);
    		} catch (NumberFormatException e) {
    			JOptionPane.showMessageDialog(null, "Non Hai Inserito Un Numero");
    		}
    		System.out.println(j);
    		return j;
    	}
    }
    Quando prima dicevo (se lo incapsuli in un metodo) "Puoi fare direttamente un return del valore restituito da parseInt." intendevo proprio dire che puoi fare nel blocco del try:

    return Integer.parseInt(fraj);

    E quindi senza dover usare alcuna variabile int. Se va bene ritorna subito, se non va bene, comunque cicla di nuovo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2011
    Messaggi
    15
    Mitico!

    codice:
    private static int inserisciNum() {
    	while (true) {
    		String fraj = JOptionPane.showInputDialog("Inserisci Un Numero");
    		try {
    			return Integer.parseInt(fraj);
    			} catch (NumberFormatException e) {
    			JOptionPane.showMessageDialog(null, "Non Hai Inserito Un Numero");
    		}
    	}
    }
    Grazie mille, ancora più pulito

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da odranoel
    codice:
    private static int inserisciNum() {
    ....
    Corretto.

    Ti segnalo solo una piccola cosa in più. La dialog di input ha anche il pulsante di "Annulla". Se volessi gestirlo, si può fare ma devi cambiare le cose (valutando cosa fare nel caso di annullamento).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2011
    Messaggi
    15
    Bene ci provo subito

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2011
    Messaggi
    15
    Per gestire il tasto annulla ho pensato a variare così:

    codice:
    private static int inserisciNum() {
    	while (true) {
    		String fraj = JOptionPane.showInputDialog("Inserisci Un Numero");
    		if (fraj != null) {
    			try {
    				return Integer.parseInt(fraj);
    			} catch (NumberFormatException e) {
    				JOptionPane.showMessageDialog(null, "Non Hai Inserito Un Numero");
    			}
    		} else {
    			JOptionPane.showMessageDialog(null, "Azione annullata");
    			return -1;
    		}
    	}
    }
    Poi dato che il numero inserito mi serve per una somma nel main ho inserito anche

    codice:
    sum = Somma.calculateSum(sum);
    if(sum != -1){
    	System.out.println(sum);	
    }else{
    	System.out.println("Operazione annullata");
    return;
    }
    Il codice gira correttamente.Ti sembra formalmente corretta? Ho hai in mente qualcosa di meglio?

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.