范围问题

时间:2013-02-15 23:28:02

标签: java scope

我不知道我的代码有什么问题,因为编译器无法找到变量k,所以无法编译。

我的代码:

public class t
{
    public static void main(String args[])
    {
        int r = 10;
        int c = 10;

        char[][] map = new char[r][c];

        for(int i = 1; i < (r - 1); i++)
        {
            for(int k = 1; k < (c - 1); k++);
            {
                map[i][k] = '$';
            }
        }
    }
}

错误它给了我:

  symbol:   variable k
  location: class t
  1 error

我一直认为这是一个范围问题,但是variable k在嵌套的for循环中,所以应该没问题呢?

7 个答案:

答案 0 :(得分:4)

你的“k”for循环结尾有一个分号;去掉它。变化

for(int k = 1; k < (c - 1); k++);
{
    map[i][k] = '$';
}

for(int k = 1; k < (c - 1); k++)
{
    map[i][k] = '$';
}

答案 1 :(得分:3)

您的代码中存在一个小错误:

for(int k = 1; k < (c - 1); k++);

最后不应该有分号。

答案 2 :(得分:2)

在第二个循环结束时使用分号,将其删除,这将有助于您的事业

for(int k = 1; k < (c - 1); k++);
                                ^

答案 3 :(得分:1)

因为在下线末尾有额外的分号......

for(int k = 1; k < (c - 1); k++)

答案 4 :(得分:1)

for(int k = 1; k < (c - 1); k++);

放弃;


精化:

;实际上是一个在Java中有效的空语句:

Foo f = new Foo();
;
f.doSomething();

在Java中,您可以拥有一个没有大括号{ }的控制语句,例如:

if(booleanFlag) doSomething();
else doSomethingElse();

// ...

for(String s : stringArray) System.out.println(s);

这就是您在代码中使用的内容:

for(int k = 1; k < (c - 1); k++); // iterate on the empty statement

然后,您打开了一个与for循环无关的新代码块:

{
    map[i][k] = '$';
}

只执行一次。

答案 5 :(得分:1)

for loop末尾有一个分号,用于初始化k - 删除它,你应该没问题!

答案 6 :(得分:1)

在第二个for循环后删除分号。

分号是一种称为空语句的合法语句;这意味着“什么都不做”。