【发布时间】:2012-03-24 15:51:23
【问题描述】:
我正在尝试制作一个带有“新游戏”按钮的程序,当按下该按钮时会询问用户一个新问题。这是一个关于州首府的问题,我希望每个新游戏都只更改问题中的州名。这可能是一种愚蠢的方法,但我只是在尝试并尝试了解更多关于 java 的信息。
我的问题是它只能工作一次。我按下新游戏,它第一次改变了,然后它什么也没做。我尝试过使用 while 和 for 循环的各种组合,但没有运气。有时,当我尝试在 for 循环的某种组合中使用 counter++ 时,程序甚至崩溃了!所以,是的,我很困惑,所以非常感谢。
主要
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args){
Gui a = new Gui();
List<String> stateList = new ArrayList<String>();
List<String> capsList = new ArrayList<String>();
for(String x: StateData.states)
stateList.add(x);
for(String z: StateData.caps)
capsList.add(z);
}
}
桂
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class Gui extends JFrame {
private static final long serialVersionUID = 1L;
JLabel instructions = new JLabel("What is the capital of Alabama?");
JLabel aLabel = new JLabel("Answer: ");
JTextField aField = new JTextField(16);
JLabel result = new JLabel();
JButton submit = new JButton("Submit");
JButton reset = new JButton("Reset");
JButton ng = new JButton("New Game");
final Random rand = new Random();
final int randPairNo = rand.nextInt(50);
final Rng rngOb1 = new Rng();
final int[] shuffList = rngOb1.numFinder();
public Gui() {
super("State Capitals Game");
setLookAndFeel();
setSize(325, 250);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setResizable(false);
setLayout(new GridBagLayout());
GridBagConstraints gc = new GridBagConstraints();
gc.insets = new Insets(5, 5, 5, 5);
gc.gridx = 0;
gc.gridy = 0;
add(instructions, gc);
gc.gridx = 0;
gc.gridy = 1;
add(aLabel, gc);
gc.gridx = 0;
gc.gridy = 2;
add(aField, gc);
gc.gridx = 0;
gc.gridy = 3;
add(result, gc);
gc.gridwidth = 3;
gc.fill = GridBagConstraints.HORIZONTAL;
gc.gridx = 0;
gc.gridy = 4;
add(submit, gc);
submit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String userIP = aField.getText();
String mg = StateData.caps[randPairNo];
if (userIP.equalsIgnoreCase(mg)) {
result.setText("That's correct!");
} else {
result.setText("Sorry, that's incorrect.");
}
}
});
gc.gridwidth = 3;
gc.fill = GridBagConstraints.HORIZONTAL;
gc.gridx = 0;
gc.gridy = 5;
add(reset, gc);
reset.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
aField.setText("");
}
});
gc.gridwidth = 3;
gc.fill = GridBagConstraints.HORIZONTAL;
gc.gridx = 0;
gc.gridy = 6;
add(ng, gc);
//This is the new game button I'm trying to get to work.
ng.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int counter = 0;
if (counter < shuffList.length) {
instructions.setText("What is the capital of "
+ StateData.states[shuffList[counter]] + "?");
counter++;
} else {
counter = 0;
}
}
});
}
private void setLookAndFeel() {
try {
UIManager
.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
} catch (Exception exc) {
// ignore error
}
}
}
Rng
import java.util.Random;
public class Rng {
int[] numFinder() {
int[] list = new int[50];
for (int i = 0; i < list.length; i++) {
list[i] = i;
}
Random rgen = new Random();
for (int i = 0; i < list.length; i++) {
int rnd = rgen.nextInt(list.length);
int temp = list[i];
list[i] = list[rnd];
list[rnd] = temp;
}
return list;
}
}
状态数据
public class StateData {
public static String[] states = {"Alabama", "Alaska", "Arizona", "Arkansas", "California",
"Colorado", "Connecticut", "Delaware", "Florida", "Georgia", "Hawaii",
"Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisianna",
"Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota", "Mississippi",
"Missouri", "Montana", "Nebraska", "Nevada", "New Hampsire", "New Jersey",
"New Mexico", "New York", "North Carolina", "North Dakota", "Ohio", "Oklahoma",
"Oregon", "Pennsylvania", "Rhode Island", "South Carolina", "South Dakota",
"Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Washington", "West Virginia",
"Winsconsin", "Wyoming" };
public static String [] caps = {"Montgomery", "Juneau", "Pheonix", "Little Rock", "Sacremento", "Denver",
"Hartford", "Dover", "Talahasee", "Atlanta", "Honolulu", "Boise", "Springfield", "Idianapolis",
"Des Moines", "Topka", "Franfort", "Baton Rouge", "Augusta", "Annapolis", "Boston", "Lansing",
"St Paul", "Jackson", "Jefferson City", "Helena", "Lincoln", "Carson City", "Concord",
"Trenton", "Santa Fe", "Albany", "Raleigh", "Bismarck", "Columbus", "Oklahama City",
"Salem", "Harrisburg", "Providence", "Columbia", "Pierre", "Nashville", "Austin", "Salt Lake City",
"Montpelier", "Richmond", "Olympia", "Charleston", "Madison", "Cheyenne"};
}
【问题讨论】:
-
为了尽快获得更好的帮助,请发布一个 SSCCE(而不是 4 个单独的公共课程)。