Enum ed inserimento da tastiera

di il
7 risposte

Enum ed inserimento da tastiera

Dichiarata una variabile :
enum Scelta {a,b,c,d,e}
ed inserito da tastiera il carattere scelto:
Scanner tastiera=new Scanner(System.in);
String carattere=tastiera.next();
poi dichiarata una variabile di tipo Scelta:
Scelta varAppoggio;
Come fare ad inserire un carattere in varAppoggio
L'esercizio in questione chiede di scrivere un programma che usi enumerazione e che mostra un menu con cinque scelte da a ad e, la scelta dell'utente e' assegnata ad una variabile, e usare uno switch per mostrare un messaggio con la scelta effettuata.

7 Risposte

  • Re: Enum ed inserimento da tastiera

    Giordy ha scritto:


    Scelta varAppoggio;
    Come fare ad inserire un carattere in varAppoggio
    Se hai una stringa es. "b" e vuoi ottenere il riferimento alla costante Scelta che si chiama proprio b, usi il valueOf(String) statico che tutte le enum possiedono. Se non c'è una costante corrispondente alla stringa, valueOf lancia IllegalArgumentException.
  • Re: Enum ed inserimento da tastiera

    A questo punto:
    String car =String.valueOf(varAppoggio);
    il compilatore mi dice :
    variable varAppoggio migth not have been initialized
  • Re: Enum ed inserimento da tastiera

    Giordy ha scritto:


    A questo punto:
    String car =String.valueOf(varAppoggio);
    No, così è completamente falsato/insensato.

    Prima ho detto che valueOf è un metodo statico delle enum. Quindi va invocato sul nome della tua enum (che è Scelta). Poi comunque valueOf riceve una stringa. E restituisce il riferimento all'oggetto Scelta (una delle sue costanti).
  • Re: Enum ed inserimento da tastiera

    Il valueOf(String) non ho capito dove usarlo,
    ma il codice cosi senza valueOf(String) funziona:

    import java.util.Scanner;
    public class MenuEnum
    {
    enum Scelta{A,B,C,D,E}
    public static void main(String[] args)
    {

    Scelta varAppoggio;
    Scanner tastiera=new Scanner(System.in);
    System.out.println("******Menu******");
    System.out.println("Scegli una lettera da a ad e:");
    String carattere=tastiera.next();

    if(carattere.equalsIgnoreCase("a"))
    {
    varAppoggio=Scelta.A;
    System.out.println("Hai scelto la lettera: "+varAppoggio);
    }
    else if(carattere.equalsIgnoreCase("b"))
    {
    varAppoggio=Scelta.B;
    System.out.println("Hai scelto la lettera: "+varAppoggio);
    }
    etc.
    .
    .
    .
    else
    {
    System.out.println("Scelta non valida.");
    }
    }
    }
    invece cosi mi da errore:
    import java.util.Scanner;
    public class MenuEnum
    {
    enum Scelta{A,B,C,D,E}
    public static void main(String[] args)
    {

    Scelta varAppoggio;
    Scanner tastiera=new Scanner(System.in);
    System.out.println("******Menu******");
    System.out.println("Scegli una lettera da a ad e:");
    String carattere=tastiera.next();

    if(carattere.equalsIgnoreCase("a"))
    {
    varAppoggio=Scelta.A;

    }
    else if(carattere.equalsIgnoreCase("b"))
    {
    varAppoggio=Scelta.B;

    }
    etc.
    .
    .
    .
    else{
    System.out.println("Scelta non valida.");
    }

    switch(varAppoggio)
    {
    case A:
    System.out.println("Hai scelto la lettera: "+varAppoggio);
    break;
    case B:
    System.out.println("Hai scelto la lettera: "+varAppoggio);
    break;
    etc.
    .
    .
    .
    default:
    System.out.println("Scelta non valida.");
    }


    }
    }
    mi da error:variable varAppoggio might not have been initialized
    e mi indica l'argomento dello switch come errore.Dove sbaglio?
  • Re: Enum ed inserimento da tastiera

    Giordy ha scritto:


    Il valueOf(String) non ho capito dove usarlo
    Mi sembrava di averlo spiegato più che bene .....

    Scelta scelta = Scelta.valueOf(strInput);

    Giordy ha scritto:


    mi da error:variable varAppoggio might not have been initialized
    e mi indica l'argomento dello switch come errore.Dove sbaglio?
    Il compilatore applica sempre una analisi "statica" sul codice, in particolare nei confronti della inizializzazione delle variabili locali.
    Il compilatore ovviamente NON "sa" cosa succederà a runtime. Però nel tuo codice vede che c'è una catena di if nei cui blocchi assegni a varAppoggio. Il compilatore non può provare, avere certezza, che sicuramente si entra in uno degli if. E c'è anche, tra l'altro, un else in cui non assegni nulla a varAppoggio. Quindi per il compilatore "è possibile" che varAppoggio NON venga SEMPRE inizializzata qualunque sia il flusso in quella catena di if-else-if. Pertanto segnala errore il fatto che allo switch varAppoggio non è detto che sia inizializzato.
  • Re: Enum ed inserimento da tastiera

    Grazie per la risposta, adesso ho capito , infatti dopo aver fatto javac MenuEnum.java mi dava error ma scrivendo java MenuEnum partiva il programma
  • Re: Enum ed inserimento da tastiera

    Giordy ha scritto:


    dopo aver fatto javac MenuEnum.java mi dava error ma scrivendo java MenuEnum partiva il programma
    Se non compila per errore/i, non genera/aggiorna il .class. Se però avevi un .class precedentemente compilato ... ovvio che parte.
Devi accedere o registrarti per scrivere nel forum
7 risposte