2013-11-25 3 views
0
SlotMachine.java:76: cannot find symbol 
symbol : variable slot 
location: class MyFrame.pullHandler 

КодНевозможно найти символ в Java. [Ошибка компилятора]

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

class SlotMachine 
{ 
    public static void main(String [] args) 
    { 
     MyFrame f = new MyFrame(); 
    } 
} 

class MyFrame extends JFrame 
{ 
    JTextField r1 = new JTextField("---",10); 
    JTextField r2 = new JTextField("---",10); 
    JTextField r3 = new JTextField("---",10); 



    JButton pull = new JButton("Pull"); 
    JLabel result = new JLabel("Not Played Yet"); 

public MyFrame() 
{ 

    JTextField [] slot = new JTextField[3]; 
    slot[0] = new JTextField("---",10); 
    slot[1] = new JTextField("---",10); 
    slot[2] = new JTextField("---",10); 

    JPanel panel = new JPanel(); 
    setVisible(true); 
    setSize(400, 400); //replace with pack();? 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setTitle("Slot Machine - By: "); 

    add(panel); 
    panel.add(slot[0]); 
    panel.add(slot[1]); 
    panel.add(slot[2]); 
    panel.add(pull); 
    panel.add(result); 

    pull.addActionListener(new pullHandler()); 

} 

class pullHandler implements ActionListener 
{ 
    public void actionPerformed(ActionEvent pull) 
    { 
     int ban = 0; 
     int cher = 0; 
     int mel = 0; 
     int plays = 0; 

     for(int count=0; count< 3; count++) //repeats three times, giving three random values 
     { 
      Random rand = new Random(); 
      int numRoll = rand.nextInt(3); //0,1,2 values 



     if (numRoll==0) 
      { 
       //Bannana 
       slot[0].setBackground(Color.yellow); //I want to replace the 1 with the counts, so if it is the second loop, it would set it for the second box. 
       ban++; 
       /*slot[count]*/r1.setText("Banana");   
      } 

      if (numRoll==1) 
      { 
       //cherry 
       r2.setBackground(Color.red); 
       cher++; 
       r2.setText("Cherry"); 
      } 

      if (numRoll==2) 
      { 
       //Melon 
       r3.setBackground(Color.green); 
       mel++; 
       r3.setText("Melon"); 
      } 
     } 

     plays++; 
     result.setText("Played " + plays); //why don't I keep getting new values when I click "Pull"? 

    } 
} 



} 

Я пытаюсь использовать слот [] массив вместо R1/R2/r3 в моем классе pullhandler. Я пробовал читать старые сообщения, но не мог найти ничего похожего на мою проблему.

+2

Go читать на области видимости переменных. –

+2

Переменная 'slot' является локальной для конструктора' MyFrame' и не известна 'pullHandler'. –

ответ

1

Вне сферы действия конструктора переменная slot не имеет значения. Если вы хотите, чтобы к нему были доступны другие методы, переместите slot на уровень поля с переменными JTextField.

+0

Проблема заключается в том, что всякий раз, когда я перемещаю его за пределы конструктора, я получаю следующее: 'SlotMachine.java:63: незаконный запуск типа слот [2] = новый JTextField (« --- », 10); ^ SlotMachine.java:63: ожидается слот [2] = новый JTextField ("---", 10); ^ SlotMachine.java:63: ';' ожидаемый слот [2] = новый JTextField («---», 10); ' – user3029599

+1

Почему вы не можете переместить' JTextField [] slot = new JTextField [3]; 'из конструктора? В любом случае, вы все можете * двигаться. – Makoto

+0

Ahhh, я думаю, это была моя проблема! Я не должен был перемещать «slot [0] = новое JTextfield (« --- », 10), часть! Спасибо Makoto! – user3029599

0

JTextField [] slot = new JTextField[3]; должны быть созданы вне MyFrame() конструктора

Чтобы сделать его доступным для pullHandler вы должны также попытаться сделать slot, как static

Смежные вопросы