ArrayList中类的实例的浅表副本

时间:2018-08-20 22:03:40

标签: java arraylist deep-copy shallow-copy

我有一个ArrayList,其中包含Boat类的n个实例。 Boat类具有许多更改该Boat的实例变量的方法。

例如:

public void Command(String command)
{
    int inefficientwayofdoingthis=0;
    if(command.equals("power on"))
    {
        inefficientwayofdoingthis++;
        int x=1;
        setpower(x);
        System.out.println(name+" is on and is travelling in the direction of "+angle+" deg. with speed: "+ speed+"mph");
    }
    //...

我遇到的问题是此Command方法应将[instancename].power的值设置为1。

实例包含在ArrayList中,数据:

我正在使用以下代码来更改arraylist中的实例:

int numberinArray = whatever;
String theorder = "power on";
data.get(numberinArray).Command(theorder);

但是,每次执行此命令时,该命令都会起作用并产生输出,但是随后的命令似乎无法识别data.get(numberinArray).power应该等于1。我认为我遇到了一个问题,因为这是一个类的每个实例的深层副本,而不是浅层副本。有人会对如何缓解此问题有任何建议吗?

1 个答案:

答案 0 :(得分:0)

如果您希望电源保持“附着”在船实例上,则应为实例变量。这可能是这样的:

private static int vector[]; 
public static int getMax(int [] nums){
    return Arrays.stream(nums).max().getAsInt();
}
public static int getMin(int [] nums){
    return Arrays.stream(nums).min().getAsInt();
}

public static String createVect(){
    Scanner input = new Scanner(System.in);
    System.out.print("Number of elements: ");
    int n = input.nextInt();
    vector = new int[n];
    for (int i = 0; i < n; i++) {        
        System.out.print("Valor " + (i+1) + ": ");
        vector[i] = input.nextInt();
    }               
    return Arrays.toString(vector); 
}

public static void main(String[] args) {   
    System.out.println(createVect());  
    System.out.println("The min value: " + getMin(vector)); 
    System.out.println("The max value: " + getMax(vector));
}

然后您可以在示例中添加其他方法,例如package com; public class Boat { private int power; private String color; Boat() { // may want to initialize some values this.setPower(0); this.setColor("red"); } public int getPower() { return power; } public void setPower(int power) { this.power = power; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } }