Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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_Oop_Static_Increment - Fatal编程技术网

Java 无法增加变量(面向对象编程)

Java 无法增加变量(面向对象编程),java,oop,static,increment,Java,Oop,Static,Increment,我被任务2困住了,每次创建敌人时,我都必须增加敌人的计数器。我已经创建了enemey飞船,并将计数器字段设置为静态(我想调用计数器号码) 最终的解决方案应该增加Eneyships的计数器,我需要声明一个静态字段,该字段应该从0开始,当创建第一个Eneyship时,应该将该字段增加到1,第二个增加到2,依此类推,然后在打印第一行输出时可以使用该字段的值。也就是说,对于第一个敌人,你应该打印“敌人1”,第二个敌人应该打印“敌人2”,依此类推 这就是我在我的“敌人”课程中尝试的: public cla

我被任务2困住了,每次创建敌人时,我都必须增加敌人的计数器。我已经创建了enemey飞船,并将计数器字段设置为静态(我想调用计数器号码)

最终的解决方案应该增加Eneyships的计数器,我需要声明一个静态字段,该字段应该从0开始,当创建第一个Eneyship时,应该将该字段增加到1,第二个增加到2,依此类推,然后在打印第一行输出时可以使用该字段的值。也就是说,对于第一个敌人,你应该打印“敌人1”,第二个敌人应该打印“敌人2”,依此类推

这就是我在我的“敌人”课程中尝试的:

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();
    } 
}