kelvin5gc 2015-09-23 02:26 采纳率: 46.2%
浏览 1566
已采纳

关于java数组的问题,想来这边问一下

首先是这样子的,我们作业时是一个打地鼠的小程序,模拟地鼠出现的样子。
我是先设定一个4x4的数组Array[4][4],数组默认值全部设定为0.
然后设定两个随机变量row和col,范围都在0-3之间
然后把Array[row][col]的值从设定为1,以表示地鼠出现的位置。
那接下来就是我想要问的地方;
如何把出现过的位置舍弃,就是希望接下来随机的row和col不要再重复出现同样的数字?

下面是代码片段
int i = new Random().nextInt(4);
int j = new Random().nextInt(4);
GameArray[i][j] = 1; //Susliks appears



for (int index = 0; index < 4; index++){
for (int index2 = 0; index2 < 4; index2++){

if ( GameArray[index][index2] == 1){
System.out.print("o ");
}else{
System.out.print("x ");
}
}
times++;
System.out.println();
}
因为要求是所有的位置都出现过1就结束程序。而我这样子每次循环都要上百次才能结束,所以我想问有没有什么办法可以控制循环次数在一定的范围内?比方说就是已经出现过的数组索引值就不再使用(比如说GameArray[3][3] = 1,那么接下来希望的随机不要再出现[3][3]这样子,如果出现了就跳出index的 for循环体,重新下一次随机)有没有什么办法可以实现?我刚接触java的,好多都还不清楚

  • 写回答

4条回答 默认 最新

  • 像海一样的人 2015-09-23 10:15
    关注

    你的问题有两个:1、出现的位置不允许再出现
    2、当所有的位置都为1的时候,程序完成(地鼠已经去过所有的地洞,而且没有重复)。
    如果你的问题是这样的话,答案如下:
    整个的思路:有一个地鼠类,地鼠类里面有一个创造位置的方法(跑的位置),方法是这样实现的:
    地鼠跑到一个位置的时候,将其位置赋给burrows数组且将值赋1,如果随机产生的位置是重复的话,那么就要检查burrows数组里的值是否都
    为1(地鼠跑过)。当然在检查的过程中,有地鼠没有跑过的(值为0),那么就要把值赋给rowIndex和colIndex,这是整个说明。

    注意事项:里面安全性还需自己验证

    package action;

    import java.util.Random;

    public class Suslik {

    /**
     * 随机跑到位置
     * @param row 跑的范围的横坐标
     * @param col 跑的范围的纵坐标
     */
    public void createPosition(int row,int col){
    
        int [][] burrows  = new int[row][col];
    
        Random creatNum = new Random();
        //横坐标
        int rowIndex;
        //纵坐标
        int colIndex;
    
        boolean index = false;
        while(!index){
            rowIndex = creatNum.nextInt(row);
            colIndex = creatNum.nextInt(col);
            int sum = 0;
            if(burrows[rowIndex][colIndex] != 0){
                for(int m = 0;m<row;m++){
                    for(int n = 0;n<col;n++){
                        if(burrows[m][n] == 0){
                            sum = ++sum;
                            rowIndex = m;
                            colIndex = n;
                            break;
                        }
                        index = true;
                    }
                    if(sum !=0){
                        index = false;
                        break;
                    }
                }
            }
            burrows[rowIndex][colIndex] = 1;
            System.out.println("row:"+rowIndex+" ,col:"+colIndex);
        }
    }
    
    public static void main(String [] args){
        new Suslik().createPosition(4, 4);
    }
    

    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料