Enumaratori

di il
4 risposte

Enumaratori

Salve mi sto imbattendo negli enumerati, sono di fronte ad un esercizio un po complicato (per me). ecco il testo:
Scrivere un programma che, inserita la data di nascita nel formato
giorno (intero) e mese (stringa), scriva in output il segno zodiacale
corrispondente.
• Consigliato l’utilizzo di if-else if-else
• In aggiunta: stabilire se il giorno (intero) inserito `e un numero
pari
N.B. Usare gli enumerativi!
Elenco segni zodiacali:
• Ariete: dal 21 Marzo al 20 Aprile
• Toro: dal 21 Aprile al 20 Maggio
• Gemelli: dal 21 Maggio al 21 Giugno
• Cancro: dal 22 Giugno al 22 Luglio
• Leone: dal 23 Luglio al 23 Agosto
• Vergine: dal 24 Agosto al 22 Settembre
• Bilancia: dal 23 Settembre al 22 Ottobre
• Scorpione: dal 23 Ottobre al 22 Novembre
• Saggitario: dal 23 Novembre al 21 Dicembre
• Capricorno: dal 22 Dicembre al 20 Gennaio
• Aquario: dal 21 Gennaio al 19 Febbraio
• Pesci: dal 20 Febbraio al 20 Marzo
Esempio di output:
Inserisci il giorno
25
inserisci il mese
marzo
segno zodiacale: ariete
il giorno 25 è dispari

grazie a tutti per l'aiuto

4 Risposte

  • Re: Enumaratori

    Questo è il codice, ci sono alcuni errori che devi rilevare e aggiustare.
    
    package Prog;
    
    import java.util.Scanner;
    
    public class TestEnum {
    
    	public static void main(String[] args) {
    		int mioGiorno = 0;
    		String mioMese = "";
    
    		TestEnum tEnum = new TestEnum();
    		Scanner in = new Scanner(System.in);
    
    		// Inserisco i dati
    		System.out.println("Inserisci il Giorno: ");
    		mioGiorno = in.nextInt();
    		System.out.println("Inserisci il Mese: ");
    		mioMese = in.nextLine();
    
    		// Controllo Giorno e Mese
    		if (((mioGiorno >= 21 && mioGiorno <= 31) && mioMese.equalsIgnoreCase("marzo"))
    				|| ((mioGiorno >= 1 && mioGiorno <= 30) && mioMese.equalsIgnoreCase("aprile"))) {
    			tEnum.numeroPari(mioGiorno);
    			System.out.println("Il segno Zodiacale: " + SegniZodiacali.Ariete);
    		} else if(((mioGiorno >= 21 && mioGiorno <= 30) && mioMese.equalsIgnoreCase("aprile"))
    				|| ((mioGiorno >= 1 && mioGiorno <= 20) && mioMese.equalsIgnoreCase("maggio"))) {
    			tEnum.numeroPari(mioGiorno);
    			System.out.println("Il segno Zodiacale: " + SegniZodiacali.Toro);
    		}
    		else
    			System.out.println("Il giorno e il Mese corrispondente non è presente nell'elenco");
    
    	}
    
    	public enum SegniZodiacali {
    		Ariete, Toro, Gemelli, Cancro, Leone, Vergine, Bilancia, Scorpione, Saggitario, Capricorno, Aquario, Pesci
    	}
    
    	public void numeroPari(int num) {
    		if ((num % 2) == 0)
    			System.out.println("Il giorno" + num + "è Pari");
    		else
    			System.out.println("Il giorno" + num + "è Dispari");
    	}
    
    }
    
    
    
    
    Ovviamente devi completare il restante........
  • Re: Enumaratori

    Io avrei utilizzato una enum un po' più furba:
    
       private enum Zodiaco {
          ARIETE("marzo", 21, "aprile", 20),
          TORO("aprile", 21, "maggio", 20),
          GEMELLI("maggio", 21, "giugno", 21),
          CANCRO("giugno", 22, "luglio", 22),
          LEONE("luglio", 23, "agosto", 23),
          VERGINE("agosto", 24, "settembre", 22)
          ...  // Completare
          ;
    
          private final String inizioMese;
          private final String fineMese;
          private final int giornoInizio;
          private final int giornoFine;
    
          Zodiaco(String inizioMese, int giornoInizio, String fineMese, int giornoFine) {
             this.inizioMese = inizioMese;
             this.giornoInizio = giornoInizio;
             this.fineMese = fineMese;
             this.giornoFine = giornoFine;
          }
    
          String inizioMese() { return inizioMese; }
          String fineMese() { return fineMese; }
          int giornoInizio() { return giornoInizio; }
          int giornoFine() { return giornoFine; }
       }
    
    Poi, dopo aver acquisito i dati dall'utente, è sufficiente un banale ciclo for sui valori della enum per scovare il segno:
    
    int giorno = ... // Il giorno inserito dall'utente
    String mese = ... // Il mese inserito dall'utente
    
    for(Zodiaco z : Zodiaco.values()) {
       if ((z.inizioMese().equalsIgnoreCase(mese) && z.giornoInizio() <= giorno) ||
           (z.fineMese().equalsIgnoreCase(mese) && z.giornoFine() >= giorno)) {
           
          System.out.println("Il tuo segno zodiacale: " + z);
          
       }
    }
    
    Ciao.
  • Re: Enumaratori

    Grazie sei stato gentilissimo, ho trovato gli errori e sistemato il codice
    public class SegniZodiacali {

    public enum Segni {
    Ariete, Toro, Gemelli, Cancro, Leone, Vergine, Bilancia, Scorpione, Saggitario, Capricorno, Aquario, Pesci
    }
    public static void main(String[] args) {
    int giorno = 0;
    String mese = "";

    SegniZodiacali sz = new SegniZodiacali();
    Scanner sc = new Scanner(System.in);

    // Inserisco i dati
    System.out.println("Inserisci il Giorno: ");
    giorno = sc.nextInt();
    sc.nextLine();
    System.out.println("Inserisci il Mese: ");
    mese = sc.nextLine();

    if (((giorno >= 21 && giorno <= 31) && mese.equalsIgnoreCase("marzo"))
    || ((giorno >= 1 && giorno <= 20) && mese.equalsIgnoreCase("aprile"))) {
    System.out.println("Il segno Zodiacale: " + Segni.Ariete);
    sz.numeroPari(giorno);

    } else if(((giorno >= 21 && giorno <= 30) && mese.equalsIgnoreCase("aprile"))
    || ((giorno >= 1 && giorno <= 20) && mese.equalsIgnoreCase("maggio"))) {
    System.out.println("Il segno Zodiacale: " + Segni.Toro);
    sz.numeroPari(giorno);

    } else if(((giorno >= 21 && giorno <= 31) && mese.equalsIgnoreCase("maggio"))
    || ((giorno >= 1 && giorno <= 21) && mese.equalsIgnoreCase("giugno"))) {
    System.out.println("Il segno Zodiacale: " + Segni.Gemelli);
    sz.numeroPari(giorno);

    } else if(((giorno >= 22 && giorno <= 30) && mese.equalsIgnoreCase("giugno"))
    || ((giorno >= 1 && giorno <= 22) && mese.equalsIgnoreCase("luglio"))) {
    System.out.println("Il segno Zodiacale: " + Segni.Cancro);
    sz.numeroPari(giorno);

    } else if(((giorno >= 23 && giorno <= 31) && mese.equalsIgnoreCase("luglio"))
    || ((giorno >= 1 && giorno <= 23) && mese.equalsIgnoreCase("agosto"))) {
    System.out.println("Il segno Zodiacale: " + Segni.Leone);
    sz.numeroPari(giorno);

    } else if(((giorno >= 24 && giorno <= 31) && mese.equalsIgnoreCase("agosto"))
    || ((giorno >= 1 && giorno <= 22) && mese.equalsIgnoreCase("settembre"))) {
    System.out.println("Il segno Zodiacale: " + Segni.Vergine);
    sz.numeroPari(giorno);

    } else if(((giorno >= 23 && giorno <= 30) && mese.equalsIgnoreCase("settembre"))
    || ((giorno >= 1 && giorno <= 22) && mese.equalsIgnoreCase("ottobre"))) {
    System.out.println("Il segno Zodiacale: " + Segni.Bilancia);
    sz.numeroPari(giorno);

    } else if(((giorno >= 23 && giorno <= 31) && mese.equalsIgnoreCase("ottobre"))
    || ((giorno >= 1 && giorno <= 22) && mese.equalsIgnoreCase("novembre"))) {
    System.out.println("Il segno Zodiacale: " + Segni.Scorpione);
    sz.numeroPari(giorno);

    } else if(((giorno >= 23 && giorno <= 30) && mese.equalsIgnoreCase("novembre"))
    || ((giorno >= 1 && giorno <= 21) && mese.equalsIgnoreCase("dicembre"))) {
    System.out.println("Il segno Zodiacale: " + Segni.Saggitario);
    sz.numeroPari(giorno);

    } else if(((giorno >= 22 && giorno <= 31) && mese.equalsIgnoreCase("dicembre"))
    || ((giorno >= 1 && giorno <= 20) && mese.equalsIgnoreCase("gennaio"))) {
    System.out.println("Il segno Zodiacale: " + Segni.Capricorno);
    sz.numeroPari(giorno);

    } else if(((giorno >= 21 && giorno <= 31) && mese.equalsIgnoreCase("gennaio"))
    || ((giorno >= 1 && giorno <= 19) && mese.equalsIgnoreCase("febbraio"))) {
    System.out.println("Il segno Zodiacale: " + Segni.Aquario);
    sz.numeroPari(giorno);

    } else if(((giorno >= 20 && giorno <= 28) && mese.equalsIgnoreCase("febbraio"))
    || ((giorno >= 1 && giorno <= 20) && mese.equalsIgnoreCase("marzo"))) {
    System.out.println("Il segno Zodiacale: " + Segni.Pesci);
    sz.numeroPari(giorno);

    }
    else
    System.out.println("Il giorno e il Mese corrispondente non è presente nell'elenco");
    }

    public void numeroPari(int num) {
    System.out.println();
    if ((num % 2) == 0)
    System.out.println("Il giorno " + num + " è Pari");
    else
    System.out.println("Il giorno " + num + " è Dispari");
    }

    }
  • Re: Enumaratori

    Capisco che la soluzione di LeleFT non è credibile come ideata da uno studente, però è decisamente ben progettata
Devi accedere o registrarti per scrivere nel forum
4 risposte