Java 无法增加变量(面向对象编程)
我被任务2困住了,每次创建敌人时,我都必须增加敌人的计数器。我已经创建了enemey飞船,并将计数器字段设置为静态(我想调用计数器号码) 最终的解决方案应该增加Eneyships的计数器,我需要声明一个静态字段,该字段应该从0开始,当创建第一个Eneyship时,应该将该字段增加到1,第二个增加到2,依此类推,然后在打印第一行输出时可以使用该字段的值。也就是说,对于第一个敌人,你应该打印“敌人1”,第二个敌人应该打印“敌人2”,依此类推 这就是我在我的“敌人”课程中尝试的:Java 无法增加变量(面向对象编程),java,oop,static,increment,Java,Oop,Static,Increment,我被任务2困住了,每次创建敌人时,我都必须增加敌人的计数器。我已经创建了enemey飞船,并将计数器字段设置为静态(我想调用计数器号码) 最终的解决方案应该增加Eneyships的计数器,我需要声明一个静态字段,该字段应该从0开始,当创建第一个Eneyship时,应该将该字段增加到1,第二个增加到2,依此类推,然后在打印第一行输出时可以使用该字段的值。也就是说,对于第一个敌人,你应该打印“敌人1”,第二个敌人应该打印“敌人2”,依此类推 这就是我在我的“敌人”课程中尝试的: public cla
public class EnemyShip
{
private int position;
private int velocity;
private int life;
private static int number = 0;
private boolean justHit;
public EnemyShip()
{
System.out.println("Enemy #1");
System.out.print("- Initial position: ");
position = Global.keyboard.nextInt();
System.out.print("- Initial velocity: ");
velocity = Global.keyboard.nextInt();
}
}
我创建了publicsvoidincrement方法,并尝试使用它来增加,但没有成功。不知是否有人能帮我解释一下如何解决这个问题,以及如何在java中增加一个变量。
谢谢
为什么需要一个
increment()
方法,为什么每次递增3
number
变量是static
,因此您可以在类中的任何位置访问它
使用它并在构造函数中递增它
public EnemyShip()
{
System.out.print("- Initial position: ");
position = Global.keyboard.nextInt();
System.out.print("- Initial velocity: ");
velocity = Global.keyboard.nextInt();
life = 10;
boolean justHit = false;
number++;
System.out.println("Enemy #" + number);
}
每次你打电话
new EnemyShip();
您将看到该声明
Enemy #[some number]
如果您想记住哪个EnemyShip
有哪个编号,可以添加一个实例字段
private int shipNumber;
public EnemyShip()
{
System.out.print("- Initial position: ");
position = Global.keyboard.nextInt();
System.out.print("- Initial velocity: ");
velocity = Global.keyboard.nextInt();
life = 10;
boolean justHit = false;
shipNumber = ++number;
System.out.println("Enemy #" + shipNumber);
}
此解决方案在多线程环境中是危险的。我仍然不知道你的increment()
方法是用来做什么的
编辑
您似乎到处都是,缺乏一些关于类如何工作的bacis java知识。
读一读所有的书
然后运行此代码
public class EnemyShip {
private static int number = 0;
public EnemyShip() {
number++;
System.out.println("Enemy #" + number);
}
public static void main(String[] args) {
new EnemyShip();
new EnemyShip();
new EnemyShip();
}
}
它将输出
Enemy #1
Enemy #2
Enemy #3
根据您提供的信息,我了解到每次创建敌舰时,您都必须增加
计数器的值。因此,每次调用构造函数时,都应该递增计数器。因此,increment
函数应该如下所示:
public void increment()
{
number = number + 1;
System.out.println("Enemy " + number + "#");
}
OP,您需要从某处调用increment方法。除非调用该方法,否则该方法不会运行
public class Game {
private PlayerShip player;
private EnemyShip enemy1;
private EnemyShip enemy2;
private EnemyShip enemy3;
public Game() {
player = new PlayerShip();
enemy1 = new EnemyShip(); EnemyShip.increment();
enemy2 = new EnemyShip(); EnemyShip.increment();
enemy3 = new EnemyShip(); EnemyShip.increment();
}
}
你应该做得更好。你一直说这不管用。什么不可以?您的期望和实际结果是什么?粘贴您的main()
方法。是否打印到标准输出?像windows控制台一样?你是如何运行你的应用程序的?产出来自哪里?这是非常不清楚的。好吧,暂时忘记blueJ,它显然没有打印我们期望它打印的内容,也不是因为代码错误。尝试从IDE中的main()
方法或从命令行运行代码。main()方法如何执行?我使用的是增量方法increment@user2736476是的,但是每次计数器都会增加3。这不一定符合我在您的问题中找到的任何逻辑。@user2736476每次调用increment
,变量值将跳跃3。你说你想让它跳到1。这样做的正确方法是在控制器中,这样,如果您忘记调用increment()
@user2736476您看到的敌人#1
,您就不会受到影响,这是因为您在构造函数开始时使用了System.out.println()
。摆脱它。请参阅我的编辑。@user2736476我不知道您是如何运行此代码的。您创建的每一个新的EnemyShip都将有一个+1#
。您说过每次创建一个新的EnemyShip时都要增加计数,这就是上面的代码所做的。当第一个敌人被创建时,它应该打印敌人#1为什么是敌人#2???请编辑您的问题,以清楚地解释您的问题、预期的输入和输出。请记住,每次创建新的Ennemyship时,都必须显式调用increment。更改游戏类别:公共类游戏{private PlayerShip player;private EnemyShip enemy1;private enemy2;private EnemyShip enemy3;公共类游戏(){player=新玩家();enemy1=新敌人();enemy1.increment();enemy2=新敌人();enemy2.increment();enemy3=new-EnemyShip();enemy3.increment();}}}你能解释清楚你的意思吗,因为我听不懂你上面的评论。。。您是否添加了enemy2.increment();enemy2=新敌人()之后?不,根据问题,在创建第一个敌人之后,你应该得到敌人1,为什么在创建第一个敌人之后,你应该期待敌人2。在创建第二个敌人身份后,你应该期待敌人2,这正是代码所做的。那么,为什么会产生混淆呢???
public class Game {
private PlayerShip player;
private EnemyShip enemy1;
private EnemyShip enemy2;
private EnemyShip enemy3;
public Game() {
player = new PlayerShip();
enemy1 = new EnemyShip(); EnemyShip.increment();
enemy2 = new EnemyShip(); EnemyShip.increment();
enemy3 = new EnemyShip(); EnemyShip.increment();
}
}