Как найти в массиве указанный объект c и вернуть его? - PullRequest
1 голос
/ 14 июля 2020

Я пытаюсь понять, как получить самую старую машину и вернуть свой объект Car.

 public CarLot() {

    cars = new Car[5];

    cars[0] = new Car(2016, "honda", "civic");
    cars[2] = new Car(2017, "Lamborghini", "aventador");
    cars[3] = new Car(2000, null, "caravan");
    cars[4] = new Car(2010, "dodge", null);

    }

Я сбит с толку, так как мой объект удержания не является объектом Car, очень запутался.

public Car getOldestCar() {

    int i = 0;
    int oldestCar = 3000;
    int hold = 0;

    while(i < cars.length) {
        if(cars[i].getYearManufactured() < oldestCar) {
            oldestCar = cars[i].getYearManufactured();
            hold = i;
        }
    }
    return hold;
    }

Ответы [ 3 ]

1 голос
/ 14 июля 2020

Ваш код почти правильный. В вашем методе

public Car getOldestCar() { ... }

ваш тип возврата - Car, но то, что вы на самом деле возвращает, - это hold, который имеет тип int. Как узнать, что i - это целое число? Легко, i - это индекс, который вы используете в своей итерации for, и на каждой итерации вы даете i значение, большее на единицу.

Если вы хотите вернуть Car вместо int, есть два варианта:

  • Объявить hold как тип Car. int hold = 0 должно быть Car hold = null. Затем, если вы хотите присвоить hold значение внутри итерации, вместо того, чтобы давать ему значение i, присвойте ему значение cars[i], поскольку это именно тот автомобиль, который вы ищете.
  • Второй вариант, требующий изменения меньшего количества кода. В последней строке, когда вы вернете hold, измените его на: return cars[hold]. Это будет работать, потому что в настоящее время удерживается индекс искомой машины, поэтому cars[hold] даст вам желаемую машину.
1 голос
/ 14 июля 2020

В вопросах отсутствуют некоторые вещи или вы можете сказать, что они реализованы неправильно. Найдите мою программу ниже, которая вернет объект автомобиля

public class OldestCar {
    public static void main(String[] args) {
        Car[] cars = new Car[5];

        cars[0] = new Car(2016, "honda", "civic");
        cars[1] = new Car(2006, "honda", "city");
        cars[2] = new Car(2017, "Lamborghini", "aventador");
        cars[3] = new Car(2000, null, "caravan");
        cars[4] = new Car(2010, "dodge", null);

        System.out.print(new OldestCar().getOldestCar(cars).getName());

    }
    public Car getOldestCar(Car[] cars) {
        int i = 0;
        int oldestCar = 3000;
        int hold = 0;
        while(i < cars.length) {
            if(cars[i].getYearManufactured() < oldestCar) {
                oldestCar = cars[i].getYearManufactured();
                hold = i;
            }
            i++;
        }
        return cars[hold];
    }
}

class Car{
    int YearManufactured;
    String name;
    String model;


    Car(int YearManufactured, String name, String model){
        this.YearManufactured = YearManufactured;
        this.name = name;
        this.model = model;
    }

    public int getYearManufactured() {
        return YearManufactured;
    }

    public void setYearManufactured(int yearManufactured) {
        YearManufactured = yearManufactured;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getModel() {
        return model;
    }

    public void setModel(String model) {
        this.model = model;
    }
}

. Я создал класс Car для решения этого вопроса. Вы также можете перепроверить со своим. Я печатаю название самой старой машины. В данном случае это null.

Некоторые недостающие точки, которые я заметил в вопросе:

  1. Массив автомобилей имеет размер 5, но отсутствуют автомобили [1], которые будут причина NullPointerException
  2. i не увеличивается, а l oop, следовательно, l oop будет работать непрерывно
  3. getOldestCar должен иметь массив автомобилей в качестве параметра для вычисления самого старого автомобиля

Надеюсь, это поможет

Удачного кодирования ~

0 голосов
/ 14 июля 2020
 public CarLot() {

    cars = new Car[5];

cars[0] = new Car(2016, "honda", "civic");
cars[2] = new Car(2017, "Lamborghini", "aventador");
cars[3] = new Car(2000, null, "caravan");
cars[4] = new Car(2010, "dodge", null);
}
public Car getOldestCar() {

int oldestCar = 3000;
Car returncar = new Car(); // -> you need to wirte a standard constructor: "public Car(){}"

for(Car x : cars) {
    if(x.getYearManufactured() < oldestCar) {
        oldestCar = cars.getYearManufactured();
        returncar = x;
    }
}

   return returncar;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...