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

    Controllare immissione valori > 0

    Salve, ho questo metodo per acquisire dati da riga di comando, invocato con la visualizzazione di un testo msg che indica il dato da inserire.

    codice:
    public static int leggiInt(String msg) {
       int res = 0;   Scanner input = new Scanner(System.in);
       boolean ok = false;
       while (!ok) {
          try {
              System.out.print(msg);
    		res = Integer.valueOf(input.next());
    		ok = true;
          } catch (Exception e) {
              System.out.println("Occorre immettere un numero intero");
              ok = false;
          }
       }
    return res;
    }
    Funziona nel controllare che il dato inserito sia di tipo int, ma non controlla l'immissione di valori negativi che non hanno senso nel contesto dell'applicazione... Posso ovviare assegnando a res il valore assoluto del numero immesso ma vorrei invece invitare l'utente a inserire un numero positivo.
    Ho provato a inserire qualcosa tipo if (Integer.valueOf(input.next()) > 0) ma questo causa un malfunzionamento del metodo main(), dato che in console non viene stampato il testo msg che invita a inserire un numero intero.

    Il file importa java.io.IOException e il metodo main() prevede un throws IOException.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    Funziona nel controllare che il dato inserito sia di tipo int, ma non controlla l'immissione di valori negativi che non hanno senso nel contesto dell'applicazione...
    Innanzitutto non è buonissimo in generale, perché se usi più volte il metodo, ricrei lo Scanner da System.in. Nelle applicazioni console, lo Scanner da System.in generalmente dovrebbe essere creato una volta sola.

    E comunque se vuoi controllare che sia positivo, avrebbe senso o cambiargli il nome, invece che leggiInt un leggiIntPositivo oppure tenere quello così e aggiungere un altro leggiIntPositivo.

    Per il controllo, comunque basta testare il valore e fare ok = true; solo se è positivo. In ogni caso, si può evitare quella variabile boolean.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Il ragionamento è lo stesso che ho fatto io, ma appena tocco qualcosa al metodo, in console non mi visualizza il msg su cosa immettere finché non digito un valore e invio.
    Per il nome, è una pura formalità, ho messo leggiInt() per non dargli un nome troppo lungo.

    Con gli Stream ottimizzerei o mi vado a complicare le cose?

  4. #4
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,361
    Oppure crei una funzione leggiIntPositivo che richiama leggiInt e ne controlla il segno solo se leggiInt ha un esito positivo.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

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 © 2024 vBulletin Solutions, Inc. All rights reserved.