Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 我的ArrayList正在被覆盖,我不清楚为什么?每次都有一个新的;加上;它会将以前的所有条目更改为此_Java_Arrays_Eclipse_Class - Fatal编程技术网

Java 我的ArrayList正在被覆盖,我不清楚为什么?每次都有一个新的;加上;它会将以前的所有条目更改为此

Java 我的ArrayList正在被覆盖,我不清楚为什么?每次都有一个新的;加上;它会将以前的所有条目更改为此,java,arrays,eclipse,class,Java,Arrays,Eclipse,Class,我正在为uni创建一个关于汽车注册的程序。我有一个用于汽车的对象类和一个数组列表来保存它们,但是当我制作的addCar被使用时,我尝试打印它,它将打印我输入的最后一个,以显示应该有多少辆汽车 我已经尝试将代码直接提升到主体中,它是相同的,我尝试了各种不同的小更改,比如我比较的方式等等 下面是我保存在Car类文件中的AddCar函数 public static ArrayList<Car> addCar(ArrayList<String> Makes, Integer Ca

我正在为uni创建一个关于汽车注册的程序。我有一个用于汽车的对象类和一个数组列表来保存它们,但是当我制作的addCar被使用时,我尝试打印它,它将打印我输入的最后一个,以显示应该有多少辆汽车

我已经尝试将代码直接提升到主体中,它是相同的,我尝试了各种不同的小更改,比如我比较的方式等等

下面是我保存在Car类文件中的AddCar函数

public static ArrayList<Car> addCar(ArrayList<String> Makes, Integer CarCounter, ArrayList<Car> Cars) {
    Integer Select;
    boolean Equal = false;

    for (int i = 0; i < Makes.size(); i++) {
        System.out.println(i + ": " + Makes.get(i));
    }

    Scanner choice = new Scanner(System.in);

    {
        System.out.println("Enter Numeric Choice: ");

        while (!choice.hasNextInt()) {
            System.out.println("Error Please Enter Numeric Choice Again: ");
            choice.next();
        }

        Select = choice.nextInt();
    }

    if (Select >= Makes.size()) { 
        System.out.println("No records exist (Number entered too large)");
    } else {
        for (int i = 0; i < Makes.size(); i++) {
            if (Equal = Makes.get(i).equals(Makes.get(Select))) {
                break;
            }
        }

        if (Equal == true) {
            Car newCar;
            Make = Makes.get(Select);
            Reg = Input.getString("What is the registration: ");
            Model = Input.getString("What is the Model: ");
            Colour = Input.getString("What is the Colour: ");
            newCar = new Car();
            newCar.setMake(Make);
            newCar.setReg(Reg);
            newCar.setModel(Model);
            newCar.setColour(Colour);
            Cars.add(CarCounter, newCar);
        } else {
            System.out.println("Make is unavailable Please Try Again");
        }       
    }

    return Cars;
}
例如,如果我将第一辆车设置为菲亚特、L4QWS、普托、银色,将第二辆车设置为法拉利、4RE33、法拉利、红色,那么它应该是:

Car 1:
Make: fiat
Registration: L4QWS
Model: Punto
Colour: Silver

Car 2:
Make: Ferrari
Registration: 4RE33
Model: LaFerrari
Colour: Red
然而,实际上是这样的:

Car 1:
Make: Ferrari
Registration: 4RE33
Model: LaFerrari
Colour: Red

Car 2:
Make: Ferrari
Registration: 4RE33
Model: LaFerrari
Colour: Red

可能是
CarCounter
从不递增,因此在调用
Cars.add(CarCounter,newCar)
时,您总是覆盖列表中的第一项(也是唯一一项)。您根本不需要
CarCounter
,因为它对于
Cars.size()
是多余的。要将项目添加到列表中,只需使用
Cars.add(newCar)
即可将其添加到列表的末尾。说到
Integer
参数:您不只是通过使用
Integer
而不是
int
来通过引用调用方法,出于性能原因,您应该更喜欢原语类型
int
。在少数情况下,您确实希望传递一个
Integer
对象。如果您真的想通过引用传递整数,可以将其封装到数组中,或者使用一些包装类,如
AtomicInteger

,问题是Car类的数据成员被定义为
static
。这意味着此类数据成员只有一个副本,在Car类的所有实例之间共享

因此,当您创建一辆新车并设置其值时,它们会显示在所有汽车中


一般来说,静态数据应该是例外而不是规则。创建单独的类实例的要点是,它们实际上应该是单独的。

您的问题可能在Car类中。也许Car的所有成员数据都是静态的?@另一个Dave是的,我不确定静态和非静态的区别,我已经尝试过改变它,但是它变成了多米诺骨牌效应,从所有东西中移除静态,直到我在主控中调用该方法,它不喜欢它的静态意味着所有对象之间共享实例;所以你所有的车看起来都一样。这真的是问题吗?也许我应该把我的猜测提高到一个答案。静态值在类的所有实例之间共享,因为它们是独立于实例的。所以去掉静态声明。啊,是的,这听起来确实是个问题,任何地方都应该有静态的。很多函数和类都是静态的。是的,没有汽车计数器,这是我测试过的,当它打印出一个循环的汽车时,它打印的数字应该是正确的,例如,如果我尝试输入1,它将打印三辆汽车,如果我尝试输入2,它们将与最近输入的一辆相同。这是一个想法,但是,我调用addCar方法的问题现在是一个错误原因它正在对非静态方法进行静态引用,我不清楚如何使该引用成为非静态的步骤1:除了必须是静态的
main
之外,没有任何静态内容。步骤2,假设包含
main
的类被称为
CarRegister
,立即执行
main
,并且只执行
CarRegister foo=new CarRegister()foo.someFunction()。步骤3,现在您正在CarRegister的实例中执行。其他一切都应该引用一个实例。例如,您收集的汽车将是CarRegister实例的成员。
Car 1:
Make: fiat
Registration: L4QWS
Model: Punto
Colour: Silver

Car 2:
Make: Ferrari
Registration: 4RE33
Model: LaFerrari
Colour: Red
Car 1:
Make: Ferrari
Registration: 4RE33
Model: LaFerrari
Colour: Red

Car 2:
Make: Ferrari
Registration: 4RE33
Model: LaFerrari
Colour: Red