Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 25
  1. #11
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da fermat
    si però il mio problema è diventato un altro.
    io numeri casuali li creo, e creo 5 liste.
    il problema è che queste 5 liste sono uguali ed io invece sto cercando di ottenere 5 liste diverse.
    è li che mi sto inceppando.
    In realtà non stai affatto creando 5 liste... stai stampando 5 volte la stessa lista.
    Hai un solo oggetto ArrayList e solo questo dovrebbe darti da pensare... con un solo oggetto ArrayList avrai una sola lista...

    codice:
            for (int j = 1; j < 6; j++) {
                for (int i = 0; i < numeriGenerati.size(); i++) {
                    System.out.print(numeriGenerati.get(i) + " ");
                }
                System.out.println("Lista numero: " + j);
            }
    Questo codice effettua 5 volte l'iterazione sulla lista chiamata "numeriGenerati" e ne stampa il contenuto... ovvero, stampa 5 volte il contenuto della lista.

    Se vuoi generare 5 liste devi avere, innanzitutto, 5 oggetti di tipo ArrayList, quindi ciclare per 5 volte sulla parte di generazione dei numeri casuali (e non su quella di stampa).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  2. #12
    giusto nn ci ho pensato proprio.
    dici qualcosa del genere (per ora sto facendo solo due liste):
    codice:
    public class Main {
    
        private static Random generatore;
        private static ArrayList<Integer> numeriGenerati1;
        private static ArrayList<Integer> numeriGenerati2;
    
        public static void generaNumeri(int n, int max) {
            generatore = new Random();
            numeriGenerati1 = new ArrayList<Integer>();
            numeriGenerati2 = new ArrayList<Integer>();
            numeriGenerati1.add(generatore.nextInt(max) + 1);
            numeriGenerati2.add(generatore.nextInt(max) + 1);
            int rdm1;
            int rdm2;
            for (int j = 1; j < 2; j++) {
                while (numeriGenerati1.size() < n && numeriGenerati2.size() < n) {
                    rdm1 = generatore.nextInt(max) + 1;
                    rdm2 = generatore.nextInt(max) + 1;
                    if (!numeriGenerati1.contains(rdm1)) {
                        numeriGenerati1.add(rdm1);
                    }
                    if (!numeriGenerati2.contains(rdm2)) {
                        numeriGenerati2.add(rdm2);
                    }
                }
            }
            Collections.sort(numeriGenerati1);
            Collections.sort(numeriGenerati2);
    
            for (int i = 0; i < numeriGenerati1.size(); i++) {
                System.out.print(numeriGenerati1.get(i) + " " + "\n" + numeriGenerati2.get(i) + " ");
    
            }
        }
    
        public static void main(String args[]) {
            generaNumeri(6, 99);
        }
    }

  3. #13
    no aspetta mi sono un pò evoluto.
    ho scoperto che si può indicare il numero di arraylist:
    codice:
    public class Main {
    
        private static Random generatore;
        private static ArrayList<Integer> numeriGenerati;
    
        public static void generaNumeri(int n, int max) {
            generatore = new Random();
            numeriGenerati = new ArrayList<Integer>(2);
            numeriGenerati.add(generatore.nextInt(max) + 1);
            numeriGenerati.add(generatore.nextInt(max) + 1);
            int rdm;
            System.out.println("Numero liste aggiunte: " + numeriGenerati.size());
            for (int j = 1; j < 2; j++) {
                while (numeriGenerati.size() < n) {
                    rdm = generatore.nextInt(max) + 1;
                    if (!numeriGenerati.contains(rdm)) {
                        numeriGenerati.add(rdm);
                    }
                }
                Collections.sort(numeriGenerati);
                for (int i = 0; i < numeriGenerati.size(); i++) {
                    System.out.println("Lista numero: " + j + ": " + numeriGenerati.get(i) + " ");
                }
            }
        }
    
        public static void main(String args[]) {
            generaNumeri(6, 99);
        }
    }
    però:
    Numero liste aggiunte: 2
    Lista numero: 1: 5
    Lista numero: 1: 7
    Lista numero: 1: 15
    Lista numero: 1: 70
    Lista numero: 1: 82
    Lista numero: 1: 96

  4. #14
    Originariamente inviato da fermat
    no aspetta mi sono un pò evoluto.
    ho scoperto che si può indicare il numero di arraylist:
    codice:
    ...
    numeriGenerati = new ArrayList<Integer>(2);
    ...
    ...
    Così non crei 2 ArrayList, ma un ArrayList con capacità iniziale 2. Basta dare un'occhiata alle API ArrayList
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  5. #15
    ah ok, è un bel pò diverso.
    ma quindi devo istanziarne una per una tipo così:
    private static ArrayList<Integer> numeriGenerati1;
    private static ArrayList<Integer> numeriGenerati2;

    nn è molto comodo.

  6. #16
    Cosa significa "non è molto comodo"?!?! Se hai bisogno di 5 ArrayList differenti devi istanziare 5 ArrayList differenti, non puoi fare altrimenti. L'unica alternativa è rivedere la logica dell'applicativo ed utilizzare una struttura dati differente.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  7. #17
    cmq così qualche piccolo rislutato lo ottengo:
    codice:
    public class Main {
    
        private static Random generatore;
        private static ArrayList<Integer> numeriGenerati;
    
        public static void generaNumeri(int n, int max) {
            generatore = new Random();
            numeriGenerati = new ArrayList<Integer>();
            numeriGenerati.add(generatore.nextInt(max) + 1);
            numeriGenerati.add(generatore.nextInt(max) + 1);
            int rdm;
            int rdm2;
            System.out.println("Numero liste aggiunte: " + numeriGenerati.size());
            for (int j = 1; j < 2; j++) {
                while (numeriGenerati.size() < n) {
                    rdm = generatore.nextInt(max) + 1;
                    rdm2 = generatore.nextInt(max) + 1;
                    if (!numeriGenerati.contains(rdm) && !numeriGenerati.contains(rdm2)) {
                        numeriGenerati.add(rdm);
                        numeriGenerati.add(rdm2);
                    }
                    Collections.sort(numeriGenerati);
                    System.out.println("Lista numero: " + j + ": " + numeriGenerati);
                }
            }
        }
    
        public static void main(String args[]) {
            generaNumeri(6, 99);
        }
    }
    di liste ne crea due solo che sono sballate:
    Numero liste aggiunte: 2
    Lista numero: 1: [65, 68, 87, 91]
    Lista numero: 1: [28, 42, 65, 68, 87, 91]

  8. #18
    Originariamente inviato da fermat
    cmq così qualche piccolo rislutato lo ottengo:
    codice:
    ...
    System.out.println("Numero liste aggiunte: " + numeriGenerati.size());
    ...
    di liste ne crea due solo che sono sballate:
    Numero liste aggiunte: 2
    Lista numero: 1: [65, 68, 87, 91]
    Lista numero: 1: [28, 42, 65, 68, 87, 91]
    Scusa ma secondo me hai le idee un poco confuse. Che stai andando per tentativi cercando di migliorare i risultati ottenuti? Non è così che funziona la programmazione.
    Quello che stampi a video non è il numero di liste, ma il numero di elementi presenti nell'UNICA lista che hai creato API
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  9. #19
    si ho visto dopo che ho scritto.
    in sostanza mi devo creare più oggetti ArrayList:
    private static ArrayList<Integer> numeriGenerati1;
    private static ArrayList<Integer> numeriGenerati2;

    è un pò scomodo, cercavo solo una scorciatoia e interpretato male la doc.

  10. #20
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    E perchè non usi un array di ArrayList?

    codice:
    ArrayList liste[] = new ArrayList[5];
    
    for(int i=0; i<5; i++) {
       liste[i] = new ArrayList<Integer>();
       ...
    }
    Il linguaggio li offre gli strumenti per lavorare... usiamoli.

    PS: dà un warning perchè è un array di generici, ma funziona.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.