DOMANDA Metodo .hasNextInt in Java!

Pubblicità

Akrilix

Nuovo Utente
Messaggi
145
Reazioni
32
Punteggio
39
Salve a tutti,
il codice che vedete qui sotto svolge una semplicissima funzione: chiede all'utente di inserire un valore compreso tra 1 e 7 e il programma stamperà a video il giorno della settimana corrispondente. Ci sono due controlli:
1- Il numero inserito non deve essere minore di 1 e maggiore di 7.
2- L'utente non deve inserire caratteri all'interno della variabile int.
Entrambi funzionano, ma volevo sapere se vi fosse un metodo per far reinserire il valore anche se l'utente inserisce una lettera anziché farlo interrompere. Ecco il codice;
Java:
import java.util.Scanner;

public class GiornoDellaSettimana {
  
    public static void main(String[] args) {
      
        Scanner inputInt=new Scanner(System.in);
      
        System.out.print("Inserisci il numero del giorno della settimana: ");
      
        int giorno=0;
        boolean controllo;
              
        do {
          
            controllo=inputInt.hasNextInt();
          
            if(controllo) {
                giorno=inputInt.nextInt();
                    if(giorno<1 || giorno>7) {
                        System.out.print("Valore errato!!! Inseriscine uno compreso tra 1 e 7: ");
                        continue;
                    }
                  
                giornoSettimana(giorno);
            }
          
            else {
                System.out.print("Hai inserito un LETTERA nel valore!!! Il programma \u00E8 stato interrotto.");
                return;
            }
          
            inputInt.close();

        }while(giorno<1 || giorno>7);
      
    }
  
    public static void giornoSettimana(int giorno) {
        switch(giorno) {
        case 1:
            System.out.print("Il giorno numero " +giorno +" della settimana \u00E8 Luned\u00EC.");
            break;
        case 2:
            System.out.print("Il giorno numero " +giorno +" della settimana \u00E8 Marted\u00EC.");
            break;
        case 3:
            System.out.print("Il giorno numero " +giorno +" della settimana \u00E8 Mercoled\u00EC.");
            break;
        case 4:
            System.out.print("Il giorno numero " +giorno +" della settimana \u00E8 Gioved\u00EC.");
            break;
        case 5:
            System.out.print("Il giorno numero " +giorno +" della settimana \u00E8 Venerd\u00EC.");
            break;
        case 6:
            System.out.print("Il giorno numero " +giorno +" della settimana \u00E8 Sabato.");
            break;
        case 7:
            System.out.print("Il giorno numero " +giorno +" della settimana \u00E8 Domenica.");
            break;
        }
      
    }
  
}
 
Non capisco cosa intendi, la classe .hasNextInt fa già il lavoro di controllo, se il valore passato è un numero la condizione diventa "true", altrimenti se è un carattere o misto numero+carattere (es. 2o18) la condizione è "false". Quindi non necessita di alcun do while l'inserimento perché è già in grado di capire il valore inserito e grazie alla variabile booleana poi andrà nel ciclo if-else.
 
E se tu provassi a far inserire una stringa all'utente e poi racchiudere in un try catch un metodo che converte la stringa in intero.
Poi nel catch ci metti l'avviso che il numero è scritto in maniera errata e metti una variabile booleana alla quale viene assegnato il valore false nel caso la stringa contenga una lettera.
Racchiudi tutto in un do while che continua finché il valore è true.
Poi metti il resto del controllo.
Spero di essere stato chiaro

Inviato da SLA-L02 tramite App ufficiale di Tom\'s Hardware Italia Forum
 
E se tu provassi a far inserire una stringa all'utente e poi racchiudere in un try catch un metodo che converte la stringa in intero.
Poi nel catch ci metti l'avviso che il numero è scritto in maniera errata e metti una variabile booleana alla quale viene assegnato il valore false nel caso la stringa contenga una lettera.
Racchiudi tutto in un do while che continua finché il valore è true.
Poi metti il resto del controllo.
Spero di essere stato chiaro

Inviato da SLA-L02 tramite App ufficiale di Tom\'s Hardware Italia Forum
Sei stato chiarissimo, ma la classe .hasNextInt fa già ciò che hai scritto te, riceve un valore da un utente sotto forma di stringa e controlla che non vi siano caratteri, se così fosse si entra nell'if (True) e la stringa viene convertita in int.
Inoltre il try catch non lo ho ancora fatto, quindi non posso usarlo.
 
else {
System.out.print("Hai inserito un LETTERA nel valore!!! Il programma \u00E8 stato interrotto.");
return;
}
Togli il return, il continue (inutile) e sposta fuori dal while inputInt.close() e funziona come hai chiesto.
Cerca di capire bene a cosa serva il return..
 
Ciao,
ho fatto come da te consigliato, ma ora se inserisco un carattere il programma si imballa e non da più segni. Ho provato a modificare altri blocchi ma non mi funziona niente.
Ti riposto il codice modificato come scritto da te:

Java:
import java.util.Scanner;

public class GiornoDellaSettimana {
    
    public static void main(String[] args) {
        
        Scanner inputInt=new Scanner(System.in);
        
        System.out.print("Inserisci il numero del giorno della settimana: ");
        
        int giorno=0;
        boolean controllo;
                
        do {
            
            controllo=inputInt.hasNextInt();
            
            if(controllo) {
                giorno=inputInt.nextInt();
                    if(giorno<1 || giorno>7)
                        System.out.print("Valore errato!!! Inseriscine uno compreso tra 1 e 7: ");
            }
            
            else {
                System.out.print("Hai inserito un LETTERA nel valore!!! Il programma \u00E8 stato interrotto.");
            }

        }while(giorno<1 || giorno>7);
        
        giornoSettimana(giorno);
        
        System.out.print("Prova");
        
        inputInt.close();
        
    }
    
    public static void giornoSettimana(int giorno) {
        switch(giorno) {
        case 1:
            System.out.print("Il giorno numero " +giorno +" della settimana \u00E8 Luned\u00EC.");
            break;
        case 2:
            System.out.print("Il giorno numero " +giorno +" della settimana \u00E8 Marted\u00EC.");
            break;
        case 3:
            System.out.print("Il giorno numero " +giorno +" della settimana \u00E8 Mercoled\u00EC.");
            break;
        case 4:
            System.out.print("Il giorno numero " +giorno +" della settimana \u00E8 Gioved\u00EC.");
            break;
        case 5:
            System.out.print("Il giorno numero " +giorno +" della settimana \u00E8 Venerd\u00EC.");
            break;
        case 6:
            System.out.print("Il giorno numero " +giorno +" della settimana \u00E8 Sabato.");
            break;
        case 7:
            System.out.print("Il giorno numero " +giorno +" della settimana \u00E8 Domenica.");
            break;
        }
        
    }
    
}
--- i due messaggi sono stati uniti ---
Ho provato a modificare anche la condizione del do-while mettendo di rieseguire anche se controllo==false, ma non mi funziona. Magari ignoro qualche regola sintattica???
 
Ciao,
ho fatto come da te consigliato, ma ora se inserisco un carattere il programma si imballa e non da più segni. Ho provato a modificare altri blocchi ma non mi funziona niente.
Ti riposto il codice modificato come scritto da te:

Java:
import java.util.Scanner;

public class GiornoDellaSettimana {
   
    public static void main(String[] args) {
       
        Scanner inputInt=new Scanner(System.in);
       
        System.out.print("Inserisci il numero del giorno della settimana: ");
       
        int giorno=0;
        boolean controllo;
               
        do {
           
            controllo=inputInt.hasNextInt();
           
            if(controllo) {
                giorno=inputInt.nextInt();
                    if(giorno<1 || giorno>7)
                        System.out.print("Valore errato!!! Inseriscine uno compreso tra 1 e 7: ");
            }
           
            else {
                System.out.print("Hai inserito un LETTERA nel valore!!! Il programma \u00E8 stato interrotto.");
            }

        }while(giorno<1 || giorno>7);
       
        giornoSettimana(giorno);
       
        System.out.print("Prova");
       
        inputInt.close();
       
    }
   
    public static void giornoSettimana(int giorno) {
        switch(giorno) {
        case 1:
            System.out.print("Il giorno numero " +giorno +" della settimana \u00E8 Luned\u00EC.");
            break;
        case 2:
            System.out.print("Il giorno numero " +giorno +" della settimana \u00E8 Marted\u00EC.");
            break;
        case 3:
            System.out.print("Il giorno numero " +giorno +" della settimana \u00E8 Mercoled\u00EC.");
            break;
        case 4:
            System.out.print("Il giorno numero " +giorno +" della settimana \u00E8 Gioved\u00EC.");
            break;
        case 5:
            System.out.print("Il giorno numero " +giorno +" della settimana \u00E8 Venerd\u00EC.");
            break;
        case 6:
            System.out.print("Il giorno numero " +giorno +" della settimana \u00E8 Sabato.");
            break;
        case 7:
            System.out.print("Il giorno numero " +giorno +" della settimana \u00E8 Domenica.");
            break;
        }
       
    }
   
}
--- i due messaggi sono stati uniti ---
Ho provato a modificare anche la condizione del do-while mettendo di rieseguire anche se controllo==false, ma non mi funziona. Magari ignoro qualche regola sintattica???
Ti va in un ciclo infinito perchè non pulisci il buffer di inputInt. Nel ramo else, aggiungi inputInt.nextLine(); (cosi paro paro) per pulire il buffer.
 
Funziona, ma ne ho dovuti mettere due, altrimenti mi stampava l'output 2 volte di seguito... Come mai?
Java:
else {
                inputInt.nextLine();
                System.out.print("Hai inserito un LETTERA nel valore!!! Reinserisci il numero: ");
                inputInt.nextLine();
            }
 
Funziona, ma ne ho dovuti mettere due, altrimenti mi stampava l'output 2 volte di seguito... Come mai?
Java:
else {
                inputInt.nextLine();
                System.out.print("Hai inserito un LETTERA nel valore!!! Reinserisci il numero: ");
                inputInt.nextLine();
            }
A me stampa una sola volta l'output..
 
Pubblicità
Pubblicità
Indietro
Top