我几乎设法使我的程序正常运行,但仍有最后一点我遇到了麻烦。我不相信有人问过这个问题,因为我试图根据随机选择的数组值选择一个JButton。我在网格上生成了一百个JButton,我想随机选择二十个以更改文本。问题是,文字没变!所以我想我没有真正选择任何按钮。我的问题代码如下:
for (int i = 0; i < 20; i++)
{
Random randomRow = new Random(10);
Random randomColumn = new Random(10);
if (button == buttons[randomRow.nextInt(10)+1][randomColumn.nextInt(10)+1])
{
button.setText("treasure");
}
}
答案 0 :(得分:0)
您尝试随机选择20个按钮是不正确的。
你有一个包含100个JButton的Java多维数组,在10x10网格中如下:
buttons = [
[JButton0, JButton1, ..., JButton9],
...
[JButton89, JButton90, ..., JButton99]
]
您想要随机选择20个按钮。但是在你提供的代码中,你正在遍历所有按钮,并且在循环内部生成一个随机数并检查这个迭代是否与随机数匹配。
这是错误的,您应该随机选择20个唯一索引,并单独更改这些随机索引处的按钮。
这里有一些代码可以从多维数组中随机选择20个按钮。
JButton[][] buttons = new JButton[10][10]; // Array of 100 JButtons
int totalButtons = 0; // Length of total buttons
for (int i = 0; i < buttons.length; ++i) { // Count the length of total buttons
if (i == 0) {
totalButtons = buttons[i].length;
} else {
totalButtons += buttons[i].length;
}
}
int[] randomIndex = new int[20]; // 20 random button indexes
// Fill random indexes
Random random = new Random(); // Generate a random
for (int i = 0; i < randomIndex.length; ++i) { // Iterate over randomIndex array
int randomInt = random.nextInt(totalButtons); // Get a random integer from the random
for (int j = 0; j < i; ++j) { // Iterate over randomIndex array but no further than i
if (randomInt == randomIndex[j]) { // Check if random index already exists
randomInt = random.nextInt(totalButtons); // If random index already exists, select a different index
--j; // Do not iterate, check same index again
}
}
randomIndex[i] = randomInt; // Set random index
}
// Change button texts
for (int i : randomIndex) { // Iterate over random indexes
int row = i / 10; // Get row from index
int col = i % 10; // Get column from index
buttons[row][col].setText("treasure"); // Modify randomly selected button
}