Problema Java

di il
14 risposte

Problema Java

Buongiorno, sono perso e non capisco il perchè il problema è il seguente, qualcuno sa come aiutarmi? Grazie.. 

Scrivere una applicazione interattiva che converta numeri da base 10 a base N, con N compreso tra 2 e 36.
L'applicazione propone un prompt che chiede di inserire numero e poi base e risponde con il numero convertito e poi richiede nuovamente numero.
Se si fornisce 0 come risposta allora l'applicazione termina.
Esempio di sessione
----
N = 10
Base = 2
Risposta = 1010
N = 10
Base = 3
Risposta = 101
N = 0
Bye

public class Main {
    public static void main(String[] args) {
        Scanner lettore = new Scanner(System.in);
        boolean entraCiclo = true;
        int numero;
        int base;
        int resto;
        int risultato;


            while (entraCiclo) {
                System.out.println("Inserisci un numero decimale (0 per terminare il programma)");
                numero = lettore.nextInt();
                if (numero == 0) {
                entraCiclo = false;
                } else {
                    System.out.println("Inserisci la base compresa fra 2-36");
                    base = lettore.nextInt();
                    if (base > 36 || base < 2){
                        System.out.println("Reange non valido");
                    } else {
                        while (numero > 0){
                         resto = numero % base; 


                        }
                    }
                }
            }




    }
}

14 Risposte

  • Re: Problema Java

    Panda ... non sei nuovo e sai che nel forum ci sono delle sezioni.

    Perché non posti nella sezione Java?

    E sai che non si chiede la soluzione di compiti ... 

    Hai scritto tu quella parte di codice? 

    Fai una domanda precisa per avere una risposta.

  • Re: Problema Java

    Sorry Oregon, Si l'ho scritto io 

  • Re: Problema Java

    Esiste la parola chiave 'break' (trovi MILIARDATE di pagine sull'argomento).

    Se la usi in modo 'intelligente', semplifichi DI MOLTO il codice, 
    invece di avere un'infinita' di 'if' "nidificati" (un if con dentro un if con dentro un if, ...)

    Comunque, ti manca la parte PIU' importante:

    dato un numero intero 'i' e la base 'b', rappresentare il numero in quella base.

    PRIMA implementa QUESTA parte,

    SOLO DOPO

    implementa il ciclo per la lettura da tastiera e scrittura su console.

  • Re: Problema Java

    Ti ringrazio, Bo sono perso, so solo che dalla base 9 in poi devo implementare le lettere 

  • Re: Problema Java

    E' piu' banale di quello che pensi:

    char[] digits=new char[]{'0','1',...,'A','B',...,'Z'};

    dopo di che, all'indice i-mo trovi il carattere che ti serve:

     0-> '0'
    ...
     9-> '9'
    10-> 'A'
    ...
    35-> 'Z'
    
  • Re: Problema Java

    So già che mi manderai a F******, non utilizzo ancora gli array -.-"

    Stavo pensando a cosa del genere 

    int numero = 16;
    String composizione = "";
    String alfabeto = "abcdfghijklmnpqrstuwxjz";

            char alfabetoChar = alfabeto.charAt(15);
            char alfabetoChar2 = alfabeto.charAt(16);

            if (numero == 15 ); {
                composizione = alfabetoChar + "";
            }if (numero == 16 ) {
                composizione = alfabetoChar2 + "";
            }
            System.out.println(composizione);

  • Re: Problema Java

    @panda96, come immaginerai, qui NESSUNO e' nato 'imparato'.
    E' normale non sapere le cose e quindi nessuno ti trattera' male.

    Anche senza gli array (il fatto di non conoscerli NON VUOL DIRE che non li puoi utilizzare, BASTA STUDIARE), l'idea della stringa e' ancora buona. Ma invece di usare:

    "abc..", 

    usa 

    "0123456789abc..."

    e ti ritrovi nella stessa condizione di prima.

    Per la logica necessaria per convertire un numero in una base b,

    NON PENSARE AL CODICE

    fallo con CARTA E MATITA.

    E' aritmetica delle elementari.

  • Re: Problema Java



    public class Main {
        public static void main(String[] args) {
            Scanner lettore = new Scanner(System.in);
            String composizione = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
            boolean entreCiclo = true;
            int numero;
            int base;
            int resto;
            String risultato = "";
            char carattere;
            String risultatoFinale = "";

            while (entreCiclo) {
                System.out.println("Inserisci il numero in base 10 da convertire(0 per terminare il programma)");
            numero = lettore.nextInt();
            if (numero == 0) {
                entreCiclo = false;
            } else {
                System.out.println("Inserisci la base, la base deve essere compresa fra 2-36");
                base = lettore.nextInt();
                if (base < 2 || base > 36) {
                    System.out.println("Inserisci una base valida");
                } else {

                    risultato = "";
                    risultatoFinale = "";

                    while (numero > 0 ){
                        resto = numero % base;
                        carattere = composizione.charAt(resto);
                        risultato = risultato + carattere;
                        numero = numero / base;


                    }
                    for (int i = risultato.length() - 1; i >= 0; i--) {
                        risultatoFinale = risultatoFinale + risultato.charAt(i);



                    }

                    System.out.println(risultatoFinale);
                }


            }
            }


        }
    }


    Mancano solo la gestione degli errori, ma questa è la soluzione che ho trovato 

    Grazie a tutti per i vari consigli!

  • Re: Problema Java

    @Migliorabile  tu cosa fai esattemente prima di sviluppare un programma? quali sono i passaggi che fai prima di implementare il codice? a carta e penna cosa testi? io per ora cerco di fare flow chart 

  • Re: Problema Java

    SPERO tu non abbia usato l'AI.

    Se e' farina del tuo sacco, se attivi ancora qualche altro neurone, elimini anche il ciclo che hai dovuto implementare per INVERTIRE l'ordine delle cifre

    e' BANALE!

    USA il 'break'

    EVITA gli 'if' nidificati

    ---

    Carta a quadretti da 4mm, micromina 2B e gomma bianca della Stadler in quantita' industriale!

    Diagrammi UML (una versione piu' evoluta dei diagrammi a blocchi)

    sempre su carta, mi scrivo il pseudocodice per gli algoritmi, cioe' una specie di linguaggio di programmazione 'semplificato'

    Poi e' ovvio che con l'esperienza certi passaggi diventano automatici: il pseudocodice diventa immediatamente codice.

  • Re: Problema Java

    27/01/2025 - migliorabile ha scritto:

    SPERO tu non abbia usato l'AI.

    Vana speranza

  • Re: Problema Java

    26/01/2025 - Panda96 ha scritto:

    Mancano solo la gestione degli errori, ma questa è la soluzione che ho trovato 

    Innanzitutto quel ciclo dove inverti i caratteri di per sé non servirebbe affatto. La concatenazione delle stringhe avviene se almeno uno dei due operandi è un String. Quindi si può fare unaStringa+carattere ma anche .... carattere+unaStringa. ;-)

    Inoltre, il consiglio che si può aggiungere è di non fare tutto in un solo metodo (il main) ma ad esempio fare un metodo tipo:

    public static String convertiInBase(int valore, int base) { ....... }

    che si occupa solo della conversione. Niente input dall'utente, println, ecc... E questo ti permette non solo di focalizzarti meglio sull'obiettivo ma anche di non sparpagliare dichiarazioni di variabili in giro nel codice.

  • Re: Problema Java

    Grazie a tutti proverò apportare le modifiche consigliate... 

    Sono sincero questa soluzione me l'ha fornita l' IA -composizione.charAt(resto);

    Perchè siete contrari all'uso dell'IA? 

     

  • Re: Problema Java

    Panda... tu cosa hai imparato copiando il codice di chatgpt? Pensi di diventare programmatore così?

Devi accedere o registrarti per scrivere nel forum
14 risposte