尝试制作一个2d数组程序来存储Car对象列表

时间:2015-07-10 09:31:59

标签: java arrays

在一个小项目中苦苦挣扎我已经开始学习Java了。我的目标是创建一个程序来存储Car对象列表。然后允许用户搜索特定的汽车并输出所有汽车(如果存在)。汽车对象应包含型号名称,注册号,vin和颜色。以下是我到目前为止的情况:

package carObjects;

public class cars {

    public static int length;
    private String modelName;
    private String carColour;
    private int regNumber;
    private int vin;

    public cars(String string, String string2, int i) {

    }

    public String toString() {
        return "Model Name: " + modelName + "Registration Number: " + regNumber
                + "Vin" + vin + "Car Colour:  " + carColour;
    }

    public String getLast() {
        return modelName;
    }
}

        for (int i = 0; i < cars.length; i++) {
            cars[i] = new cars("A", "B", 10);
        }

        for (cars p : cars) {
            System.out.println(p.getLast());

        }
    }
}

2 个答案:

答案 0 :(得分:0)

最好的方法是将你的练习分成两个不同的类别:

class Car {

    private String modelName;
    private String carColour;
    private int regNumber;
    private int vin;

    public int getVin() {
        return vin;
    }

    public void setVin(int vin) {
        this.vin = vin;
    }

    // other getter/setter

    @Override
    public String toString() {
        return "Car: " + getVin();
    }

    @Override
    public int hashCode() {
        return vin;
    }

    @Override
    public boolean equals(Object obj) {
        return (obj != null) 
            && (obj instanceof Car) 
            && ((Car) obj).getVin() == this.getVin();
    }
}

CarSet类有搜索方法:

class CarList extends HashSet<Car> {

    public Car serarchByVin(int vin) {
        List<Car> list = new ArrayList<>(this);
        for (Car c : list) {
            if (c.getVin() == vin) {
                return c;
            }
        }
        return null;
    }

    public CarSet searchByModel(String model) {
        CarSet result = new CarSet();
        List<Car> list = new ArrayList<>(this);
        for (Car c : list) {
            if (c.getModelName()== model) {
                result.add(c);
            }
        }
        return result;
    }

    @Override
    public String toString() {
        String result = "carList: ";
        for (Car c : this) {
            result += c;
        }
        return result;
    }
}

答案 1 :(得分:0)

以下是您需要做的一些事情:

  1. 由于您希望允许搜索,因此您需要将访问者公开给您希望用户搜索的属性。例如,如果要允许用户按模型搜索,则需要公开model属性。您似乎是通过getLast()方法执行此操作,但名称令人困惑。*

  2. 此代码存在问题:for (int i = 0; i < cars.length; i++) { cars[i] = new cars("A", "B", 10); } 是它正在创建一系列相同的对象。您可以使用i的值来提供一些虚拟的,更改的值。这将允许您测试您的搜索确实有效。

  3. 构造函数名称应以大写字母开头,就像类名一样。

  4. cars(String string, String string2, int i):请为您的变量提供有意义的名称。这将使您的代码更易于阅读。

  5. 您需要分配通过构造函数获得的变量。因此,目前您的字段不会被初始化为您提供的字段。

  6. 要创建2D数组,您需要使用以下语法:Car[][] carArr = new Car[5][5]。这将创建一个类型为car的5x5数组。要迭代它,您将需要使用嵌套循环:

    for(int i = 0; i&lt; carrArr.length; i ++){      for(int j = 0; j&lt; carrArr [i] .lenght; j ++){          ...      } }

  7. *使用 getters setters 可以控制公开哪些对象属性以及用户如何与它们进行交互。