如何使用变量来指定数组长度?

时间:2014-07-14 12:46:22

标签: java arrays

我正在用Java开始我的第一场比赛。我刚开始编程所以请不要判断!

我在main方法的开头设置了一个数组,创建了6个项目。

Item item[] = new Item[6]

然而,我现在已经决定要添加更多游戏模式 - 简单,中等和疯狂。 Easy将有6件商品, 中等有10, 疯了20岁。

这是代码的骨架。

boolean easy, medium, hard;
int itemnumber
Item item[] = new Item[itemnumber]

public void start(){
    if(easy){
        itemnumber = 6
    }else if(medium){
        itemnumber = 10
    }else if(insane){
        itemnumber = 20
    }
    for (int i = 0; i < item.length; i++) {
            item[i] = new SpotPlus(getWidth() + 500 * i);
    }
}

public void paint(Graphics G)
    for (int i = 0; i < item.length; i++) {
       item[i].paint(g);
    }
}  

我认为问题是变量itemnumber只在数组设置后才更改。但是如果我把数组放在if / else之后,方法paint就能够“看到”数组。

任何人都可以想到解决这个问题的方法吗? 谢谢堆!

如果您需要更多信息,请不要犹豫!

4 个答案:

答案 0 :(得分:3)

将您的开始方法更改为

Item item[];

public void start(){
    if(easy){
        itemnumber = 6
    }else if(medium){
        itemnumber = 10
    }else if(insane){
        itemnumber = 20
    }
    item = new Item[itemnumber];
    for (int i = 0; i < item.length; i++) {
            item[i] = new SpotPlus(getWidth() + 500 * i);
    }

}

将数组声明在顶部,并在分配itemnumber后初始化它。

答案 1 :(得分:1)

尝试使用java.util.ArrayList。您将能够拥有动态大小的阵列。

或者,在start中重新创建数组。

答案 2 :(得分:0)

只需在顶部声明变量,然后在start()方法中初始化它:

boolean easy, medium, hard;
int itemnumber;
Item[] item; //declaration only

public void start(){
    if(easy){
        itemnumber = 6;
    }else if(medium){
        itemnumber = 10;
    }else if(insane){
        itemnumber = 20;
    }
    item = new Item[itemnumber]; //initialize array
    for (int i = 0; i < item.length; i++) {
            item[i] = new SpotPlus(getWidth() + 500 * i);
    }
}

public void paint(Graphics G)
    for (int i = 0; i < item.length; i++) {
       item[i].paint(g);
    }
}

答案 3 :(得分:0)

首先,你在第3行(Item item[] = new Item[itemnumber]),6(itemnumber = 6),8(itemnumber = 10)和10(itemnumber = 20)的末尾忘记了分号,你忘记了方法paint中的一个大括号(它应该是public void paint(Graphics G) {。要解决数组问题,你可以这样做:

boolean easy, medium, hard;
int itemnumber;
Item item[];

public void start(){
    if(easy){
        itemnumber = 6;
    }else if(medium){
        itemnumber = 10;
    }else if(insane){
        itemnumber = 20;
    }
        item[] = new Item[itemnumber];
    for (int i = 0; i < item.length; i++) {
            item[i] = new SpotPlus(getWidth() + 500 * i);
    }
}

public void paint(Graphics G) {
    for (int i = 0; i < item.length; i++) {
       item[i].paint(g);
    }
}