Ελεγχος για null element σε ArrayList

Συζητήσεις για την Java

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
Christianago
Δημοσιεύσεις: 332
Εγγραφή: 12 Νοέμ 2009 13:36

Ελεγχος για null element σε ArrayList

Δημοσίευση από Christianago » 14 Ιούλ 2012 01:08

Εχω το παρακατω προγραμμα που παραγει τυχαιες συμβολοσειρες ορισμενου μηκους μεσα απο μια Arraylist.
Το προβλημα ειναι οτι θελω οταν παραγει η γεννητρια τυχαιων αριθμων ενα τυχαιο γραμμα απο την Arraylist
(το οποιο το βαζει σε μια αλλη Arraylist για να σχηματιστει η λεξη)
να βαζει null στο στοιχειο που επελεξε για να μη το ξαναδιαλεξει.
Αμα τρεξτε το προγραμμα θα δειτε οτι πολυ λιγες σχηματισμενες συμβολοσειρες δεν περιεχουν καθολου null στοιχεια,
ενω οι περισσοτερες εχουν ενα ή δυο. Το ζητουμενο ειναι να μην εχουν κανενα.
Μαλλον το προβλημα ειναι στον ελεγχο if (words.get(k) != null) - δεν κανει σωστα τη δουλεια του.
Ειμαι νεος στη Java οποτε δεχομαι και παρατηρησεις...

Κώδικας: Επιλογή όλων

package javaapplication8;

import java.util.ArrayList;
import java.util.Random;

public class JavaApplication8 {

    public static void main(String[] args) {
        
    Random randomGenerator = new Random();

    for &#40;int h = 0;  h < 100; h++&#41;&#123;

    ArrayList<String> words = new ArrayList&#40;&#41;;
    words.add&#40;"a"&#41;;
    words.add&#40;"b"&#41;;
    words.add&#40;"c"&#41;;
    words.add&#40;"d"&#41;;
    words.add&#40;"e"&#41;;
    words.add&#40;"f"&#41;;
    words.add&#40;"e"&#41;;
    words.add&#40;"g"&#41;;
    words.add&#40;"h"&#41;;
    words.add&#40;"i"&#41;;
    words.add&#40;"j"&#41;;
    words.add&#40;"k"&#41;;
    words.add&#40;"l"&#41;;
    words.add&#40;"m"&#41;;
    words.add&#40;"n"&#41;;
    words.add&#40;"o"&#41;;
    words.add&#40;"p"&#41;;
    words.add&#40;"q"&#41;;
    words.add&#40;"r"&#41;;
    words.add&#40;"s"&#41;;
    
    ArrayList<String> joker = new ArrayList&#40;&#41;;
        
        for &#40;int i = 0;  i < 10; i++&#41;&#123;

        ArrayList take = new ArrayList&#40;&#41;; 
        
        for &#40;int k = 0;  k < words.size&#40;&#41;; k++&#41;&#123;
        if &#40;take.size&#40;&#41; == 10&#41; break;
        
        if &#40;words.get&#40;k&#41; != null&#41;
        take.add&#40;k&#41;;
        &#125;

        int s = randomGenerator.nextInt&#40;take.size&#40;&#41;&#41;;
        joker.add&#40;words.get&#40;s&#41;&#41;;
        words.set&#40;s, null&#41;;

            if &#40;joker.size&#40;&#41; == 5&#41; &#123;
            System.out.println&#40;joker&#41;;  
            break;
            &#125;
        &#125;
    &#125;
    
    &#125;
&#125;

Άβαταρ μέλους
xultimatex
Honorary Member
Δημοσιεύσεις: 2505
Εγγραφή: 26 Ιούλ 2003 13:02
Τοποθεσία: Ξάνθη
Επικοινωνία:

Ελεγχος για null element σε ArrayList

Δημοσίευση από xultimatex » 14 Ιούλ 2012 20:26

Όταν το παίρνεις κάνε remove απο τη λίστα.

Κώδικας: Επιλογή όλων

int s = randomGenerator.nextInt&#40;take.size&#40;&#41;&#41;; 
        joker.add&#40;words.get&#40;s&#41;&#41;; 
        words.remove&#40;s&#41;;  
:arrow: Αν προσπαθείς πολύ για να πετύχεις κάτι, ίσως το κάνεις με λάθος τρόπο...

Άβαταρ μέλους
Christianago
Δημοσιεύσεις: 332
Εγγραφή: 12 Νοέμ 2009 13:36

Ελεγχος για null element σε ArrayList

Δημοσίευση από Christianago » 14 Ιούλ 2012 20:36

Η remove διαγραψει το στοιχειο και μεταφερει ολα τα υπολοιπα στοιχεια μια θεση αριστερα.
Θελω να διαγραψω το στοιχειο, αλλα επισης θελω και η θεση τους στη λιστα να ειναι σταθερη, να μη μετατιθενται τα στοιχεια.
Εφοσον αυτο δεν μπορει να γινει με καποια function αναγκαστικα εχω ξεμεινει με το null.

Άβαταρ μέλους
Christianago
Δημοσιεύσεις: 332
Εγγραφή: 12 Νοέμ 2009 13:36

Ελεγχος για null element σε ArrayList

Δημοσίευση από Christianago » 14 Ιούλ 2012 21:04

Οκ το βρηκα. Η λυση ειναι:

Κώδικας: Επιλογή όλων

Collections.shuffle&#40;take&#41;;
        int s = take.get&#40;0&#41;;
Ετσι διαλεγω ενα τυχαιο στοιχειο απο τη λιστα.
Η Random επελεγε τυχαιο δεικτη απο τη λιστα χωρις να ξερει τα περιεχομενα της.

Απάντηση

Επιστροφή στο “Java”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης