加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 将数字放在2D数组中的随机点上

发布时间:2020-12-15 04:32:03 所属栏目:Java 来源:网络整理
导读:我有一个有5行5列的2D数组.我想要它,以便在2D数组中的8个随机点(使其选择一个随机的行和列)放置一个’1’的字符. 我做的是调用Random类并生成0到4之间的数字(对于数组的5个点)然后我有两个for循环运行8次(对于我想要的8个随机点),一个经过行,另一个通过列.
我有一个有5行5列的2D数组.我想要它,以便在2D数组中的8个随机点(使其选择一个随机的行和列)放置一个’1’的字符.

我做的是调用Random类并生成0到4之间的数字(对于数组的5个点)然后我有两个for循环运行8次(对于我想要的8个随机点),一个经过行,另一个通过列.

这是我到目前为止的代码:

char[][] battleship = new char[5][5];
//I didn't include this but I have a for loop that populates all the rows and columns with a char of '0'
        Random random = new Random();
        int randomNum = random.nextInt(4);

        for (int i = 0; i < 8; i++)
        {
              for (int o = 0; o < 8; o++)
        {

            battleship[randomNum][randomNum] = '1';

        }
        }

我得到的问题是,它不是将’1’放在8个随机位置,而是连续放入5个位置.

我该如何纠正?

以下是输出示例:

0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
0
0
0
0
0

‘1’不在8个随机点中.

我哪里做错了?

解决方法

嵌套循环每次运行8次将迭代64次.您不需要嵌套循环来执行此操作.其中一个简单的方法是使用while循环并分配8个随机点,直到拍摄所有8个点:

int occupiedSpots = 0;

while(occupieedSpots < 8){
    int x = random.nextInt(rows);
    int y = random.nextInt(cols);
    if(battleship[x][y] == 0){
        battleShip[x][y] = 1;
        occupiedSpots ++;
    }
}

还要确保在每次迭代中生成新的随机数,否则您将始终使用相同的随机值.

使用while循环还可确保所有8个点位于不同位置.如果您只是在没有检查的情况下使用for循环实现它,那么有一些趋势可能会在同一位置上落下两次.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读