Java - 根据另一个值为

时间:2017-10-30 20:55:52

标签: java arrays multidimensional-array

这是明确的问题: 我想得到鼠标的坐标并将其放入一个变量中,我可以将其插入下面代码[method movePosition()]中显示的等式中。这是可能的还是我必须找出一种不同的方法?

如果没有上下文,问题就没有意义,所以这里有一个描述: 鼠标在迷宫中有8种可能的移动,无论它在哪里都可以工作。选择一个随机数来表示鼠标必须采取的移动。在我的脑海里看起来像这样,“ - ”就是鼠标本身:

1 2 3
4 - 5
6 7 8

例如,如果鼠标移动到#F,我怎么能让它移动到位置8(从下面的例子中移动#G)

A B 0 F 0 0 0 0
0 0 C E G J K L
0 0 D H I 0 M N

我正在考虑制作一个switch语句,每个“坐标”与1-8的数字相匹配,如下所示:

public int movePosition()
{
    int moveToPosition = movePicker();

    switch (moveToPosition)
    {
        case 1:
            this.getMaze()[row - 1][column - 1] = mouse;
            break;
        case 2:
            this.getMaze()[row - 1][column] = mouse;
            break;
        case 3:
            this.getMaze()[row - 1][column + 1] = mouse;
            break;
        //and so on...
    }

但我意识到,由于显而易见的原因,这不会起作用。 (行和列是用户定义的行和列) 有没有办法在鼠标所在的地方遵循同样的逻辑?我想获得鼠标的坐标并将其放入一个变量中,我可以插入上面的等式中。或者我必须找出不同的方法吗?

这就是我发现的与我想要的相似(click here),其他问题也是如此。然而,他们都在询问如何从数组的大小中找到坐标。我需要知道如何从鼠标的位置找到坐标,这可能是任何地方。

一些背景:

这是作业。我已经看了其他问题,虽然有些问题与我正在寻找的问题有关,但它们没有我需要的东西。

我有一个用户定义的迷宫中的鼠标。这意味着我,程序员,不知道迷宫的大小是多少。在用户定义迷宫的大小后,它将设置为0。例如,让我们做一个3 x 8的迷宫。

然后迷宫看起来像这样(但用户看不到这部分):

阵列[3] [8]:

0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0

在程序结束时,鼠标将越过末尾,留下一个指示移动的数字。 A为第一步,B为第二步,C为第三步等。这只是一个例子,实际代码的数字不是字母。我只需要区分清晰度 输出看起来如此(用户看到了这一点):

A B 0 F 0 0 0 0
0 0 C E G J K L
0 0 D H I 0 M N

谢谢!

1 个答案:

答案 0 :(得分:0)

这就是我如何构建方法,尽管有很多其他方法可以做到:

private int mouseCol;
private int mouseRow;

int[][] maze;

private final String LEFT       = "left";
private final String LEFT_UP    = "left_up";
private final String LEFT_DOWN  = "left_down";
//Etc

public String getRandomMove(){
    List<String> moves = getValidMoves();
    //pick a random one
}

public List<String> getValidMoves(){
    List<String> validMoves = new ArrayList<>();
    //Check left
    if(mouseCol != 0 && maze[mouseRow][mouseCol-1] == 0){
        validMoves.add(LEFT);
    }
    //Check left_up
    if(mouseRow != 0 && mouseCol != 0 && maze[mouseRow-1][mouseCol-1] == 0){
        validMoves.add(LEFT_UP);
    }
    //Etc
}