Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    104

    [Java] Scomposizione in fattori primi

    Buonasera a tutti.. ho un problema con una semplice scomposizione in fattori primi...
    La classe che contiene il metodo è questa:
    codice:
    public class Fattorizzazione {       
        int[] a;
        public long[] scomponi(int n) {
            long[] a = new long[n];
            int i = 0, c = 2;
        while(n > 1) {
                if (n%c == 0) {
                    a[i] = c;
                    n = n / c;
                    i++;
                } else {
                    c++;
                    i++;
                }
            }
            return a;
           }
    }
    Nel mainFrame, al click del bottone, si legge dal TextField il numero da scomporre e si stampano i fattori.

    codice:
    private void bottoneScomponiActionPerformed(java.awt.event.ActionEvent evt) {                                                        int s = Integer.parseInt(n.getText());
            
            if (s == 0)
                JOptionPane.showMessageDialog(this, "Non hai immesso un valore valido", "Errore", JOptionPane.DEFAULT_OPTION);
            else {
                fat.scomponi(s);
                array = new long[s];
                array = fat.scomponi(s);
                fattori.setText(n.getText() + " = {");
                fattori.setText(fattori.getText() + String.valueOf(array[0]));
                for (i = 1; i < array.length; i++)
                    if (array[i] > 0)
                        fattori.setText(fattori.getText()+","+String.valueOf(array[i]));
                fattori.setEditable(false);
                fattori.setText(fattori.getText() + "}");
            }
        }
    Il problema è che con numero come ad esempio 23 o 45, tra i fattori mi stampa anche lo zero.. perché!? Vi ringrazio in anticipo e scusate se è una cosa babba

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da LuLyLuNa Visualizza il messaggio
    codice:
                fattori.setText(n.getText() + " = {");
                fattori.setText(fattori.getText() + String.valueOf(array[0]));
                for (i = 1; i < array.length; i++)
                    if (array[i] > 0)
                        fattori.setText(fattori.getText()+","+String.valueOf(array[i]));
                fattori.setEditable(false);
                fattori.setText(fattori.getText() + "}");
    Il problema è che con numero come ad esempio 23 o 45, tra i fattori mi stampa anche lo zero.. perché!?
    Perché il valore all'indice 0 lo stampi sempre comunque.

    P.S. mi permetto di consigliarti di non fare una marea di getText/setText. Usa StringBuffer (o StringBuilder da Java 5), componi tutto il testo lì dentro e poi passa una sola volta la stringa risultante a setText.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Ciao! Il problema sembra essere il tipo di struttura dati che utilizzi per immagazzinare i dati, in particolare quando dichiari gli array stai utilizzando una struttura fissa della lunghezza s, ovvero il numero che passi in input al programma.

    Se per esempio vuoi i fattori primi di 45, con quel codice dichiari un array di lunghezza 45 che però verrà riempito solamente con i fattori mentre le altre posizioni resteranno inizializzate a 0. Così quando lo stampi vedi tutti gli zeri perchè stai ciclando tutto l'a

    Ti consiglio di sostituire gli array con una struttura dinamica, per esempio usa la classe ArrayList.

    Spero di essere stato d'aiuto e di aver scritto in modo comprensibile.

    Ciao ciao.

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    ciao, non ti so aiutare nello specifico ma se può esserti utile questo è un programma per calcolare i fattori primi, che per essere memorizzati e visualizzati a video vanno in una stringa:

    codice:
    import java.util.Scanner;
    public class Fattorizzazione {
        //programma per il calcolo dei fattori primi di un numero intero
        public static void main (String[] args) {
            Scanner scan = new Scanner(System.in);
            System.out.println("Inserisci un intero di cui vuoi trovare i fattori primi: ");
            int n=scan.nextInt();
            int q=n;    //quoziente iniziale
            int t=2; //fattore iniziale di tentativo
            String factors = "< ";    //memorizza i fattori in una stringa
            while (t <= q / t)    //don't need square root
            {
                if (q % t == 0) // t e' un fattore
                {
                    factors = factors + t + ", ";    //memorizza il fattore trovato nella stringa
                    q = q / t;
                }
                else
                {
                    t = (t == 2) ? 3 : t + 2;
                }
            }
            factors = factors + q + " >";
            System.out.println(factors);
        }
    }

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.