Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建对象的全局数组(java)_Java_Arrays_Object_Global - Fatal编程技术网

创建对象的全局数组(java)

创建对象的全局数组(java),java,arrays,object,global,Java,Arrays,Object,Global,所以我正在做一个太空入侵者主题项目,我的大部分课程都已经开始运行,并且已经开始制作动画了。这个过程的一部分是船上的武器 我有一个武器类,如下所示(关注构造函数): 在另一个类中,它处理游戏屏幕上所有要设置动画的元素,我希望有一个硬编码武器类型的全局数组,可以根据需要访问,而无需大惊小怪。我试图在课程内容的顶部这样做: /** * @(#)GameScreen.java * * * @author Tristan Nel - 18179460 * @version 1.00 20

所以我正在做一个太空入侵者主题项目,我的大部分课程都已经开始运行,并且已经开始制作动画了。这个过程的一部分是船上的武器

我有一个武器类,如下所示(关注构造函数):

在另一个类中,它处理游戏屏幕上所有要设置动画的元素,我希望有一个硬编码武器类型的全局数组,可以根据需要访问,而无需大惊小怪。我试图在课程内容的顶部这样做:

    /**
 * @(#)GameScreen.java
 *
 *
 * @author Tristan Nel - 18179460
 * @version 1.00 2015/3/4
 */

import java.util.Scanner;
import java.io.*;

public class GameScreen {

    private static final String HIGH_SCORE_FILE = "highScore.txt";

    //Available Weapons
    //UPDATED SINCE ORIGINAL POST
    public static final Weapon[] WEAPONS = new Weapon[4];
    WEAPONS[0] = new Weapon("Machinegun",       10, 20, 0, 0,   {Graphics.MG_L_NORM, Graphics.MG_R_NORM});
    WEAPONS[1] = new Weapon("Plasma MG",        20, 20, 0, 0,   {Graphics.PMG_L_NORM, Graphics.PMG_R_NORM});
    WEAPONS[2] = new Weapon("Photon Cannon",        40, 5, 0, 0,    {Graphics.PC_L_NORM, Graphics.PC_R_NORM});
    WEAPONS[3] = new Weapon("Alien Destabilizer",   60, 10, 0, 0,   {Graphics.AD_L_NORM, Graphics.AD_R_NORM});

    private Ship defender;
    private Weapon equipped;
    //private Invader[] aliens;
    //private Bullet[] bullets;
    private int score;
    private int highscore;
    private int lives;

    public GameScreen() {
    }

    public GameScreen(Ship defender, int score, int lives)
    {
        this.defender = defender;
        this.score = score;
        this.lives = lives;
    }

    public void loadHighscore()
    {
        try
        {
            Scanner sc = new Scanner(new File(HIGH_SCORE_FILE));
            this.highscore = Integer.parseInt(sc.next());
            sc.close();
        }
        catch(FileNotFoundException fnf)
        {
            System.out.println(fnf);
            this.highscore = 0;
        }

    }

    public void saveHighScore(int highscore)
    {
        try
        {
            FileWriter write = new FileWriter(HIGH_SCORE_FILE);
            PrintWriter pw = new PrintWriter(write);
            pw.print(this.highscore);

            pw.close();
        }
        catch(IOException e)
        {
            System.out.println(e);
        }
    }

    //GET and SET methods
    public void setDefender(Ship defender)
    {
        this.defender = defender;
    }

    public void setScore(int score)
    {
        this.score = score;
    }

    public void setLives(int lives)
    {
        this.lives = lives;
    }

    public Ship getDefender()
    {
        return this.defender;
    }

    public int getScore()
    {
        return this.score;
    }

    public int getLives()
    {
        return this.lives;
    }

}
这会在我尝试向数组添加另一个元素的每一行上显示以下错误消息:

更新

这非常令人沮丧。。 我在某个地方读到,你必须在一个方法中创建一个对象?(例如main()) 但我在我的驾驶课上试过了,没什么区别


非常感谢您提供的任何帮助/建议(:

事实上,我之前把它放错了,但是看起来您需要像这样使用新操作符调用构造函数

arrayName[0] = new Weapon();

有多个问题

  • 类的主体中不能有任意代码,例如
    武器[0]=
    调用。但是,可以使用新的类型[]{}语法直接初始化数组。也可以使用静态初始值设定项static{},但不建议这样做

  • 另外,您需要通过new关键字使用构造函数,它不仅仅是一个方法,即
    new-wearm()
    而不是
    wearm()

  • 不能使用{}来声明数组,即
    新字符串[]{{Graphics.MG_L_NORM,Graphics.MG_R_NORM}
    而不是
    {Graphics.MG_L_NORM,Graphics.MG_R_NORM}
工作版本

public static final Weapon[] WEAPONS = new Weapon[] {
    new Weapon("Machinegun",       10, 20, 0, 0,   new String []{Graphics.MG_L_NORM, Graphics.MG_R_NORM}),
    new Weapon("Plasma MG",        20, 20, 0, 0,   new String []{Graphics.PMG_L_NORM, Graphics.PMG_R_NORM}),
    new Weapon("Photon Cannon",        40, 5, 0, 0,    new String []{Graphics.PC_L_NORM, Graphics.PC_R_NORM}),
    new Weapon("Alien Destabilizer",   60, 10, 0, 0,   new String []{Graphics.AD_L_NORM, Graphics.AD_R_NORM})
};

由于这些类似乎有些静态,因此需要研究的另一个方面是使用枚举。这将有助于避免在搜索特定武器时出现复杂情况。更好的设计是使用WeaponType枚举,其中包含与武器相关的所有静态不可变数据,并使武器类包含所有状态数据a、

对不起,wrap这个词不能使错误报告非常可读。请从我的谷歌硬盘下载error.txt来正确检查它。我认为你必须使用新的关键字。我没有仔细查看错误,但我可以告诉你,对象声明需要
新的
,即
新武器(这里有东西)
。我假设错误的数量意味着这是您的问题中最小的。您确定要将
{Graphics.MG\u L\u NORM,Graphics.MG\u R\u NORM}
传递到
字符串[]sprites
是一种有效的方法吗?我不了解自己,只是想和你一起思考一下。如果你已经把这两个元素放在一个数组中,并将其作为参数传递给构造函数…添加到新关键字@ValentinWaeselynck中,不幸的是这没有帮助你是一个向导,工作得很完美。我有点糊涂,没有意识到我必须使用字符串数组的新关键字作为参数。许多thanks@gorrox23如果你喜欢他的回答,请接受。
public static final Weapon[] WEAPONS = new Weapon[] {
    new Weapon("Machinegun",       10, 20, 0, 0,   new String []{Graphics.MG_L_NORM, Graphics.MG_R_NORM}),
    new Weapon("Plasma MG",        20, 20, 0, 0,   new String []{Graphics.PMG_L_NORM, Graphics.PMG_R_NORM}),
    new Weapon("Photon Cannon",        40, 5, 0, 0,    new String []{Graphics.PC_L_NORM, Graphics.PC_R_NORM}),
    new Weapon("Alien Destabilizer",   60, 10, 0, 0,   new String []{Graphics.AD_L_NORM, Graphics.AD_R_NORM})
};