【问题标题】:How to randomly select elements of array for changing button text?如何随机选择数组元素来更改按钮文本?
【发布时间】:2017-12-10 23:20:26
【问题描述】:

我几乎已经设法让我的程序正常工作,但还有最后一点我遇到了麻烦。我不相信有人问过这个问题,因为我试图根据随机选择的数组值选择一个 JButton。我在一个网格上生成了 100 个 JButton,我想随机选择 20 个来更改它们的文本。问题是,文本没有改变!所以我想我还没有真正选择任何按钮。我的问题代码如下:

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");
    }
}

【问题讨论】:

  • 您选择 20 个按钮的尝试不正确。
  • 您可能希望在 for 循环之外初始化 Random,因为 random 实际上并不是真正随机的。它似乎是重复的:stackoverflow.com/questions/363681/…

标签: java arrays select button random


【解决方案1】:

您尝试随机选择恰好 20 个按钮是不正确的。

您在 Java 中有一个包含 100 个 JButton 的多维数组,在一个 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
}

【讨论】:

  • 我在 Java 方面不是很有经验,但我会努力添加一些示例代码供您使用。
  • 天哪,这是一个严重的代码块,非常感谢!
  • @Orion 太好了!如果已解决,请接受一个答案以将您的问题标记为已解决:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多