2013-05-08 82 views
1

注意:我讀過其他帖子,我嘗試將它應用到我自己的文本,這是它的結果。Java從arraylist中獲得隨機字符串

問題:我必須更改或添加到我的代碼才能正常工作?

錯誤:

error: cannot find symbol 
error: cannot find symbol 

這些是下列行:134,135

int n = r.nextInt(lijst.size()) ; 
kies KiesNaam = lijst.get(n); 

這是類:

class kies implements ActionListener { 
    public void actionPerformed(ActionEvent e) { 
     Random r = new Random(); 
     int n = r.nextInt(lijst.size()) ; 
     kies chooseName = lijst.get(n); 
     textvak2.setText("" + KiesNaam); 
    } 
} 

這是我試圖實現的:按下kiesWin按鈕,讓程序從ArrayList中選擇一個隨機的人。隨機選擇的人的姓名應該出現在JTexstField textvak2中。

情況下,你需要整個代碼:(滾動一路下跌的類KIES)

import javax.swing.*; 
import javax.swing.border.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.util.*; 

// Main method to make the frame 
public class Loterij3 extends JFrame { 
public static void main(String args[]) { 
    JFrame frame = new Loterij3(); 
    frame.setExtendedState(frame.MAXIMIZED_BOTH); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setTitle("My Lottery!"); 
    frame.setContentPane(new Paneel()); 
    frame.setVisible(true); 
} 
} 

class Paneel extends JPanel { 
private boven boven; 
JTextArea textvak1; 
JTextField textvak2; 
OnthoudNaam onthoudNaam = new OnthoudNaam(); 
JTextField invoervak1; 

public Paneel() { 
setLayout(new BorderLayout()); // using border Layout. 
setBackground(Color.LIGHT_GRAY); 

boven = new boven(); 

textvak1 = new JTextArea(); 
add(new JScrollPane(textvak1)); 
textvak1.setBackground(Color.WHITE); 

textvak2 = new JTextField(); 
textvak2.setHorizontalAlignment(JTextField.CENTER); 
textvak2.setEditable(false); 

add(boven, BorderLayout.NORTH); 
add(textvak1, BorderLayout.CENTER); 
add(textvak2, BorderLayout.SOUTH); 
} 


public class boven extends JPanel { 
JButton kiesWin, resetL; 
JLabel label1; 

public boven() { 
    setBackground(Color.LIGHT_GRAY); 
    setLayout(new GridLayout(1, 4, 100, 5)); // using GridLayout. 
    Border border = 
     BorderFactory.createEmptyBorder(10, 10, 10, 10); 
    setBorder(border); 

    kiesWin = new JButton("Kies een Winnaar!"); 
    kiesWin.addActionListener(new kies()); 
    resetL = new JButton("Reset alles"); 
    resetL.addActionListener(new reset()); 
    label1 = new JLabel("Voer Persoon in en druk op enter: ", JLabel.RIGHT); 
    invoervak1 = new JTextField(20); 
    invoervak1.addActionListener(new InvoerVakHandler()); 

    add(label1); 
    add(invoervak1); 
    add(kiesWin); 
    add(resetL); 
    } 
} 

// de naam 
class naam { 
    private String ingevoerdNaam; 

    public naam(String ingevoerdNaam) { 
     this.ingevoerdNaam = ingevoerdNaam; 
    } 

    public String getIngevoerdNaam() { 
     return ingevoerdNaam; 
    } 

    public String toString() { 
     return ingevoerdNaam; 
    } 
} 

// Arraylist 
class OnthoudNaam extends JPanel { 
    private ArrayList<naam> lijst; 

    public OnthoudNaam() { 
     lijst = new ArrayList<naam>(); 
     } 

     public void voegNaamToe(naam x) { 
     lijst.add(x); 
     } 

     public String toString() { 
     StringBuffer buffer = new StringBuffer(); 
     for(naam x : lijst) { 
     buffer.append(x); 
     buffer.append("\n"); 
    } 
    return buffer.toString(); 
} 
} 

// invoer handler 
public class InvoerVakHandler implements ActionListener { 
    public void actionPerformed(ActionEvent e) { 
     String invoer = invoervak1.getText(); 
     naam naam = new naam(invoer); 
     onthoudNaam.voegNaamToe(naam); 
     textvak1.setText(onthoudNaam.toString()); 
     invoervak1.setText(""); 
    } 
} 
    // This is the part where it goes wrong. 
class kies implements ActionListener { 
    public void actionPerformed(ActionEvent e) { 
     Random r = new Random(); 
     int n = r.nextInt(lijst.size()) ; 
     kies chooseName = lijst.get(n); 
     textvak2.setText("" + KiesNaam); 
    } 
} 

// reset 
class reset implements ActionListener { 
    public void actionPerformed(ActionEvent e) { 
    } 
} 
} 

大家誰試圖幫助我:謝謝您的幫助和耐心提前!

回答

2

你試圖lijstkies使用 - 但它不是kies成員,或kies任何超類,或kies隱含的類實例。它是OnthoudNaam的成員。

所以你要麼改變你想要使用它的地方,要麼有一個OnthoudNaam的實例來獲取它。如果你不再使用所有這些內部類(以及不遵循Java命名約定的類),這將會更簡單。如果你不再使用所有這些內部類(以及不遵循Java命名約定的類),那麼這將會更簡單。請不要隨意亂用亂碼 - 如果你退後一步,並使現有代碼更清潔,你將不會遇到太多問題。

+0

不在於它屬於超會有所幫助,因爲它是私有的。 – Keppil 2013-05-08 22:09:03

+1

@Keppil:對 - 儘管至少它會更容易解決(例如,通過訪問器方法)。 – 2013-05-08 22:09:39

1

private ArrayList lijst; (使用荷蘭語代碼不是最好的做法,尤其是如果你要和外國人一起工作的話)。

該變量是私有的,這意味着定義它的類之外沒有其他類可以訪問它。目前唯一可以訪問的類是OnthoudNaam。 OnthoudNaam類之外的任何函數或類都不知道列表(lijst)的存在。你必須做的工作是讓變種可用於變種。

也許一個不錯的地方開始學習公共,私有,保護和這樣的: http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html