首页 > 解决方案 > 我无法弄清楚为什么我的输出无法从界面正确显示

问题描述

所以我目前正在学习 java 中的接口,在这个程序中我创建了 3 个单独的类 Building.class、Bicycle.class 和 Car.class,它们是不相关的,但它们都使用 CarbonFootPrint 接口。在我的 processCarbonFootPrintData 类中,我创建了一个 arrayList 来保存来自我的对象的数据,然后我循环遍历数组列表,我得到了这个奇怪的输出,它没有显示我的输入数据的结果。

package CarbonFootPrintPackage;

import java.util.Scanner;

/**
 *
 * @author cjt1496
 */
public class Building implements CarbonFootPrintInterface {

    private int numberOfFloors;
    private int numberOfJanitors;
    private boolean isBuildingOpenOrClosed;

    double naturalGasConsumed;
    
    
    Scanner input = new Scanner(System.in);

    public double getNaturalGasConsumed() {
        return naturalGasConsumed;
    }

    public void setNaturalGasConsumed(double naturalGasConsumed) {
        this.naturalGasConsumed = naturalGasConsumed;
    }

    

    public int getNumberOfFloors() {
        return numberOfFloors;
    }

    public void setNumberOfFloors(int numberOfFloors) {
        this.numberOfFloors = numberOfFloors;
    }

    public int getNumberOfJanitors() {
        return numberOfJanitors;
    }

    public void setNumberOfJanitors(int numberOfJanitors) {
        this.numberOfJanitors = numberOfJanitors;
    }

    public boolean isIsBuildingOpenOrClosed() {
        return isBuildingOpenOrClosed;
    }

    public void setIsBuildingOpenOrClosed(boolean isBuildingOpenOrClosed) {
        this.isBuildingOpenOrClosed = isBuildingOpenOrClosed;
    }
    
    
    public Building(){
        
    }

    public Building(int numberOfFloors, int numberOfJanitors, boolean isBuildingOpenOrClosed, double naturalGasConsumed) {
        this.numberOfFloors = numberOfFloors;
        this.numberOfJanitors = numberOfJanitors;
        this.isBuildingOpenOrClosed = isBuildingOpenOrClosed;
        this.naturalGasConsumed = naturalGasConsumed;
    }
   

    public void calculateCarbonFootPrint(){
        System.out.println("Now Calculating Carbon foot print for a Building ");
        System.out.println("--------------------------------------------------------");
        System.out.println("How many therms of natural gas has your building consumed?");
        naturalGasConsumed = input.nextDouble();

    }


    @Override
    public void  getCarbonFootPrint() {
       
       System.out.println("The carbon foot print emitted from this building is " + 
               (getNaturalGasConsumed() * 11.7) + "pounds of CO2 from natural gas use.\n");
    }
    
}

CAR.CLASS 的开始

public class Car implements CarbonFootPrintInterface {
   private int numberOfSeats;
   private int steeringWheel;
    
    double emissionConversionFactor;
    double distanceTraveled;
    int numberOfTimesTraveled;
    
    Scanner input = new Scanner(System.in);

    public int getNumberOfSeats() {
        return numberOfSeats;
    }

    public void setNumberOfSeats(int numberOfSeats) {
        this.numberOfSeats = numberOfSeats;
    }

    public int getSteeringWheel() {
        return steeringWheel;
    }

    public void setSteeringWheel(int steeringWheel) {
        this.steeringWheel = steeringWheel;
    }
    

    public double getEmissionConversionFactor() {
        return emissionConversionFactor;
    }

    public void setEmissionConversionFactor(double emissionConversionFactor) {
        this.emissionConversionFactor = emissionConversionFactor;
    }

    public double getDistanceTraveled() {
        return distanceTraveled;
    }

    public void setDistanceTraveled(double distanceTraveled) {
        this.distanceTraveled = distanceTraveled;
    }

    public int getNumberOfTimesTraveled() {
        return numberOfTimesTraveled;
    }

    public void setNumberOfTimesTraveled(int numberOfTimesTraveled) {
        this.numberOfTimesTraveled = numberOfTimesTraveled;
    }

    
    public Car(){
        
    }

    public Car(int numberOfSeats, int steeringWheel, double emissionConversionFactor, double distanceTraveled, int numberOfTimesTraveled) {
        this.numberOfSeats = numberOfSeats;
        this.steeringWheel = steeringWheel;
        this.emissionConversionFactor = emissionConversionFactor;
        this.distanceTraveled = distanceTraveled;
        this.numberOfTimesTraveled = numberOfTimesTraveled;
    }
    
    
      public void calculateCarbonFootPrint(){
        System.out.println("Now Calculating Carbon foot print for a Car ");
        System.out.println("--------------------------------------------------------");
        System.out.println("Enter your emissionConversionFactor (Must be a decimal)");
        emissionConversionFactor = input.nextDouble();
        System.out.println("Enter your distance traveled in km (Must be a decimal)");
        distanceTraveled = input.nextDouble();
        System.out.println("Enter the number of times you traveled to your destination");
        numberOfTimesTraveled = input.nextInt();
    }
   
    
    @Override
    public void getCarbonFootPrint() {
       System.out.println("The carbon foot print emitted from this bicycle is " + 
               getEmissionConversionFactor() * (getDistanceTraveled() * getNumberOfTimesTraveled()) +"Kg CO2e\n");
    }
    
}

自行车课开始

import java.util.Scanner;
public class Bicycle implements CarbonFootPrintInterface {
    private int handleBars;
    private boolean KickStand;
    
    double emissionConversionFactor;
    double distanceTraveled;
    int numberOfTimesTraveled;
    
    Scanner input = new Scanner(System.in);
    
    public int getHandleBars() {
        return handleBars;
    }

    public void setHandleBars(int handleBars) {
        this.handleBars = handleBars;
    }

    public boolean isKickStand() {
        return KickStand;
    }

    public void setKickStand(boolean KickStand) {
        this.KickStand = KickStand;
    }

    public double getEmissionConversionFactor() {
        return emissionConversionFactor;
    }

    public void setEmissionConversionFactor(double emissionConversionFactor) {
        this.emissionConversionFactor = emissionConversionFactor;
    }

    public double getDistanceTraveled() {
        return distanceTraveled;
    }

    public void setDistanceTraveled(double distanceTraveled) {
        this.distanceTraveled = distanceTraveled;
    }

    public int getNumberOfTimesTraveled() {
        return numberOfTimesTraveled;
    }

    public void setNumberOfTimesTraveled(int numberOfTimesTraveled) {
        this.numberOfTimesTraveled = numberOfTimesTraveled;
    }
    
    
    public Bicycle(){
        
    }

    public Bicycle(int handleBars, boolean KickStand, double emissionConversionFactor, double distanceTraveled, int numberOfTimesTraveled) {
        this.handleBars = handleBars;
        this.KickStand = KickStand;
        this.emissionConversionFactor = emissionConversionFactor;
        this.distanceTraveled = distanceTraveled;
        this.numberOfTimesTraveled = numberOfTimesTraveled;
    }
    
    
    
    
    public void calculateCarbonFootPrint(){
        System.out.println("Now Calculating Carbon foot print for Bicycle ");
        System.out.println("--------------------------------------------------------");
        System.out.println("Enter your emissionConversionFactor (Must be a decimal)");
        emissionConversionFactor = input.nextDouble();
        System.out.println("Enter your distance traveled in km (Must be a decimal)");
        distanceTraveled = input.nextDouble();
        System.out.println("Enter the number of times you traveled to your destination");
        numberOfTimesTraveled = input.nextInt();
    }

    
    
    

    @Override
    public void getCarbonFootPrint() {
       System.out.println("The carbon foot print emitted from this bicycle is " + 
               getEmissionConversionFactor() * (getDistanceTraveled() * getNumberOfTimesTraveled()) +"Kg CO2e\n");
    }

PROCESS_CARBON_FOOTPRINT_DATA 类的开始

公共类 ProcessCarbonFootPrintData {

public void createCarbonFootPrint(){
    
    Building newBuilding = new Building();
    Car newCar = new Car();
    Bicycle newBicycle = new Bicycle();
    
    newBuilding.calculateCarbonFootPrint();
    newCar.calculateCarbonFootPrint();
    newBicycle.calculateCarbonFootPrint();
    
    ArrayList footPrint = new ArrayList();
    footPrint.add(newBuilding);
    footPrint.add(newCar);
    footPrint.add(newBicycle);
    
    for (Object footPrint1 : footPrint) {
        System.out.println(footPrint1.toString());
    }
    
    
   }
    
}

这是我得到的输出:

CarbonFootPrintPackage.Building@42a57993

CarbonFootPrintPackage.Car@75b84c92

CarbonFootPrintPackage.Bicycle@6bc7c054

标签: java

解决方案


ArrayList footPrint = new ArrayList();
footPrint.add(newBuilding);
footPrint.add(newCar);
footPrint.add(newBicycle);

for (Object footPrint1 : footPrint) {
    System.out.println(footPrint1.toString());
}

您的 arraylist 包含对象,它不知道该类型的任何进一步内容。当你这样做时:

for ( Object footPrint1 : footPrint) {

}

您还将元素声明为 Object 类型。

您需要做两件事:

  1. 具体说明类型。如果您想使用不同的类型保持 List 原样,请将循环更改为:

     for ( Object footPrint1 : footPrint) {
       if ( footPrint1 instanceof Car ) 
         System.out.println((Car)footPrint1);
       else if ( footPrint1 instanceof Building ) 
         System.out.println((Building)footPrint1);
       else System.out.println((Bicycle)footPrint1);
     }
    

这样,它就会知道要打印什么类型的数据。

  1. 通过这样做,您仍然会遇到同样的问题,因为您没有覆盖您的 toString 方法。

将以下内容添加到您的 Car 类中:

@Override
public String toString() {
  return "I am a car!!";
}

您会看到对于 Car 实例,打印的是该行,而不是内存地址。

为所有类覆盖该方法,并按照您希望的方式更改它返回的值。


推荐阅读