首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跨10x10网格阵列的随机游走

跨10x10网格阵列的随机游走
EN

Stack Overflow用户
提问于 2016-02-25 05:08:51
回答 1查看 563关注 0票数 0

这个程序的目的是建立一个由句点(.)组成的10x10数组网格,允许用户指定一个起点,然后程序将随机选择分配给“步行者”前进方向的数字。每移动一次,它就用字母表中的下一个字母来标记它的位置(起始点用A标记)。我还没有完成这一部分,但我知道我会怎么做;如果walker超出了数组的界限(AKA > 10或< 0),它会说“你被逮捕了”,如果变量alpha == 'Z‘它会说“你回家了”。

据我所知,主要的问题是使用processing()方法,我从getRand中提取数字(我已经确认它是有效的),然后将它们分配给数组。但由于某些原因,当它打印网格时,它只显示起点,而不显示步行器的运动。

我的另一个不太重要的问题是,是否有一种比我的方式更简单的方式来显示我的网格(System.out.print中的一块巨大的文本块)

代码语言:javascript
复制
    package walktester;

import java.lang.Math;
import java.util.Random;
import java.util.Scanner;

class DrunkWalker {
    private char[][] walkgrid = new char[10][10];
    private static int randNSEW;
    private int randomnum;
    private int startrow;
    private int startcol;
    private char alpha = 'A';
    private int nextrow;
    private int nextcol;

    public DrunkWalker(int r, int c) {
        startrow = r;
        startcol = c;
        nextrow = startrow;
        nextcol = startcol;

        for (int i = 0; i < 10; i ++) {
            for (int j = 0; j < 10; j++)
                walkgrid[i][j] = '.';
        }
        walkgrid[r][c] = alpha;
    }

    public static void getRand(){
        int x100 = 0;
        double randomNum = 0.0;
    randomNum = Math.random();
    x100 = (int) (randomNum * 100);
    randNSEW = x100 % 4;
}

public int getNextRow(){
    return nextrow;
}

public int getNextCol(){
    return nextcol;
}

public void processing(){
    for(int i = 0; i < 26; i ++){
    getRand();
    if(randNSEW == 0){
        nextcol--;
        walkgrid[nextrow][nextcol] = alpha++;
    }
    if(randNSEW == 1){
        nextrow++;
        walkgrid[nextrow][nextcol] = alpha++;
    }
    if(randNSEW == 2){
        nextcol++;
        walkgrid[nextrow][nextcol] = alpha++;
    }
    if(randNSEW == 3){
        nextrow--;
        walkgrid[nextrow][nextcol] = alpha++;
    }
    }
}



public char[][] DisplayGrid() {
    System.out.print(
            walkgrid[0][0] + " " + walkgrid[0][1] + " " + walkgrid[0][2] + " " + walkgrid[0][3] + " " + walkgrid[0][4] + " " + walkgrid[0][5] + " " + walkgrid[0][6] + " " + walkgrid[0][7] + " " + walkgrid[0][8] + " " + walkgrid[0][9] + "\n" + 
            walkgrid[1][0] + " " + walkgrid[1][1] + " " + walkgrid[1][2] + " " + walkgrid[1][3] + " " + walkgrid[1][4] + " " + walkgrid[1][5] + " " + walkgrid[1][6] + " " + walkgrid[1][7] + " " + walkgrid[1][8] + " " + walkgrid[1][9] + "\n" + 
            walkgrid[2][0] + " " + walkgrid[2][1] + " " + walkgrid[2][2] + " " + walkgrid[2][3] + " " + walkgrid[2][4] + " " + walkgrid[2][5] + " " + walkgrid[2][6] + " " + walkgrid[2][7] + " " + walkgrid[2][8] + " " + walkgrid[2][9] + "\n" + 
            walkgrid[3][0] + " " + walkgrid[3][1] + " " + walkgrid[3][2] + " " + walkgrid[3][3] + " " + walkgrid[3][4] + " " + walkgrid[3][5] + " " + walkgrid[3][6] + " " + walkgrid[3][7] + " " + walkgrid[3][8] + " " + walkgrid[3][9] + "\n" + 
            walkgrid[4][0] + " " + walkgrid[4][1] + " " + walkgrid[4][2] + " " + walkgrid[4][3] + " " + walkgrid[4][4] + " " + walkgrid[4][5] + " " + walkgrid[4][6] + " " + walkgrid[4][7] + " " + walkgrid[4][8] + " " + walkgrid[4][9] + "\n" + 
            walkgrid[5][0] + " " + walkgrid[5][1] + " " + walkgrid[5][2] + " " + walkgrid[5][3] + " " + walkgrid[5][4] + " " + walkgrid[5][5] + " " + walkgrid[5][6] + " " + walkgrid[5][7] + " " + walkgrid[5][8] + " " + walkgrid[5][9] + "\n" + 
            walkgrid[6][0] + " " + walkgrid[6][1] + " " + walkgrid[6][2] + " " + walkgrid[6][3] + " " + walkgrid[6][4] + " " + walkgrid[6][5] + " " + walkgrid[6][6] + " " + walkgrid[6][7] + " " + walkgrid[6][8] + " " + walkgrid[6][9] + "\n" + 
            walkgrid[7][0] + " " + walkgrid[7][1] + " " + walkgrid[7][2] + " " + walkgrid[7][3] + " " + walkgrid[7][4] + " " + walkgrid[7][5] + " " + walkgrid[7][6] + " " + walkgrid[7][7] + " " + walkgrid[7][8] + " " + walkgrid[7][9] + "\n" + 
            walkgrid[8][0] + " " + walkgrid[8][1] + " " + walkgrid[8][2] + " " + walkgrid[8][3] + " " + walkgrid[8][4] + " " + walkgrid[8][5] + " " + walkgrid[8][6] + " " + walkgrid[8][7] + " " + walkgrid[8][8] + " " + walkgrid[8][9] + "\n" + 
            walkgrid[9][0] + " " + walkgrid[9][1] + " " + walkgrid[9][2] + " " + walkgrid[9][3] + " " + walkgrid[9][4] + " " + walkgrid[9][5] + " " + walkgrid[9][6] + " " + walkgrid[9][7] + " " + walkgrid[9][8] + " " + walkgrid[9][9] + "\n"
    );
    return walkgrid;
    }
}

public class WalkTester {

public static void main(String[] args) {
    Scanner inpr = new Scanner(System.in);
    Scanner inpc = new Scanner(System.in);
    Scanner inpchoice = new Scanner(System.in);

    int r = 0;
    int c = 0;
    char choice = 'y';

    while(choice == 'y' || choice == 'Y') {
        System.out.println("Please enter x coordinate between 1 and 10.");
        r = inpr.nextInt();
        r = r - 1;

        System.out.println("Please enter y coordinate between 1 and 10");
        c = inpr.nextInt();
        c = c - 1;

        if(r < 0 || r > 9 || c < 0 || c > 9){
            System.out.println("Invalid Entry. Restart? y/n");
            choice = inpchoice.next().charAt(0);
            if(choice == 'y' || choice == 'Y'){
                continue;
            }
            else if(choice == 'n' || choice == 'N'){
                return;
            }
            else{
                System.out.println("Invalid Entry. Restart? y/n");
                choice = inpchoice.next().charAt(0);
            }
        }
        DrunkWalker drunkwalker = new DrunkWalker(r, c);
        drunkwalker.DisplayGrid();

        System.out.println("Restart? y/n");
        choice = inpchoice.next().charAt(0);
        if(choice == 'y' || choice == 'Y'){
            continue;
        }
        else if(choice == 'n' || choice == 'N'){
            return;
        }
        else{
            System.out.println("Invalid Entry. Restart? y/n");
            choice = inpchoice.next().charAt(0);
        }


       }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2016-02-25 05:26:52

移动遍历器的代码在一个名为processing()的方法中,但您从未调用过它。

你可以让你的DisplayGrid()方法变得更简单(它仍然会打印相同的东西):

代码语言:javascript
复制
public char[][] DisplayGrid() {
    for(int y = 0; y < 10; y++) {
        for(int x = 0; x < 10; x++) {
            System.out.print(walkgrid[x][y] + " ");
        }
        System.out.println();
    }
    return walkgrid;
}

您的processing()方法需要检查walker是否离开了该区域的边界。如果你不这样做,你会得到一个ArrayIndexOutOfBoundsException

代码语言:javascript
复制
public boolean processing(){
    for(int i = 0; i < 26; i ++){
        getRand();
        if(randNSEW == 0){
            nextcol--;
        }
        if(randNSEW == 1){
            nextrow++;
        }
        if(randNSEW == 2){
            nextcol++;
        }
        if(randNSEW == 3){
            nextrow--;
        }

        if(nextrow < 0 || nextrow >= 10 || nextcol < 0 || nextcol >= 10) {
            return false;
        }

        walkgrid[nextrow][nextcol] = alpha++;
    }
    return true;
}

现在您需要调用processing()并检查返回值,以查看遍历是否成功:

代码语言:javascript
复制
DrunkWalker drunkwalker = new DrunkWalker(r, c);
boolean walkerSucceeded = drunkwalker.processing();
drunkwalker.DisplayGrid();
if(walkerSucceeded) {
    System.out.println("You made it home");
} else {
    System.out.println("You were arrested");
}

记住(当你测试这个的时候你会看到),步行者可以穿过他们自己的轨迹(所以你可能会看到一些字母丢失)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35613138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档