Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2013
    Messaggi
    25

    consiglio sull'acquisizione in input

    Salve
    dovrei acquisire in input dei valori per forza mediante lo scanner(System.in).
    Dovrei però verificare che il numero inserito o la stinga inserita non superino 4 numeri/caratteri.
    Avevo pensato ad un controllo sulla variabile che riceve l'input. Per i numeri il controllo sarebbe
    Es. n < 10000
    per i caratteri
    Es. stringa.length < 5
    queste condizioni inserite in un ciclo magari con un booleano per uscire solo se si rispettano le condizioni.


    Secondo questo è l'unico modo o si può ottimizzare qualcosa?

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

    Re: consiglio sull'acquisizione in input

    Originariamente inviato da abbobba
    Secondo questo è l'unico modo o si può ottimizzare qualcosa?
    Innanzitutto se usi nextInt() (o i nextXyz degli altri primitivi es. nextLong ecc...) di Scanner, bisogna sempre prestare attenzione ai token malformati. Se il token non è un valore primitivo in formato corretto es. "12a", i nextXyz lanciano InputMismatchException ma il token rimane nel buffer interno e quindi bisognerebbe toglierlo.
    Un esempio di metodo basilare, con un loop per ripetere l'input se malformato, è questo (presuppone un 'scanner' come variabile di istanza):

    codice:
    public int readIntInput(String prompt) {
        while (true) {
            try {
                System.out.print(prompt);
                return scanner.nextInt();
            } catch (InputMismatchException e) {
                scanner.next();    // butta via il token
            }
        }
    }
    Oltre a questo, puoi chiaramente "farcire" il metodo come vuoi, es. mettere un messaggio di errore o, come hai appena chiesto, fare una ulteriore validazione sul range del valore, che sarebbe da fare poco prima di far ritornare il valore.

    Ma quanto ho mostrato è già abbastanza al minimo (se vuoi fare un loop con gestione dell'input malformato) ... nel senso che meno di questo non avrei idea di come si possa fare.
    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
    Jul 2013
    Messaggi
    25
    ti ringrazio della risposta però sto preparando l'esame di fondamenti di programmazione dove il blocco try-catch non è stato spiegato... mi salvo questo tuo codice per il futuro

    il controllo che ho detto prima l'ho implementato in questo modo
    codice:
                    do {
    		System.out.println("Inserire numero di conto (max 4 cifre): ");
    		nConto1 = sc.nextInt();
    		}
    		while (nConto1 > MAX_LENGHT ); 
    		
    		do {
    		System.out.println("Inserire nome (max 5 caratteri): ");
    		nome1 = sc.next();
    		}
    		while (nome1.length() > MAX_LENGHT2);
    può andare o è troppo rozzo?


    PS ma nel tuo codice il while non cicla all'infinito?

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da abbobba
    PS ma nel tuo codice il while non cicla all'infinito?
    C'è un return, guarda bene
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da abbobba
    può andare o è troppo rozzo?
    Certo, può andare (con le premesse che hai fatto). A parte il fatto che non gestendo InputMismatchException lasci aperta questa questione. Ma potrebbe anche essere una strategia nel senso: se sbuca fuori una eccezione come questa, accetti che magari il programma termini immediatamente.
    Comunque va bene, non preoccuparti, non avendo ancora visto try-catch sei in un certo senso "giustificato".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.