Java 命名私有实例变量

Java 命名私有实例变量,java,oop,Java,Oop,我有这两个Java文件,我的老师说它们工作得很好,但我需要减少代码中私有实例变量的数量。你打算怎么解决这个问题 public class CarV7 { private String myCarType1, myCarType2, myCarType3; private int mySmiles1, mySmiles2, mySmiles3; private int myEmiles1, myEmiles2, myEmiles3; private double

我有这两个Java文件,我的老师说它们工作得很好,但我需要减少代码中私有实例变量的数量。你打算怎么解决这个问题

public class CarV7 {

    private String myCarType1, myCarType2, myCarType3;
    private int mySmiles1, mySmiles2, mySmiles3;
    private int myEmiles1, myEmiles2, myEmiles3;
    private double myGals1, myGals2, myGals3;
    private double myPricePerGallon1, myPricePerGallon2, myPricePerGallon3;

    CarV7(String carType, int eMiles, int sMiles, double gals, double pricePerGallon) {
        myCarType1 = carType;
        myCarType2 = carType;
        myCarType3 = carType;
        mySmiles1 = sMiles;
        mySmiles2 = sMiles;
        mySmiles3 = sMiles;
        myEmiles1 = eMiles;
        myEmiles2 = eMiles;
        myEmiles3 = eMiles;
        myGals1 = gals;
        myGals2 = gals;
        myGals3 = gals;
        myPricePerGallon1 = pricePerGallon;
        myPricePerGallon2 = pricePerGallon;
        myPricePerGallon3 = pricePerGallon;
    }

    public int calcDistance(int myEmiles, int sMiles) {
        return myEmiles - sMiles;
    }

    public double calcMPG(int distance, double gals) {
        return distance / gals;
    }

    public double calcGPM(double myGals, int distance) {
        return myGals / distance;
    }

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

如果查看CarV7文件,就会发现有大量实例变量没有在类中使用。看起来您没有使用构造函数中设置的任何内容

将私有实例变量的声明更改为:

private String myCarType1;
private int mySmiles1;
private int myEmiles1;
private double myGals1;
private double myPricePerGallon1;
。。。因为没有使用其他变量

然后按如下方式更改构造函数:

CarV7 (String carType, int eMiles, int sMiles, double gals, double pricePerGallon)
{
  myCarType1 = carType;
  mySmiles1 = sMiles;
  myEmiles1 = eMiles;
  myGals1 = gals;
  myPricePerGallon1 = pricePerGallon; 
} 
不要更改main方法中局部变量的名称

Finally run the code... it should work.

为什么需要实例变量?似乎没有一个成员方法使用实例变量。因此,可以将这些方法定义为静态的,而您甚至不需要首先实例化该类。

我给了您的CarV7类一些实例变量。因为变量是在构造函数中设置的,所以方法不需要任何参数

package com.ggl.car;

public class CarV7 {

    private int eMiles;
    private int sMiles;

    private double gallons;
    private double pricePerGallon;

    private String carType;

    public CarV7(String carType, int sMiles, int eMiles, 
            double gallons, double pricePerGallon) {
        this.carType = carType;
        this.sMiles = sMiles;
        this.eMiles = eMiles;
        this.gallons = gallons;
        this.pricePerGallon = pricePerGallon;
    }

    public int calcDistance() {
        return eMiles - sMiles;
    }

    public double calcMPG() {
        return (double) calcDistance() / gallons;
    }

    public double calcGPM() {
        return gallons / calcDistance();
    }

    public double totalCost() {
        return gallons * pricePerGallon;
    }

    public int geteMiles() {
        return eMiles;
    }

    public int getsMiles() {
        return sMiles;
    }

    public double getGallons() {
        return gallons;
    }

    public double getPricePerGallon() {
        return pricePerGallon;
    }

    public String getCarType() {
        return carType;
    }

}
我在你的测试课上没什么变化。我在main方法开始时去掉了变量类型,并在使用每个变量时设置变量类型

package com.ggl.car;

public class CarV7Tester {

    public static void main(String[] args) {

        String carType1 = "06 Saturn View";
        String carType2 = "03 Toyota Camr";
        String carType3 = "10 Nissan Leaf";
        int sMiles1 = 5678;
        int sMiles2 = 5678;
        int sMiles3 = 5678;
        int eMiles1 = 6015;
        int eMiles2 = 6015;
        int eMiles3 = 6015;
        double gals1 = 15.8;
        double gals2 = 17.6;
        double gals3 = 14.9;
        double pricePerGallon1 = 2.67;
        double pricePerGallon2 = 2.8;
        double pricePerGallon3 = 2.58;

        CarV7 car1 = new CarV7(carType1, sMiles1, eMiles1, gals1, pricePerGallon1);
        CarV7 car2 = new CarV7(carType2, sMiles2, eMiles2, gals2, pricePerGallon2);
        CarV7 car3 = new CarV7(carType3, sMiles3, eMiles3, gals3, pricePerGallon3);

        int distance1 = car1.calcDistance();
        int distance2 = car2.calcDistance();
        int distance3 = car3.calcDistance();

        double cost1 = car1.totalCost();
        double cost2 = car2.totalCost();
        double cost3 = car3.totalCost();

        double mpg1 = car1.calcMPG();
        double mpg2 = car2.calcMPG();
        double mpg3 = car3.calcMPG();

        double gpm1 = car1.calcGPM();
        double gpm2 = car2.calcGPM();
        double gpm3 = car3.calcGPM();

        System.out.printf("%40s", "Gas Mileage Calculations");
        System.out.println();
        System.out.printf("%-13s %12s %10s %10s %10s %8s %6s %10s %10s", "Type of Car", "Start Miles", "End     Miles", "Distance", "Gallons", "Price", "Cost", "Miles/Gal", "Gal/Mile");
        System.out.println();
        System.out.println("=================================================================================================");
        System.out.printf("%-14s %9d %10d %10d %9.1f %8.2f %8.2f %10.3f %9.3f\n", car1.getCarType(), sMiles1, eMiles1, distance1, gals1, pricePerGallon1, cost1, mpg1, gpm1);
        System.out.printf("%-14s %9d %10d %10d %9.1f %8.2f %8.2f %10.3f %9.3f\n", car2.getCarType(), sMiles2, eMiles2, distance2, gals2, pricePerGallon2, cost2, mpg2, gpm2);
        System.out.printf("%-14s %9d %10d %10d %9.1f %8.2f %8.2f %10.3f %9.3f\n", car3.getCarType(), sMiles3, eMiles3, distance3, gals3, pricePerGallon3, cost3, mpg3, gpm3);
    }
}

你为什么一开始就想要这个?你知道为什么这些变量是私有的吗?为什么每辆车都有三个变量?看起来你误解了面向对象的机制。很明显,我只需要一个,每个都只需要一个,但我如何将它们分配给其余的变量?当你创建一个
新的CarV7
时,它会创建一个
CarV7
对象的独特实例,每个实例都有自己的私有变量副本。因此,对象中每个变量类型只需要一个。此外,如果仔细观察,当您在构造函数中设置
myCarType1
的值时,您就再也不会实际使用它了。
CarV7 car1=new CarV7(carType1、eMiles1、sMiles1、gals1、pricePerGallon1)此对象的myCarType等于06 Saturn View<代码>CarV7 car2=新的CarV7(carType2、eMiles2、sMiles2、gals2、pricePerGallon2)这张卡的myCarType为03 Toyota CamrIf如果我的答案是wothy,请点击我答案旁边的勾号接受。谢谢。我也需要使用其余的变量。如何使用其余的变量我必须计算3个类的距离对象是一个类的运行时实例例如:你有一点,但编程实践的使用方式没有在代码中有效地使用实例变量,问题的答案应该是代码如何包含实例变量,如何使用它们,以及如何回答问题。
package com.ggl.car;

public class CarV7Tester {

    public static void main(String[] args) {

        String carType1 = "06 Saturn View";
        String carType2 = "03 Toyota Camr";
        String carType3 = "10 Nissan Leaf";
        int sMiles1 = 5678;
        int sMiles2 = 5678;
        int sMiles3 = 5678;
        int eMiles1 = 6015;
        int eMiles2 = 6015;
        int eMiles3 = 6015;
        double gals1 = 15.8;
        double gals2 = 17.6;
        double gals3 = 14.9;
        double pricePerGallon1 = 2.67;
        double pricePerGallon2 = 2.8;
        double pricePerGallon3 = 2.58;

        CarV7 car1 = new CarV7(carType1, sMiles1, eMiles1, gals1, pricePerGallon1);
        CarV7 car2 = new CarV7(carType2, sMiles2, eMiles2, gals2, pricePerGallon2);
        CarV7 car3 = new CarV7(carType3, sMiles3, eMiles3, gals3, pricePerGallon3);

        int distance1 = car1.calcDistance();
        int distance2 = car2.calcDistance();
        int distance3 = car3.calcDistance();

        double cost1 = car1.totalCost();
        double cost2 = car2.totalCost();
        double cost3 = car3.totalCost();

        double mpg1 = car1.calcMPG();
        double mpg2 = car2.calcMPG();
        double mpg3 = car3.calcMPG();

        double gpm1 = car1.calcGPM();
        double gpm2 = car2.calcGPM();
        double gpm3 = car3.calcGPM();

        System.out.printf("%40s", "Gas Mileage Calculations");
        System.out.println();
        System.out.printf("%-13s %12s %10s %10s %10s %8s %6s %10s %10s", "Type of Car", "Start Miles", "End     Miles", "Distance", "Gallons", "Price", "Cost", "Miles/Gal", "Gal/Mile");
        System.out.println();
        System.out.println("=================================================================================================");
        System.out.printf("%-14s %9d %10d %10d %9.1f %8.2f %8.2f %10.3f %9.3f\n", car1.getCarType(), sMiles1, eMiles1, distance1, gals1, pricePerGallon1, cost1, mpg1, gpm1);
        System.out.printf("%-14s %9d %10d %10d %9.1f %8.2f %8.2f %10.3f %9.3f\n", car2.getCarType(), sMiles2, eMiles2, distance2, gals2, pricePerGallon2, cost2, mpg2, gpm2);
        System.out.printf("%-14s %9d %10d %10d %9.1f %8.2f %8.2f %10.3f %9.3f\n", car3.getCarType(), sMiles3, eMiles3, distance3, gals3, pricePerGallon3, cost3, mpg3, gpm3);
    }
}