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

    Aiuto su menu console dinamico

    ciao!

    in una applicazione console, avrei la necessità di costruire un menu dinamico.
    nel quale le voci sono costituite da i files di properties presenti nella directory.
    in sostanza per ora avrei fatto questo:
    codice:
    public class Main {
    
        public static void main(String[] args) throws IOException, InterruptedException, JSchException, URISyntaxException {
            System.out.println("=============================");
            System.out.println("|    SCEGLI CONNESSIONE     |");
            System.out.println("=============================");
            File dir = new File(".");
            HashMap<Integer, String> options = new HashMap<>();
            int counter = 1;
            for (File f : dir.listFiles()) {
                if (f.getName().toLowerCase().endsWith(".properties")) {
                    options.put(counter++, f.getName());
                }
            }
            options.put(counter++, "EXIT");
            for (Map.Entry<Integer, String> m : options.entrySet()) {
                String voice = m.getValue();
                String replace = voice.replace(".properties", "");
                System.out.println(m.getKey() + " - " + replace.toUpperCase());
            } 
            Scanner scanner = new Scanner(System.in);
            switch (scanner.nextInt()) {
                 // CASE
            }
        }
    }
    il mio problema è come intercettare la scelta dell'utente.
    come posso aggiungere i vari case all switch in base ai record di HashMap<Integer, String> options??

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da fermat Visualizza il messaggio
    il mio problema è come intercettare la scelta dell'utente.
    come posso aggiungere i vari case all switch in base ai record di HashMap<Integer, String> options??
    Dovresti spiegare qualcosa di più. Quello che vedo e capisco da quel codice è questo: scansioni una directory e prendi tutti i file .properties, poi i nomi "base" (senza path) li metti nella mappa associati ciascuno ad un numero univoco incrementale.

    Nella mappa avrai quindi associazioni es.

    1 --> "pippo.properties"
    2 --> "pluto.properties"
    3 --> "EXIT"

    Quindi le stampi all'utente togliendo .properties e mettendo in maiuscolo.

    Intercettare la scelta dell'utente è il problema minore, cioè mi pare chiaro che se l'utente inserisce 2, andrai nella mappa a prendere pluto.properties

    A quel punto, cosa deve contenere il file e cosa ci devi fare ...... non lo so!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    ciao andbin.

    allora, la tua analisi è giusta.
    il punto successivo è quello di andare a leggere il file in base all'indice segnalato dall'utente.
    poi ne faccio il parsing, e passo i valori ad un altro metodo (ma questo diciamo che non ci interessa).

    facendo così, in parte ho risolto il problema:
    codice:
        public static void main(String[] args) throws IOException {
            System.out.println("=============================");
            System.out.println("|    SCEGLI CONNESSIONE     |");
            System.out.println("=============================");
            File dir = new File(".");
            HashMap<Integer, String> options = new HashMap<>();
            int counter = 1;
            for (File f : dir.listFiles()) {
                if (f.getName().toLowerCase().endsWith(".properties")) {
                    options.put(counter++, f.getName());
                }
            }
            options.put(counter++, "EXIT");
            for (Map.Entry<Integer, String> m : options.entrySet()) {
                String voice = m.getValue();
                String replace = voice.replace(".properties", "");
                System.out.println(m.getKey() + " - " + replace.toUpperCase());
            }
            Scanner scanner = new Scanner(System.in);
            int choose = scanner.nextInt();
            String file = options.get(choose);
            System.out.println(file); --> NOME CORRETTO DEL FILE IN BASE A INDICE
        }
    però mi mancherebbe come fare nel caso in cui l'utente voglia uscire.
    l'uscita è sempre l'ultimo valore del menu, e quindi può essere una volta 3, una volta 2, una volta 5, ecc...
    insomma non lo so a priori.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da fermat Visualizza il messaggio
    però mi mancherebbe come fare nel caso in cui l'utente voglia uscire.
    l'uscita è sempre l'ultimo valore del menu, e quindi può essere una volta 3, una volta 2, una volta 5, ecc...
    insomma non lo so a priori.
    No ... lo puoi sapere, basta che ti tieni in un'altra variabile il valore che ha counter poco prima del put del EXIT.


    Anzi, e con un ragionamento migliore, partire con counter = 0 e fare un pre-incremento (non post-incremento come ora). Così successivamente 'counter' è l'ultimo cioè il EXIT.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    avrei fatto una cosa del genere:
    codice:
        public static void main(String[] args) throws IOException {
            System.out.println("=============================");
            System.out.println("|    SCEGLI CONNESSIONE     |");
            System.out.println("=============================");
            File dir = new File(".");
            HashMap<Integer, String> options = new HashMap<>();
            int counter = 0;
            for (File f : dir.listFiles()) {
                if (f.getName().toLowerCase().endsWith(".properties")) {
                    options.put(++counter, f.getName());
                }
            }
            options.put(++counter, "EXIT");
            int last = counter;
            for (Map.Entry<Integer, String> m : options.entrySet()) {
                String voice = m.getValue();
                String replace = voice.replace(".properties", "");
                System.out.println(m.getKey() + " - " + replace.toUpperCase());
            }
            Scanner scanner = new Scanner(System.in);
            int choose = scanner.nextInt();
            if (choose == last) {
                System.exit(0);
            } else {
                String file = options.get(choose);
                System.out.println(file);
            }
        }
    mi sembra funzionare.
    anche se non so se è proprio quello che inendevi tu!!

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.