Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 随机移动';a';在二维阵列中,在跟踪通过每个点的时间数的同时,将其移动到指定位置_Java_Arrays_Loops_Random - Fatal编程技术网

Java 随机移动';a';在二维阵列中,在跟踪通过每个点的时间数的同时,将其移动到指定位置

Java 随机移动';a';在二维阵列中,在跟踪通过每个点的时间数的同时,将其移动到指定位置,java,arrays,loops,random,Java,Arrays,Loops,Random,我有一个2D数组(比如double[10][10]),其中包含一些1.0和10.0,其余的都是0.0。我试图通过循环这个数组来找到1.0(起点),从那里随机地(使用random.nextInt(4))向上、向下、向左或向右移动它,直到它达到10.0。我创建了一个emptyArray来跟踪它经过每个点的时间(或者至少我认为我做到了)。编译时没有出现任何问题,但在尝试将其显示到框架中时没有得到任何结果。你知道我哪里做错了或是失踪了吗 {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,

我有一个2D数组(比如double[10][10]),其中包含一些1.0和10.0,其余的都是0.0。我试图通过循环这个数组来找到1.0(起点),从那里随机地(使用random.nextInt(4))向上、向下、向左或向右移动它,直到它达到10.0。我创建了一个emptyArray来跟踪它经过每个点的时间(或者至少我认为我做到了)。编译时没有出现任何问题,但在尝试将其显示到框架中时没有得到任何结果。你知道我哪里做错了或是失踪了吗

{0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}
{0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}
{0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}
{0.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0}
{0.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0}
{0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}
{0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}
{0.0,10.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}
{0.0,10.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}
{0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}
二维阵列的示例

    double[][] getPath(double[][] dataIn) {
    double[][] emptyArray = new double[dataIn.length][dataIn[0].length];
    double[][] drunkLoc = new double[dataIn.length][dataIn[0].length];
    for (int i = 0; i < dataIn.length; i++) {
        for (int j = 0; j < dataIn[i].length; j++) {
            if (dataIn[i][j] == 1.0) {

                double drunkHome = 10.0;
                drunkLoc[i][j] = dataIn[i][j];
                do {
                    int dir = getDirection();
                    switch(dir) {
                        case 0: 
                            if ((i > 0) && (j > 0)) {
                                drunkLoc[i][j] = drunkLoc[i-1][j];
                                double value = emptyArray[i][j];
                                emptyArray[i][j] = value + 1;
                                emptyArray[i][j] = (255<<24)  | (255<<16) | (255<<8) | 255;
                            } else {
                                break;
                            }
                            break;
                        case 1: 
                            if ((i > 0) && (j > 0)) {
                                drunkLoc[i][j] = drunkLoc[i][j-1];
                                double value = emptyArray[i][j];
                                emptyArray[i][j] = value + 1;
                                emptyArray[i][j] = (255<<24)  | (255<<16) | (255<<8) | 255;
                            } else {
                                break;
                            }
                            break;
                        case 2: 
                            if ((i > 0) && (j > 0)) {
                                drunkLoc[i][j] = drunkLoc[i+1][j];
                                double value = emptyArray[i][j];
                                emptyArray[i][j] = value + 1;
                                emptyArray[i][j] = (255<<24)  | (255<<16) | (255<<8) | 255;
                            } else {
                                break;
                            }
                            break;
                        case 3: 
                            if ((i > 0) && (j > 0)) {
                                drunkLoc[i][j] = drunkLoc[i][j+1];
                                double value = emptyArray[i][j];
                                emptyArray[i][j] = value + 1;
                                emptyArray[i][j] = (255<<24)  | (255<<16) | (255<<8) | 255;
                            } else {
                                break;
                            }
                            break;
                        default:
                    }
                } while (drunkLoc[i][j] != drunkHome);
            }
        }
    }
    return emptyArray;
}
double[]getPath(double[]dataIn){
double[]emptyArray=new double[dataIn.length][dataIn[0.length];
double[]loc=新的double[dataIn.length][dataIn[0.length];
for(int i=0;i0)和&(j>0)){
醉鬼[i][j]=醉鬼[i-1][j];
双值=空数组[i][j];
空数组[i][j]=值+1;

emptyArray[i][j]=(255好的,供您学习,以下是一些示例代码,它将为您提供您正在寻找的答案(从(XPO,YPO)到(destX,destY)在一个尺寸为PendDimension x PendDimension的“板”上的移动次数:

        int penDimension = 10;
        int destX = 2;
        int destY = 2;
        int xpos = 5;
        int ypos = 5;

        // Add this to keep track of no moves through each square
        int[][] moveCounts = new int[penDimension][penDimension];

        Random r = new SecureRandom();
        long noMoves = 0;
        while (xpos != destX || ypos != destY) {
            switch (r.nextInt(4)) {
            case 0 : xpos++; break;
            case 1 : xpos--; break;
            case 2 : ypos++; break;
            case 3 : ypos--; break;
            }
            if (xpos < 0) xpos = 0;
            if (ypos < 0) ypos = 0;
            if (xpos > penDimension) xpos = penDimension;
            if (ypos > penDimension) ypos = penDimension;
            noMoves++;

            // Add this to keep track of no moves through each square
            moveCounts[ypos][xpos]++;

        }
        System.out.println("Number of moves: " + noMoves);
我只是像上面那样写,因为我觉得这样更容易理解


您也可以编写“new-SecureRandom()”,而不是编写“new-Random()”,这可能是您所学的内容。但是SecureRandom的质量要高得多(但速度较慢)随机数生成器。通常,在编写重复生成大量随机数的“模拟”时,最好避免使用标准的随机类,并使用更高质量的生成器。

我还不太清楚您在这里实际要做什么,但您是否在每次迭代时都登录了数组ion并将输出与预期结果进行比较?顺便说一句,您的条件“(i>0)和(j>0)”对于dirs 1-3是错误的。加上带有移位的奇异行(为什么不写“-1”?!?)将始终覆盖“值+1”我想这不是你想要的。嗨@NeilCoffey,我正在尝试获取数组的返回值,其中包含从“1.0”到“10.0”的随机过程中“a”经过的时间数。我是java新手,所以我不太明白你所说的“在每次迭代中记录数组的if”是什么意思,你能解释一下吗。谢谢。(I>0)&&(j>0)4种可能情况中的每种情况的一部分都是为了防止数组中的“a”用完。这是正确的方法吗?要注销数组的内容,请执行System.out.println(Arrays.deepToString(array));在使用“while”命令行之前,在每个数组上调用此命令,看看它是什么样子。很好,我会尝试一下,非常感谢@Neil Coffey。但我很好奇,如果我使用上面的方法,是否有一种方法可以计算“a”通过每个点(而不是目的地)的时间数?这意味着我必须记录麻木时间“a”在到达目的地之前经过每个空间。有什么建议吗?我如何获得数组中指定单元格的x,y?例如,如果我想获得第一个“1.0”的x,y,我该怎么做?我想使用For循环遍历行和列,设置一个if条件来匹配x,y='1.0'。然后我被卡住了,如何返回x和y,但不返回x,y中的值“1.0”?如果确实需要,请创建一个数组,移动位置后,在该位置增加值。我将更新代码。
xpos = Math.max(0, xpos - 1);