Programma java

di il
18 risposte

18 Risposte - Pagina 2

  • Re: Programma java

    Usa delle costanti.

  • Re: Programma java

    04/01/2025 - Panda96 ha scritto

    Ti ringrazio per il consiglio, pero non posso utilizzare ancora gli arrey perchè non li abbiamo ancora visti :/ 

    Cavoli! Hai qualcuno che ti punta una pistola alla tempia e ti sussurra: "puoi usare gli array SOLO dopo averli visti e li puoi vedere quando te lo dico io"?

    La scuola e' cambiata una sacco dai miei tempi! 

  • Re: Programma java

    04/01/2025 - migliorabile ha scritto:

    Consiglio.
    Crea DUE funzioni:

    1. una che converte un numero romano a numero decimale
    2. una che converte un numero decimale a numero romano

    .

    Doppio lavoro? SI
    Doppia probabilita' di fare errori? SI

    MA ti serve per controllare SE le conversioni sono giuste:   

    MMXXV -> 2025 -> MMXXV
    4999 -> MMMMCMXCIX -> 4999


    E dimostri di non essere un "semplice" "pigiatasti" :-)

    Un metodo "semplice", una volta capito come funziona, NON E' quello di scrivere tonnellate di codice e di IF, MA quello di usare un "automa a stati finiti".
    (Ci saranno sempre tonnellate di iF, MA con una STRUTTURA ben definita :-) )
    Niente di "trascendentale" MA serve usare qualche neurone in piu.

    https://it.wikipedia.org/wiki/Automa_a_stati_finiti

    SEMBRA complicato, ma, accendendo i suddetti neuroni in piu', e' "facile".
    Tra l'altro, usando l'automa, hai praticamente "A GRATIS" la gestione degli errori :-)

    Nota: Mathematica converte zero in "N" :-)

    .

    Diciamo che DEVI potre convertire TUTTI i numeri interi da 0 (zero) a 4999.
    Per numeri >= 5000 servono dei simboli "dedicati". 
    Fondamentalmente I,V,X,L,C,D,M con delle "barrette" sopra: una fino a un milione, due fino a un milirado, 3 fino a mille miliardi, ecc.

    package edu.avogadro;

    import java.util.Scanner;

    public class ConversioneRomanoDecimale2 {

        public static void main(String[] args) {
            Scanner lettore = new Scanner(System.in);
            boolean entra = true;

            System.out.println("Digita _finitum est_ per terminare il programma");

            while (entra) {
                System.out.print("Inserisci il numero romano da convertire: ");
                String numeroRomano = lettore.nextLine();

                if (numeroRomano.equalsIgnoreCase("finitum est")) {
                    System.out.println("Programma terminato");
                    entra = false;
                } else {
                    numeroRomano = numeroRomano.toUpperCase();
                    if (!numeroRomano.isEmpty()) {
                        int risultato = convertitoreRomano(numeroRomano);
                        String check = Main.convertiDecimaleARomano(String.valueOf(risultato)).toUpperCase();
                        if (numeroRomano.equals(check)) {
                            System.out.println("Equivalenza decimale del numero romano inserito: " + risultato);
                        } else {
                            System.out.println("Assicurati di inserire lettere valide per la composizione");
                        }
                    }
                }

            }


        }


        static int convertitoreRomano(String numeroRomano) {
            final int ZERO = 0;
            final int UNO = 1;
            final int CINQUE = 5;
            final int DIECI = 10;
            final int CINQUANTA = 50;
            final int CENTO = 100;
            final int CINQUECENTO = 500;
            final int MILLE = 1000;
            char digit;
            int valorePrecedente = 0;
            int valoreDecimale = 0;
            int risultato = 0;

            for (int i = ZERO; i < numeroRomano.length(); i++) {
                digit = numeroRomano.charAt(i);

                if (digit == 'I') {
                    valoreDecimale = UNO;
                } else if (digit == 'V') {
                    valoreDecimale = CINQUE;
                } else if (digit == 'X') {
                    valoreDecimale = DIECI;
                } else if (digit == 'L') {
                    valoreDecimale = CINQUANTA;
                } else if (digit == 'C') {
                    valoreDecimale = CENTO;
                } else if (digit == 'D') {
                    valoreDecimale = CINQUECENTO;
                } else if (digit == 'M') {
                    valoreDecimale = MILLE;
                }

                if (valorePrecedente < valoreDecimale) {
                    risultato = risultato - valorePrecedente;
                    risultato = risultato + (valoreDecimale - valorePrecedente);
                } else {
                    risultato = risultato + valoreDecimale;
                }

                valorePrecedente = valoreDecimale;
            }

            return risultato;
        }
    }

    Complimenti ottimo metodo, il migliore penso per questo esercizio, studierò meglio gli automi, sono sincero non l'ho fatto io 

  • Re: Programma java

    05/01/2025 - migliorabile ha scritto:

    04/01/2025 - Panda96 ha scritto

    Ti ringrazio per il consiglio, pero non posso utilizzare ancora gli arrey perchè non li abbiamo ancora visti :/ 

    Cavoli! Hai qualcuno che ti punta una pistola alla tempia e ti sussurra: "puoi usare gli array SOLO dopo averli visti e li puoi vedere quando te lo dico io"?

    La scuola e' cambiata una sacco dai miei tempi! 

    Ma in realtà sono io che cerco di utilizzare cose che abbiamo visto in classe, sono sincero non bene come muovermi in questo ambiente, qual'è la strada corretta per un ottiimo apprendimento, io vengo dal settore della metalmeccanica :/ ahah 

Devi accedere o registrarti per scrivere nel forum
18 risposte