【问题标题】:Instance Counter for a String - Java字符串的实例计数器 - Java
【发布时间】:2016-12-09 05:07:33
【问题描述】:

字符串

  • 汽车的名称。该名称是通过将单词“Car”连接到该对象的实例编号而形成的。例如,第一个实例是 Car1,第二个实例是 Car2,依此类推。

所以我创建了一个名为 car 的字符串,现在我需要让它在创建新实例时应用一个递增的数字。

public class CarDash {
public String Car ="Car"; 
public static int instanceNumber;
}

然后它需要计算创建了多少实例

  • 为所有类实例共享的一个类变量。 实例编号 整数 跟踪创建的实例数。

我应该在调用某个方法时添加一个计数器吗?还是在命名/创建新车时计算在内?

    instanceNumber++;

我不知道我是否有任何意义......

【问题讨论】:

  • 在你的构造器中调用instanceNumber++;
  • 构造函数是否需要return语句?
  • 构造函数是否需要 return 语句? 不,构造函数中不应该有足够的逻辑来要求任何 return 语句
  • 您的预期输出是什么?你想让你的变量名像 Car + 1 一样命名吗?
  • 我希望它输出 Car1、Car2、Car3 等

标签: java string instance


【解决方案1】:

您只需要创建一个构造函数并递增 instanceNumber(使用 ++instanceNumber pre-increment ),然后使用 instanceNumber 变量设置汽车值。

所以你的构造函数将类似于下面。

public CarDash(){
    Car="Car"+ (++instanceNumber);
}

全班如下

public class CarDash {
public String Car = "Car";
public static int instanceNumber;

public CarDash(){
    this.Car="Car"+ (++instanceNumber);
}

public static void main(String[] args) {
    CarDash car=new CarDash();
    CarDash car1=new CarDash();
    CarDash car2=new CarDash();

    System.out.println(car.Car+" "+car1.Car+" "+car2.Car);
}
}

输出如下。

Car1 Car2 Car3

【讨论】:

  • 请把 instanceNumber 设为私有!并且“Car”应该是一个常量:按照惯例,final 和大写
【解决方案2】:

尝试如下。

public class CarDash {
public String Car ="Car"; 
public static int instanceNumber;

CarDash() {
    instanceNumber++;
    Car = Car + instanceNumber;
}

public static int getInstanceCount() {
   return instanceNumber;
}

}

【讨论】:

    【解决方案3】:

    你可以做instanceNumber++;在你的构造函数中。 但是要特别小心,以防您将 instanceNumber 作为 stati,因为这将由所有实例共享。 因此,在您的情况下(假设您有 10 个实例),您将获得所有实例的名称为 Car10。 例如

    public class CarDash {
        public String Car ="Car";
        public static int instanceNumber;
    
    public CarDash() {
        instanceNumber++;
    }
    
    public String print(){
        return  Car+instanceNumber;
    }
    
    public static void main(String[] args) {
        CarDash carDash=new CarDash();
        CarDash carDash1=new CarDash();
        CarDash carDash2=new CarDash();
        System.out.println(carDash.print());
        System.out.println(carDash1.print());
        System.out.println(carDash2.print());
    }
    

    }

    输出 :: 车3 车3 汽车3

    更好的方法:

    public class CarDash2 {
    public String Car ="Car";
    public static int instanceNumber;
    public int carId;
    
    public CarDash2() {
        instanceNumber++;
        carId=instanceNumber;
    }
    
    public String print(){
        return Car+carId;
    }
    
    public static void main(String[] args) {
        CarDash2 carDash=new CarDash2();
        CarDash2 carDash1=new CarDash2();
        CarDash2 carDash2=new CarDash2();
        System.out.println(carDash.print());
        System.out.println(carDash1.print());
        System.out.println(carDash2.print());
    }
    

    }

    输出:: 车1 车2 汽车3

    【讨论】:

    • 更好的方法是为所有实例输出 Car3
    • 你在开玩笑@B.Kel 吗?它不能,因为它是原始 int。
    • 我已经运行它并得到 Car1 Car2 Car3。
    • 确保编译和运行正常。
    猜你喜欢
    • 2022-01-12
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    相关资源
    最近更新 更多