0

编译此静态方法时出现无法找到 int 数组变量 coord 的错误。我在方法中声明了它,它是 int[] 类型的,我不知道为什么它不起作用。我有一种感觉,它与静态方法有关,但是将其更改为静态是我发现首先使该方法起作用的唯一方法。

我觉得这对任何人来说都可能真的很简单,尤其是当我在这个主题上所能找到的只是更复杂的编码问题时。

如果这有帮助.. 此方法应该返回移动位置的 (x,y) 坐标。抱歉可能没有正确输入代码。第一次这样做。提前感谢您的帮助

代码:

public static int[] getMove(String player)
{
    boolean done = false;
    while(!done)
    {
        Scanner in = new Scanner(System.in);
        System.out.println("Input row for " + player);
        int x = in.nextInt() - 1;
        System.out.println("Input column for " + player);
        int y = in.nextInt() - 1;
        int[] coord = {x,y};
        if(getLoc(coord[0], coord[1]).equals("x") || getLoc(coord[0], coord[1]).equals("o") || coord[0] < 0 || coord[0] > ROWS || coord[1] < 0 || coord[1] > COLUMNS)

        {
            System.out.println("Invalid coordinates... please retry");
        }
        else
        {
            done = true;
        }
    } 
    return coord;   
}
4

2 回答 2

2

您缺少的是变量的范围。在父块中声明的变量可以在子块中访问,但反之则不行。

public void someMethod()
{
int x=1;

while(x<10)
{
x++; //x is accessible here, as it is defined in parent block.
int j = 0; //This variable is local to while loop and will cause error if used inside method
j++;
}
System.out.println(j);// The outer block does not know about the variable j!!
}

现在在你的情况下,

  • 注意你在哪里定义了坐标,以及你在什么地方使用它。
  • 试着弄清楚你应该在哪里定义coors 变量。
于 2013-04-25T05:10:55.300 回答
1

那是因为数组coordwhile循环本地的。因此它在其范围之外是不可见的。将声明移到coord外部while,它应该可以工作。

int[] coord = new int[2];
while(!done){
    ...
    ...
    coord[0] = x;
    coord[1] = y;
    ...
}
于 2013-04-25T05:10:15.017 回答