Как использовать ООП, конструкторы и объекты для передачи переменных в методы и метод main - PullRequest
0 голосов
/ 31 января 2019

У меня есть программа, в которой я рассчитываю и распечатываю информацию о пробеге бензина.Назначение, над которым я работаю, хочет, чтобы я (ну, я думаю, он хочет) использовать ООП, конструктор и объект для передачи переменных из конструктора во всю мою программу.Это не имеет никакого смысла для меня.

Вот точные инструкции присваивания: https://drive.google.com/file/d/1D1FZKHrU4duu1UyWusPvsjVum33B8kdt/view?usp=sharing

Я попытался сделать мои исходные переменные в методе main приватными статическими переменными и поместил их правильнониже заголовка моего класса.Это сработало, но я думаю, что инструкции хотят, чтобы мой конструктор как-то включал переменные.Это просто не имеет никакого смысла для меня вообще.Я не получаю конструкторы или объекты вообще и как использовать их в этом приложении, и это чертовски расстраивает меня.

CarV3, программа, на которую ссылаются инструкции с точки зрения того, что я должен ориентировать на объект, выглядела так:

public class CarV3 {
    public static int calcDistance(int sMiles1, int eMiles1){
        return eMiles1 - sMiles1;
    }

    public static double calcMPG(int dist1, double gals1){
        return dist1 / gals1;
    }

    public static void main(String[]Args) {
        int sMiles1 = 43305;
        int eMiles1 = 43422;
        int dist1;
        double gals1 = 7.8;
        double MPG1;
        String carType1 = "14 Acura MDX";

        CarV3 car1 = new CarV3();

        dist1 = car1.calcDistance(sMiles1, eMiles1);
        MPG1 = car1.calcMPG(dist1, gals1);

        System.out.printf("%52s%n%s%16s%14s%13s%12s%14s%n%s%n", "Gas Mileage Calculations", "Type of Car", "Start Miles", "End Miles", "Distance", "Gallons", "Miles/Gal",
"================================================================================");
        System.out.printf("%s%15d%14d%13d%12.1f%14.1f", carType1, sMiles1, 
        eMiles1, dist1, gals1, MPG1);
    }
}

Этот код работал раньше.Инструкции просят вычислить GPM и другие данные позже, поэтому моя программа превращается в нечто большее, как это в CarV5:

public class CarV5 {
    private static int sMiles1 = 43266;
    private static int eMiles1 = 43422;
    private static int dist1;
    private static double gals1 = 7.8;
    private static double MPG1;
    private static double pricePerGallon1 = 2.98;
    private static double GPM1;
    private static double totalCost1;
    private static String carType1 = "14 Acura MDX";

    CarV5() {
    }

    public int calcDistance(int sMiles1, int eMiles1){
        return eMiles1 - sMiles1;
    }

    public static double calcMPG(int dist1, double gals1){
        return dist1 / gals1;
    }

    public static double calcGPM(int dist1, double gals1) {
        return gals1 / dist1;
    }

    public static double totalCost(double pricePerGallon1, double gals) {
        return pricePerGallon1 * gals;
    }

    public static void main(String[]Args) {
        CarV5 car1 = new CarV5();

        dist1 = car1.calcDistance(sMiles1, eMiles1);
        MPG1 = car1.calcMPG(dist1, gals1);
        GPM1 = car1.calcGPM(dist1, gals1);
        totalCost1 = car1.totalCost(pricePerGallon1, gals1);

        System.out.printf("%70s%n%s%16s%14s%13s%12s%10s%9s%14s%13s%n%s%n", "Gas Mileage Calculations", "Type of Car", "Start Miles", "End Miles", "Distance", "Gallons", "Price", "Cost", "Miles/Gal", "Gal/Mile", "================================================================================================================");
        System.out.printf("%s%15d%14d%13d%12.1f%10.2f%9.2f%14.1f%13.3f", carType1, sMiles1, eMiles1, dist1, gals1, pricePerGallon1, totalCost1, MPG1, GPM1);
    }
}

Хотя этот код работает, я почти уверен, что это не то, что спрашивали инструкциимне делать.Я, честно говоря, не понимаю, чего от меня требуют инструкции.Программа, которую вы видите там, печатает ожидаемый результат, который является всеми данными автомобиля.Однако в инструкциях мне сказано использовать какой-то конструктор со значениями в нем.Если вы заметите, что во второй версии у меня есть этот «CarV5 () {}», который я не понимаю, что он делает.

Ожидаемый вывод правильный во второй версии программы, CarV5., как упоминалось ранее.В таблице выводятся рассчитанные значения расстояния, галлонов и т. Д.

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

Ответы [ 3 ]

0 голосов
/ 31 января 2019

Прежде всего, почему все статично?Во-вторых, поскольку ваша ссылка не работает, я не могу понять, что именно нужно сделать, поэтому я могу только предположить, основываясь на том, что вы говорите, что вы хотите создать объект с помощью конструктора, это то, что?

public class CarV5 {

private int sMiles1;
private int eMiles1;

public CarV5(int sMiles1Constructor,int eMiles1Constructor){
   this.sMiles1 = sMiles1Constructor;
   this.eMiles1 = eMiles1Constructor;
}

 your methods...

}

public static void main(String[]Args) {
    CarV5 car1 = new CarV5(43266,42422);

     //Call your methods here...
}

в основном вам просто нужно передать переменные в качестве аргументов в конструкторе.

Не сдавайтесь, человек, как только вы изучите эту основу, со временем станет легче, не надобеспокоиться.

0 голосов
/ 31 января 2019

Объекты являются типами данных, как и любые другие (например, int, double, String и т. Д.). Это означает, что вы можете создать несколько таких объектов с различными именами и атрибутами, связанными с ними.Переменные поля (чаще всего в виде
private int field_name; ) являются лишь частями значения этого объекта.Вы должны видеть это буквально: вы напрямую связываете атрибут «миля на галлон» с любой машиной, о которой читаете, так что это работает так же.Статические переменные - это простой способ заставить значение расширить эту небольшую область видимости класса, позволяя объектам, которые не являются частью переменных доступа к классу (конечно, только этого определенного класса), не желать быть привязанными к конкретному автомобилю.(например, переменная года, которая одинакова для всех объектов (не связанный, но правдоподобный пример)).Надеюсь, это прояснит ситуацию!

0 голосов
/ 31 января 2019

Хорошо, я не уверен, что это за назначение, поскольку оно недоступно, но я думаю, что они хотят, чтобы вы создали класс с полями, которые будут установлены в конструкторе во время создания объекта.Позвольте мне показать краткий пример:

package tst;

public class CarTest {

    public static void main(String[] args) {
        // creating new instance of the Car and at once setting all its fields in constructor
        // now as I see the assignment, this line corresponds to 
        // CarV5 car1 = new CarV5(carType1, endMiles1, startMiles1, gallonsUsed1, pricePerGallon1);
        Car car = new Car(43266, 43422, 7.8);

        //calculating and printing the result w/o providing values but using instance fields
        System.out.println(car.calcDistance());

    }




    // the Car class itself, you can put it in different file
    public static class Car {

        // note that fields are NOT static, i.e. they belong to an INSTANCE of the class, not the class itself
        private int sMiles1;
        private int eMiles1;
        private double gals1;

        //
        public Car(int sMiles1, int eMiles1, double gals1) {
            this.sMiles1 = sMiles1;
            this.eMiles1 = eMiles1;
            this.gals1 = gals1;
        }

        // example of your methods
        public int calcDistance(){
            return this.eMiles1 - this.sMiles1;
        }

        // other methods you need

    }

}

Дайте мне знать, если это поможет :) PS: я думаю, что вас смущает статический против экземпляр методы, попробуйтеобновить эту часть курса или использовать другой источник (= google :))

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