我正在使用Java创建一个战列舰游戏,但我在生成2个随机数时遇到了问题,这些随机数可以随机选择战列舰板上的一个位置。例如,计算机必须随机选择船上的一个空间来放置船只(稍后再进行射击(。
我创建了一个2D阵列:
int rows = 10;
int cols = 10;
char [][] grid;
grid = new char[rows][cols];
然后尝试了几种不同的方法来获得数组中的两个随机数,但我无法使其发挥作用。下面是我尝试过的一个例子:
int randomPos = (char) (Math.random() * (grid[rows][cols] + 1));
如果这没有道理,请问我一些问题。
Sean
Math.random()
生成一个十进制数。使用平方3.5779789689689...
(或你所指的任何东西(没有任何意义,所以使用Math.floor()
方法,将内部的数字四舍五入到最接近的整数。正如@Sanjay所解释的,单独生成数字。。。
int row = (int) Math.floor(Math.random() * rows);
int col = (int) Math.floor(Math.random() * cols);
现在,您可以使用实际的整数。
分别生成两个随机数,并使用它们为您的板编制索引。详细说明:
x = random(max_rows)
y = random(max_cols)
(x, y) -> random location (only if it's not already marked)
在您的情况下,随机数的范围应该在0和9之间(包括两者(。
int randomRow = Math.random() * grid.length;
int randomColumn = Math.random() * grid[0].length;
我不会使用char作为我的网格类型,但无论数组中的类型如何,上面的代码都能正常工作。
尝试声明这是一个ivar:
Random random = new Random();
//In the method do this:
int randomPos = generator.nextInt(11); //This generates a number between 0 and 10.