创建对象的全局数组(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();
有多个问题
- 类的主体中不能有任意代码,例如
调用。但是,可以使用新的类型[]{}语法直接初始化数组。也可以使用静态初始值设定项static{},但不建议这样做武器[0]=
- 另外,您需要通过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})
};