Реализация демонстрационной/тестовой программы

У меня есть проект для моего курса программирования Java.

Инструкции заключаются в том, что мы должны создать простой класс и класс тестера, и класс должен включать конструктор по умолчанию; Конструктор с тремя параметрами (марка, модель и цена); метод доступа, вызываемый getMake() для возврата make; метод доступа, называемый getModel(), для возврата модели; метод доступа, называемый getPrice(), для возврата цены; Метод мутатора setMake( String newMake) для установки make; Метод мутатора setModel( String newModel) для установки модели; и метод мутатора setPrice( double newPrice ), чтобы установить цену.

Я создал свой класс и программу-тестер, и мой класс отлично компилируется. Когда я пытаюсь запустить его, получаю сообщение об отсутствии основного метода. Теперь я последовал примеру моего профессора для программы тестирования и получил несколько ошибок. Если бы кто-нибудь мог дать мне указатель в правильном направлении, я был бы признателен.

У меня такой вопрос: как реализовать программу тестирования? Нужно ли мне создавать zip-файл? Я пробовал так делать, не особо помогло...

Ниже приведен мой код для класса:

public class Automobile
{ 
    private String make;    
    private String model;
    private double price;   

    public Automobile()
    {
        make = "Lexus2017";
        model = "RX";
    }

    public Automobile(String initMake, String initModel, double initPrice)
    {
        make = initMake;
        model = initModel;
        price = initPrice; 
    }

    public String getMake()
    {
        return make;
    }

    public String getModel()
    {
        return model;
    }

    public double getPrice()
    {
        return price;
    }   

    public void setMake(String newMake)
    {
        make = newMake;
    }

    public void setModel(String newModel)
    {
        model = newModel;
    }

Кроме того, ниже приведен мой класс тестера (тот, в котором много ошибок):

public class AutomobileTester
{
    public static void main(String[] args)
    {
        Automobile make = new Automobile("Lexus 2017");
        System.out.println("The car is " + make.getMake());

        Automobile model = new Automobile("RX");
        System.out.println("The car is " + Automobile.getModel());

        Automobile price = new Automobile("43020"); 
        System.out.println("The car is " + Automobile.getPrice());  

        // Use the mutator to change the make variable
        Automobile.setMake("Lexus 2017");
        System.out.println("The car is " + backDoor.getState());

        // Use the mutator to change the model variable
        Automobile.setModel("RX");
        System.out.println("The car is called " + backDoor.getName());

        Automobile.setPrice("43020");
        System.out.println("The car is " + price.getPrice());
    }
}

Я впервые работаю с конструкторами, и я новичок в Java, поэтому приношу извинения за очевидные ошибки. Заранее благодарим вас за уделенное время и помощь.


person J. Nav    schedule 24.10.2016    source источник
comment
Parameterized constructor with three parameters (make, model and price); не соответствует new Automobile("Lexus 2017");   -  person Scary Wombat    schedule 24.10.2016
comment
Не используйте имя класса для доступа к методам... Здесь много ошибок. Вы ожидаете, что мы исправим их все и выполним ваше задание за вас?   -  person OneCricketeer    schedule 24.10.2016
comment
@cricket_007 Нет. Это было бы смешно, и я бы ничему так не научился. Я просто хочу понять, как реализовать класс, потому что я трижды прочитал свою главу, прослушал конспекты лекций, и что-то у меня не получается. Я просто хотел вставить свой код только для контекста.   -  person J. Nav    schedule 24.10.2016
comment
Хорошо. Я ответил с непосредственными проблемами, которые я вижу. Автомобильный класс выглядит нормально   -  person OneCricketeer    schedule 24.10.2016
comment
@ScaryWombat Так могу ли я исправить это, избавившись от года выпуска автомобиля?   -  person J. Nav    schedule 24.10.2016


Ответы (3)


Одна из первых проблем заключается в том, что вы не используете нужное количество параметров для своих вызовов конструктора, в Java (и большинстве языков программирования) вы должны предоставить все необходимые параметры методу/функции/конструктору за один вызов. . Исправление для вашего кода будет заключаться в использовании:

Automobile car = new Automobile("Lexus 2017", "RX", 43020.0D);

Кроме того, когда вы распечатываете информацию об автомобилях, вы сначала используете вызов instance, затем вы используете вызов static, я не буду вдаваться в разницу между ними, но в основном вызов instance требует, чтобы вы создавали экземпляр объекта, а static нет. . Исправление этой проблемы будет заключаться в следующем:

System.out.println("The car is a " + car.getMake() + ", the brand is " + car.getModel() + ", the price is $" + car.getPrice());

Что касается изменения переменных, которые вы должны использовать:

car.setMake("My New Car Make");

вместо:

Automobile.setMake("My New Car Make");

Разницу между static и instance вы можете посмотреть здесь, здесь и здесь.

person van dench    schedule 24.10.2016
comment
Когда у вас есть «Автомобиль = новый автомобиль (Lexus 2017, RX, 43020.0D);», распознает ли буква D после 43020 цену как двойную переменную? Кроме того, в моем задании говорится использовать переменные экземпляра, а не статические. Этого не будет до следующей главы. - person J. Nav; 24.10.2016
comment
А имена классов? Это нормально? Автомобиль и Автомобильный Тестер? Знает ли программа по этим именам, что нужно реализовать класс? - person J. Nav; 24.10.2016
comment
Символ d или D означает, что это число имеет тип double. Дополнительные сведения об идентификаторах этих типов см. здесь. Что касается вашего использования статических и переменных экземпляра, я указывал, что вы используете статические вызовы там, где вы должны использовать вызовы экземпляра. Что касается имен, вы действительно можете использовать все, что хотите, если они набираются точно так же, он должен иметь возможность правильно создать экземпляр класса, IDE. - person van dench; 24.10.2016
comment
Спасибо, что нашли время, чтобы помочь. Я очень ценю это. - person J. Nav; 24.10.2016

Вы сделали это правильно. Вы получили доступ к методу, используя переменную экземпляра make класса Automobile.

(примечание: make — плохое имя для автомобильного экземпляра, лучше назовите его car1 или что-то в этом роде)

Automobile make = new Automobile("Lexus 2017");
System.out.println("The car is " + make.getMake());

Теперь везде, где вы используете Automobile.someMethod(), это неправильно, потому что вам нужно установить или получить данные для одного экземпляра класса, а не для всего класса.

Затем, наконец, вам нужно протестировать конструктор с тремя параметрами, которые у вас есть в этом классе.

person OneCricketeer    schedule 24.10.2016
comment
Спасибо. make — это переменная экземпляра, которую мой профессор хочет, чтобы мы использовали, но мне нужно создать два объекта-автомобиля, поэтому будут ли car1, car2 работать? Буду ли я использовать что-то вроде setMake(String newMake) ? И сделать это для каждой переменной экземпляра? - person J. Nav; 24.10.2016
comment
Я не говорю о String make, я говорю о Automatible make = new Automobile(...), потому что это Автомобиль, у которого есть марка, да, но не сама марка. - person OneCricketeer; 24.10.2016

У вас ошибка в вызове конструктора. Ваш конструктор принимает три параметра (марка, модель и цена), но когда вы вызываете метод, отправляете только один. Это ошибка. По умолчанию конструктор класса Java не принимает никаких параметров (в вашем случае это будет "new Automobile()"). Для реализации тестера у вас есть два варианта. Сначала создайте автомобиль с помощью конструктора без параметров, а затем задайте параметры:

Automobile auto = new Automobile();
auto.setMake("Lexus 2017");
auto.setModel("RX");
auto.setPrice(43020);

Автомобиль Марка автомобиля = новый автомобиль ();

Другой вариант — использовать собственный конструктор и передавать параметры:

Automobile auto2 = new Automobile("Lexus 2017", "RX", 43020);

Автомобиль.java:

public class Automobile {
private String make;
private String model;
private double price;

public Automobile() {
}

public Automobile(String make, String model, double price) {
    this.make = make;
    this.model = model;
    this.price = price;
}

public String getMake() {
    return make;
}

public void setMake(String make) {
    this.make = make;
}

public String getModel() {
    return model;
}

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

public double getPrice() {
    return price;
}

public void setPrice(double price) {
    this.price = price;
}
}

Автомобильный тестер.java:

public class AutomobileTester {

public static void main(String[] args) {

    Automobile auto = new Automobile();
    auto.setMake("Lexus 2017");
    auto.setModel("RX");
    auto.setPrice(43020);
    System.out.println("The car1 is " + auto.getMake() + " " + auto.getModel() + " " + auto.getPrice());

    Automobile auto2 = new Automobile("Lexus 2017", "RX", 43020);
    System.out.println("The car2 is " + auto2.getMake() + " " + auto2.getModel() + " " + auto2.getPrice());

}

}

person Juan    schedule 24.10.2016
comment
Разве автомобиль не будет производить автомобиль = new(); быть лишним? Кроме того, я знаю, что вы используете эти параметры, когда хотите, чтобы параметры в методе были равны переменным экземпляра. Когда бы вы не хотели их использовать? - person J. Nav; 24.10.2016
comment
Да, это ошибка. Это будет Automobile auto = new Automobile(); Если вы хотите использовать только несколько параметров, вы можете реализовать несколько конструкторов. Например, если вы хотите использовать только цену: public Automobile(double price) { this.price = price; } И вызов будет иметь следующий вид: Automobile auto = new Automobile(1000); Или, если вы хотите использовать цену и модель: public Automobile(String model, double price) { this.model = model; эта.цена = цена; } И вызов будет таким: Automobile auto = new Automobile(Rx, 1000); - person Juan; 24.10.2016