2012-08-22 49 views
0

美好的一天,有人可以向我解释为什么我有这个错误?

我有一个问题,在我的代码中,一个声明有一个函数外的错误。

的片段是:

public class Gold { 

    Block[][] block = new Block[4][4]; 


     this.block[1][4] = new Block(); //1 


     public void populate() { 
      this.block[1][4] = new Block();//2 
    } 

} 

this.block[1][4] = new Block();编号2不具有错误的代码。然而,这是不是在函数中的第一个代码显示错误:

Illegal start type

Cannot find symbol

']' expected

invalid method declaration, return type required.

我只是想明白这是为什么hapenning,我错过了什么。

感谢

回答

2

我认为你应该把你的代码在构造函数中:

public Gold(){ 
    this.block[1][4] = new Block(); 
} 

在java类,你可以定义变量或方法(包括构造函数),但它不能使用明码。

+0

或者包装void方法。 – Dan

4

没有与指数4的最后一个元素没有元素具有索引3

+0

这不是编译错误的原因。 – assylias

+0

是的,关于这个。在发布这篇文章时,我忘了修改那部分内容。 – NewbieLearner

+2

@assylias:我知道但是当我发布时已经给出了正确的解决方案。我想防止下一个问题:) –

3

你必须在一个代码块的声明。

尝试

public class Gold { 
    Block[][] block = new Block[4][4]; 
    { // initializer block 
     this.block[1][3] = new Block(); //1 
    } 
4

不能直接作为你的情况下,1以上没有初始化的变量,你可以像构造函数初始化block[][]

public Gold(){ 
    this.block[1][3] = new Block(); 
} 

或像块:

Block[][] block = new Block[4][4]; 
{ 
     this.block[1][3] = new Block(); 
} 
1

这句话

this.block[1][4] = new Block(); //1 

不能超出方法或初始化块。如果你想初始化数组,你必须在声明或方法内部完成(构造函数可能是个好地方),或者你必须使用Initialisation块。

还检查数组边界。在Java中,数组有0个索引。

2

您需要将代码包装在方法中,而不是在类体中。如果其Gold类的初始化的一部分放在它的构造函数里面,如:

public class Gold { 

    Block[][] block = new Block[4][4]; 

    public Gold() { 
      this.block[1][4] = new Block(); 
    } 

} 

类体只允许变量声明和实例,而不是标准的操作,例如更改对象(您的数组)值。

编辑:如其它所指出的,该指数4不会大型4的阵列存在,从0仅索引以3可以被访问。

1

代码this.block[1][4] = new Block()被编译,但会失败在运行时:你的数组有4个元素,而在Java和所有类似C语言的指数从0开始,所以4元素多头排列的最大值为3

而且你不能在java中的方法之外编写代码,所以如果你尝试这个,你会得到编译错误。

2
this.block[1][4] = new Block(); //1 

是一个表达式不是字段初始化。它不能在方法体外。

3

这里有两个问题,您需要初始化范围内的任何对象。您必须致电1号线in a constructor or in a function or with in a block (enclosed with in {and} )。这里您需要知道static blocknon-static blocks之间的区别。

您遇到的其他问题是this.block[1][4] = new Block();将抛出ArrayIndexOutofBounds异常,因为数组长度为4,并且您尝试插入对象并将其放在第5位。

+0

明白了。在第二个问题中,我忘了解决这个问题。 :) 非常感谢 – NewbieLearner

相关问题