有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用OOP、构造函数和对象将变量传递给方法和main方法

我有一个程序,我在其中计算和打印汽油里程信息。我正在处理的任务希望我(我想它希望我)使用OOP、构造函数和对象将变量从构造函数传递到整个程序。这对我来说毫无意义

以下是具体的作业说明: 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) 个答案

  1. # 1 楼答案

    对象是与任何其他类型(例如int、double、String等)一样的数据类型这意味着您可以创建多个具有不同名称和属性的对象。字段变量 (最常见的形式是
    private int field_name; ) 只是这个物体价值的一部分。你必须从字面上理解它:你直接将每加仑英里数属性与你读到的任何汽车相关联,所以这是同样的工作方式。静态变量是一种简单的方法,通过让不属于类的对象访问您不希望特定于汽车的变量(例如,一个年份变量,对于所有对象来说都是相同的(不相关,但这是一个合理的示例)),使值扩展到类的较小范围。希望这能把事情弄清楚

  2. # 2 楼答案

    好的,我不确定赋值是什么,因为它是不可访问的,但我想他们希望你创建一个带有字段的类,这些字段将在对象创建期间在构造函数中设置。让我举一个简单的例子:

    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:)

  3. # 3 楼答案

    首先,为什么一切都是静态的? 第二,由于你的链接不起作用,我真的看不出被要求做什么,所以我只能假设,根据你所说的,你想用构造函数创建一个对象,是吗

    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...
    }
    

    基本上,你只需要把变量作为参数传递到构造函数中

    不要放弃,伙计,一旦你学会了这些基本知识,随着时间的推移它会变得更容易,别担心