如何随机选择数组元素来更改按钮文本?

时间:2017-12-10 23:20:27

标签: java arrays select button random

我几乎设法使我的程序正常运行,但仍有最后一点我遇到了麻烦。我不相信有人问过这个问题,因为我试图根据随机选择的数组值选择一个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");
    }
}

1 个答案:

答案 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
}