ArrayList

di il
16 risposte

ArrayList

Ecco la consegna:
Esercizio 10
Scrivere un programma che scomponga un numero in fattori primi

tipo ad esempio 13+5=18
Ho pensato di fare un array di tutti i numeri primi contenuti nel numero che l'utente inserirà, ho guardato dei tutorial di ArrayList ma non ho capito ... Ho provato a farlo e ovviamente da degli errori.Questo è quello che ho fatto:
1) Perché lo devo mettere in una classe?
2)perché devo mettere davanti static?
3) perché devo mettere le parentesi così () alla fine?
4)Dove sto sbaglando?
5)Ci sono metodi migliori per risolvere questo esercizio?
package vacanze_estive_10;

import javax.swing.JOptionPane;
import java.util.ArrayList;

/**
 *
 * @author OOO
 */
public class Vacanze_estive_10 {

    static primi <int> = new primi <int>();

    public static void main(String[] args) {

        String input = JOptionPane.showInputDialog("Inserisci il numero");
        int numero = Integer.parseInt(input);

        int i = 0;
        int min = 2;
        primi.add(1);
        primi.add(2);
        boolean b = false;
        int sommaTot = 0;
        String somma = "";
        int c = 0;

        for (i = 3; i < numero; i++) {
            min = i - 1;
            while (min > 1) {
                if (i % min == 0) {
                    b = true;
                }
                min--;
            }
            if (!b) {
                primi.add(i);

            }
            b = false;
        }

        for (c = primi.length; c >= 0; c--) {
            sommaTot += primi[i];
            if (sommaTot > numero) {
                sommaTot -= primi[i];
            } else {
                somma += i + " + ";
            }
        }
        somma = somma.substring(somma.length() - 2);
        JOptionPane.showMessageDialog(null, somma + "= " + numero);

    }

}

16 Risposte

  • Re: ArrayList

    Scrivere un programma che scomponga un numero in fattori primi
    tipo ad esempio 13+5=18
    Credo tu faccia un pò confusione, prova a leggere
    Secondo me, per scomporre un numeri primi ti basta fare divisioni successive prima per 2 (finchè è possibile), poi per 3, poi per 4 (che naturalmente non darà alcun risultato), poi per 5... finchè il non ti rimane 1.
  • Re: ArrayList

    Se non sai a priori la dimensione del vettore ti consiglio LinkedList al posto di ArrayList. Alla fine delle e modifiche puoi sempre convertire una lista collegata (LinkedList) in un array ( ArrayList )
  • Re: ArrayList

    lolol ha scritto:


    1) Perché lo devo mettere in una classe?
    2)perché devo mettere davanti static?
    3) perché devo mettere le parentesi così () alla fine?
    Ciao,
    purtroppo queste domande mi fanno sospettare che ci siano molti aspetti della programmazione Java che non ti sono chiari. Forse è meglio approfondire la teoria prima di buttarsi a scrivere esercizi.

  • Re: ArrayList

    candaluar ha scritto:


    Credo tu faccia un pò confusione, prova a leggere
    uff, hai ragione ... Adesso provo a rifarlo ...
  • Re: ArrayList

    L'ho rifatto ma adesso ho un altro problema...
    package vacanze_estive_10;
    
    import javax.swing.JOptionPane;
    
    /**
     *
     * @author OOO
     */
    public class Vacanze_estive_10 {
    
        public static void main(String[] args) {
            String input = JOptionPane.showInputDialog("Inserisci un numero");
            int numero = Integer.parseInt(input);
            int i = 2;
            int tot = 1;
            int n;
            int cont = 0;
            boolean b = false;
            String output = "";
    
            while (tot < numero) {
                n = i;
                while (numero % n == 0) {
                    tot *= i;
                    n *= i;
                    cont++;
                    b = true;
                }
                if (cont > 1) {
                    output += i + "^" + cont + "   x ";
                } else if (b) {
                    output += i + " x ";
                }
                b = false;
                cont = 0;
                i++;
            }
    
            output = output.substring(0, output.length() - 2);
            JOptionPane.showMessageDialog(null, output + "= " + numero);
        }
    
    }
    
    provate ad esempio ad inserire 20, vi da 2^2 * 4* 5. Il 4 non dovrebbe darmelo, come posso fare?
    anche 666 altro esempio, ma con il 3^2
  • Re: ArrayList

    In questo while()
               while (numero % n == 0) {
    ...
    'numero' lo devi sempre aggiornare dividendolo per i, così quando proverai a dividere per 4 non riuscirai a dividere.
    Es. considerando 20
    numero = 20
    i = 2 ok, divisibile
    numero = 10
    i = 2 ok, divisibile
    numero = 5
    i = 2 non è divisibile => mi tengo 2^2
    numero = 5
    i = 3 non è divisibile
    numero = 5
    i = 4 non è divisibile
    numero = 5
    i = 5 ok, è divisibile
    numero = 1
    i = 5 => mi tengo 2^2 * 5
    
    Insomma, devi rivedere il tuo algoritmo
  • Re: ArrayList

    Grazie!! Ma perché sono sempre così lenta ad arrivarci? uff
    package vacanze_estive_10;
    
    import javax.swing.JOptionPane;
    
    /**
     *
     * @author OOO
     */
    public class Vacanze_estive_10 {
    
        public static void main(String[] args) {
            String input = JOptionPane.showInputDialog("Inserisci un numero");
            int numero = Integer.parseInt(input);
            int tot = numero;
            int cont = 0, i;
            String output = "";
    
            while (tot > 1) {
                for (i = 2; i <= tot; i++) {
                    
                    while (tot % i == 0) {
                        tot /= i;
                        cont++;
                    }
                    if (cont > 1) {
                        output += i + "^" + cont + "  x ";
                    } else if (cont == 1) {
                        output += i + " x ";
                    }
                    cont = 0;
                }
            }
            output = output.substring(0, output.length() - 2);
            JOptionPane.showMessageDialog(null, output + "= " + numero);
    
        }
    
    }
    
  • Re: ArrayList

    In caso tu non lo sapessi, in un ciclo puoi modificare anche più variabili, basta che le separi con la virgola.

    un esempio nel tuo programma:
    for (cont=0, i = 2; i <= tot; i++, cont=0) 
  • Re: ArrayList

    In realtà, se ci pensi bene, il while(tot>1) non serve a niente.
    Piuttosto aggiungerei un controllo che il valore inserito in 'numero' sia >= 2, prima di entrare nel ciclo.
  • Re: ArrayList

    Grazie a tutti e due
  • Re: ArrayList

    Che cosa significa questo?
    arrayDispari.remove(arrayDispari);
    Perché vedo che non mi da errore ma non capisco che significhi...
  • Re: ArrayList

    E poi se volessi mettere due vettori in un unico, come posso fare?
    Si può fare
    arrayL=vettore1+vettore2;
    per dire? o bisogna fare il for tipo:

    for(i=0;i<vettore1.length;i++){
    arrayL.add(vettore1);
    }
    for(i=0;i<vettore2.length;i++){
    arrayL.add(vettore1);
    }



    e poi perché se stampi l'array tipo
    System.out.println(array);
    ti stampa un codice e non l'array, ma se stampi l'array list te lo stampa, tipo così:
    System.out.println(arrayL);
    ti stampa [2,3,4,5]
    Come mai?
  • Re: ArrayList

    Ma come mai netbeans quando faccio run con questo esercizio degli arraylist c'impiega cosi tanto tempo a partire ?
  • Re: ArrayList

    lolol ha scritto:


    E poi se volessi mettere due vettori in un unico, come posso fare?
    ArrayList ha il metodo addAll, come puoi vedere dalla .
Devi accedere o registrarti per scrivere nel forum
16 risposte