2016-03-04 76 views
1

所以我尝试做一个程序,当我点击我的滑板或骰子按钮时,每个标签(代表一个骰子)都会从相应的列表中变成一个随机元素它属于。但到目前为止,当我单击按钮时,标签不会更改为随机元素,每次单击它时都会给出相同的标签。当我点击按钮时,我通过打印到系统来测试输出,每次我都会得到相同的4个答案。我想找一些帮助,找出为什么它会从每个列表中重复选择相同的元素,而不是每次都选择不同的元素。每次都没有选择一个随机项目

这是我的主类

package skateordicegui; 

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.FlowLayout; 
import java.awt.Toolkit; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

public class SKFrame extends SkateDice { 

public JFrame jf; 

public JPanel jp; 

static public JButton sod = new JButton("SKATE OR DICE!!"); 

static public JLabel l1 = new JLabel("Stance"); 
static public JLabel l2 = new JLabel("Turn"); 
static public JLabel l3 = new JLabel("Flip"); 
static public JLabel l4 = new JLabel("Spin"); 

public SKFrame() { 
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); 

    jf = new JFrame(); 
    jf.setSize((d.width/2), (d.height/2)); 
    jf.setLocation((d.width/2 - d.width/4), (d.height/2 - d.height/4)); 
    jf.setMinimumSize(jf.getSize()); 
    jf.setResizable(true); 
    jf.pack(); 
    jf.setVisible(true); 
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    l1.setBounds(110, 150, 100, 40); 
    l2.setBounds(230, 150, 100, 40); 
    l3.setBounds(350, 150, 100,40); 
    l4.setBounds(470, 150, 100,40); 

    sod.setLocation(140, 20); 
    sod.setSize(300, 100); 

    jp = new JPanel(); 
    jp.setLayout(new FlowLayout(FlowLayout.CENTER)); 
    jp.setSize(jf.getWidth(), jf.getHeight()/2); 

    jp.add(l1); 
    jp.add(l2); 
    jp.add(l3); 
    jp.add(l4); 
    jp.add(sod); 

    jf.add(jp); 
    sod.addActionListener(action); 
} 

public ActionListener action = new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 

     Object source = e.getSource(); 
     if (source == sod) { 
     System.out.println(SkateDice.getStance()); 
     System.out.println(SkateDice.getTurn()); 
     System.out.println(SkateDice.getFlip()); 
     System.out.println(SkateDice.getSpin()); 

     l1.setText(SkateDice.getStance()); 
     l2.setText(SkateDice.getTurn()); 
     l3.setText(SkateDice.getFlip()); 
     l4.setText(SkateDice.getSpin()); 
     } else 
      System.out.println("no swag"); 
    } 
}; 



public static void main(String[] args) { 


    SKFrame skf = new SKFrame(); 

} 

} 

,这是我SkateDice类

package skateordicegui; 

import java.util.Random; 

public class SkateDice { 

static Random r = new Random(); 

// First time dealing with arrays 
//this is the easy way (kinda like python) 

static String[] d1 = {"Kickflip", "Kickflip", "Kickflip", "Heelflip", "Heelflip","Heelflip", "Shuv", "3 Shuv", "Shuv", "3 Shuv", "X", "Skate Or Dice"}; 
static String[] d2 = {"180", "180", "180", "360", "360", "360", "X", "Skate Or Dice"}; 
//OR 
static String d3[] = {"FS", "FS", "BS", "BS", "FS", "BS", "X", "Skate Or Dice"}; 
static String d4[] = {"Regular", "Regular", "Regular", "Switch", "Switch", "Switch", "Nollie", "Nollie", "Nollie", "Fakie", "Fakie", "Fakie", "X", "Skate Or Dice"}; 

public static int r1 = r.nextInt(d1.length); 
public static int r2 = r.nextInt(d2.length); 
public static int r3 = r.nextInt(d3.length); 
public static int r4 = r.nextInt(d4.length); 

public static String flip = d1[r1]; 
public static String spin = d2[r2]; 
public static String turn = d3[r3]; 
public static String stance = d4[r4]; 


static public String getFlip() { 
    return flip; 
} 

static public String getSpin() { 
    return spin; 
} 

static public String getTurn() { 
    return turn; 
} 

static public String getStance() { 
    return stance; 
} 


} 

回答

0

当你打电话给你的干将,他们只是返回值翻转,旋转,旋转,姿态如预期。如果你需要他们每次打电话给他们时间来改变值,你应该实现的东西如:

static public String getFlip() { 
    // generates a new random number 
    r1 = r.nextInt(d1.length); 

    // set a new value to flip 
    flip = d1[r1]; 

    // return the value 
    return flip;    
} 

重复这种逻辑到其他getter和你的程序应该工作。

相关问题