ArrayList 2

di il
8 risposte

ArrayList 2

Sono sempre lolol ma non riesco ad entrare col vecchio account e ne ho fatto un altro.
Ho fatto due esercizi con gli arrayList. Trovate ci siano modi migliori per svolgerli? Avete consigli?

questo è il primo metto la consegna sotto
package vacanze_estive_15;

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

public class Vacanze_estive_15 {

    public static void main(String[] args) {
        int g;
        String gr;
        boolean b;
        String o = "Questo è il vettore originale:\n";

        do {
            gr = JOptionPane.showInputDialog("Inserisci la grandezza del vettore (minore di 20)");
            g = Integer.parseInt(gr);
        } while (g >= 20);

        int v[] = new int[g];
        ArrayList<Integer> l = new ArrayList<Integer>();

        for (int i = 0; i < v.length; i++) {
            gr = JOptionPane.showInputDialog("Inserisci il " + (i + 1) + "° numero del vettore");
            v[i] = Integer.parseInt(gr);
            o += v[i] + "  ";
            b = false;
            if (v[i] != 0) {
                for (int c = 0; c < i; c++) {
                    if (v[c] == v[i]) {
                        b = true;
                    }
                }
            } else {
                b = true;
            }
            if (!b) {
                l.add(v[i]);
            }
        }
        JOptionPane.showMessageDialog(null, o + "\nMentre quello modificato è:\n" + l);

    }

}

la consegna:
Scrivere un programma che legge N numeri interi da tastiera e li memorizza in un vettore. Il numero N viene inserito dall’utente ed è minore di 20. Il programma deve generare un secondo vettore che compatta i numeri contenuti nel primo vettore. In
particolare:
1) ogni numero che compare ripetuto nel primo vettore, deve comparire una sola volta nel secondo vettore
2) ogni numero uguale a zero presente nel primo vettore non deve comparire nel secondo vettore.




e questo è il secondo, la consegna sempredopo
package vacanze_estive_16;

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

public class Vacanze_estive_16 {

    public static void main(String[] args) {
        String input;
        int g;
        boolean b;
        int c;
        do {
            input = JOptionPane.showInputDialog("Quanto vuoi sia grande il vettore? (inserisci "
                    + "numero minore di 20)");
            g = Integer.parseInt(input);
        } while (g >= 20);
        int v[] = new int[g];
        Random caso = new Random();
        ArrayList<Integer> a = new ArrayList<Integer>();

        for (int i = 0; i < v.length; i++) {
            v[i] = 1 + caso.nextInt(5);
            System.out.print(v[i] + "  ");
            b = false;
            for (int j = 0; j < i; j++) {
                if (v[i] == v[j]) {
                    b = true;
                }
            }
            if (!b) {
                a.add(v[i]);
            }
        }

        for (int i = 0; i < a.size(); i++) {
            c = 0;
            for (int j = 0; j < v.length; j++) {
                if (v[j] == a.get(i)) {
                    c++;
                }

            }
            System.out.println("\nIl numero " + a.get(i) + " viene ripetuto " + c + " volte.");

        }

    }

}
Esercizio 16
Scrivere un programma che legge N numeri interi da tastiera e li memorizza in un vettore. Il numero N viene inserito dall’utente ed è minore di 20. Il programma deve visualizzare, per ogni cifra contenuta nel vettore, il numero di occorrenze. Ad esempio, si supponga N=7 e si consideri la sequenza di numeri 1 6 15 6 2 15 15. Il programma deve visualizzare:
numero 1 occorrenze 1
numero 6 occorrenze 2
numero 15 occorrenze 3
numero 2 occorrenze 1

8 Risposte

  • Re: ArrayList 2

    Ciao, nel primo esercizio, se l'utente inserisce un carattere al posto di un numero, il programma va in errore; potresti gestire la cosa tramite una bella eccezione con try - catch.
    Poi, io non avrei chiesto all'utente di inserire la grandezza del vettore(???) . Invece avresti fatto meglio a far si che l'utente possa interrompere l'inserimento tramite un tasto o, al limite, quando arriva a 19 numeri inseriti elabori il tutto. Il numero di valori inseriti lo puoi desumere prendendo la lunghezza dell'array ( v.length ) come hai usato sotto.
    Ciao
    Ste
  • Re: ArrayList 2

    Il più grande suggerimento che posso fare è quello di definire delle funzioni (o metodi che dir si voglia) per eseguire i passi principali: ad esempio
    Scrivere un programma che legge N numeri interi da tastiera e li memorizza in un vettore
    potrebbe benissimo essere una funzione; questa funzione la potrai richiamare in entrambi i tuoi esercizi.
    Scrivere tutto nel main() non ti porterà molto lontano
  • Re: ArrayList 2

    candaluar ha scritto:


    Il più grande suggerimento che posso fare è quello di definire delle funzioni (o metodi che dir si voglia) per eseguire i passi principali: ad esempio
    Scrivere un programma che legge N numeri interi da tastiera e li memorizza in un vettore
    potrebbe benissimo essere una funzione; questa funzione la potrai richiamare in entrambi i tuoi esercizi.
    Scrivere tutto nel main() non ti porterà molto lontano
    Ancora meglio secondo me sarebbe creare delle classi.
    Ad esempio potresti realizzare una classe che gestisce gli array, in cui poi potresti scrivere un metodo che li legge da tastiera,che li stampa, che li compatta, ecc...
  • Re: ArrayList 2

    Ancora meglio secondo me sarebbe creare delle classi.
    Sarebbe sicuramente carino; bisogna però prima impratichirsi con lo sviluppo di qualche funzione per scontrarsi con "problematiche" come il passaggio dei parametri e la restituzione di valori/risultati.
    Mi sorprende molto come a scuola vengano proposti esercizi di una certa complessità senza aver prima formato delle basi solide: scrivere tutto nel main() secondo me vuol dire non aver mai fatto un flowchart, non aver mai sentito parlare di progettazione top-down...
    La creazione di una classe deve essere l'ultimo passo, una naturale evoluzione nel momento in cui si capiscono i vantaggi di una tale scelta: senza averne capito i vantaggi si tratterebbe solo di uno sterile esercizio.
  • Re: ArrayList 2

    candaluar ha scritto:


    scrivere tutto nel main() secondo me vuol dire non aver mai fatto un flowchart, non aver mai sentito parlare di progettazione top-down...
    infatti non abbiamo ancora fatto nessuna di queste cose, però abbiamo fatto le funzioni. Adesso mi metto a guardare l'esercizio fatto con la funzione. Intanto ho fatto ancora un altro esercizio con una funzione ma, come al solito mi sembra lungo e voglio farvelo vedere, lo metto in un altro topic.
  • Re: ArrayList 2

    E poi m'è venuto in mente: per stampare il vettore c'è un modo più diretto o bisogna per forza usare il for?
  • Re: ArrayList 2

    E poi m'è venuto in mente: per stampare il vettore c'è un modo più diretto o bisogna per forza usare il for?
    Certo che c'è: scrivi una funzione a cui passi il vettore ed eventualmente anche la dimensione.
    In questo modo quando devi (o ti serve magari per debug) stampare il vettore ti basta richiamare la funzione!
  • Re: ArrayList 2

    Sto facendo l'esercizio e in una funzione mi da errore con un arraylist:

    public static String sedici(int vettore[]) {
            String output = "";
            int cont;
    
            for (int i = 0; i < quindici(vettore).size(); i++) {
                cont = 0;
                for (int c : vettore) {
                    if (c == quindici(vettore).get(i)) {
                        cont++;
                    }
                }
                output += "Il numero " + quindici(vettore).get(i) + " viene ripetuto " + cont + " volte.\n";
            }
            cont = 0;
    
            for (int c : vettore) {
                if (c == 0) {
                    cont++;
                }
            }
            output += "Il numero 0 viene ripetuto " + cont + " volte.\n";
    
            return output;
        }

    se volete questo è l'esercizio intero:
    package vacanze_estive_15_e_16;
    
    import java.util.ArrayList;
    import javax.swing.JOptionPane;
    
    public class Vacanze_estive_15_e_16 {
    
        public static ArrayList quindici(int vettore[]) {
            ArrayList<Integer> l = new ArrayList<Integer>();
            boolean b;
    
            for (int i : vettore) {
                b = false;
                for (int c = 0; c < l.size(); c++) {
                    if (i == l.get(c) || i == 0) {
                        b = true;
                        c = l.size();
                    }
                }
                if (!b) {
                    l.add(i);
                }
            }
    
            return l;
        }
    
        public static String sedici(int vettore[]) {
            String output = "";
            int cont;
    
            for (int i = 0; i < quindici(vettore).size(); i++) {
                cont = 0;
                for (int c : vettore) {
                    if (c == quindici(vettore).get(i)) {
                        cont++;
                    }
                }
                output += "Il numero " + quindici(vettore).get(i) + " viene ripetuto " + cont + " volte.\n";
            }
            cont = 0;
    
            for (int c : vettore) {
                if (c == 0) {
                    cont++;
                }
            }
            output += "Il numero 0 viene ripetuto " + cont + " volte.\n";
    
            return output;
        }
    
        public static String output(int vettore[]) {
            String x = "Questo è il vettore originale:\n\n";
            for (int i = 0; i < vettore.length; i++) {
                x += ((i == 9) ? "\n" + vettore[i] : vettore[i]);
            }
            x += "\n\n";
            return x;
        }
    
        public static void main(String[] args) {
            int grandezza;
            do {
    
                grandezza = Integer.parseInt(JOptionPane.showInputDialog("Quanti "
                        + "numeri vuoi che vontenga il vettore (inserire numero "
                        + "minore di 20)"));
            } while (grandezza >= 20);
    
            int vettore[] = new int[grandezza];
    
            JOptionPane.showMessageDialog(null, "Questo è il vettore compattato:\n\n" + quindici(vettore));
            JOptionPane.showMessageDialog(null, output(vettore) + sedici(vettore));
        }
    
    }
    
    
Devi accedere o registrarti per scrivere nel forum
8 risposte