JAVA对象数组程序输出错误(初学者)

JAVA对象数组程序输出错误(初学者),java,Java,我有一项任务,要计算从一开始一年内产生的二氧化碳量 一个家庭,并比较如何回收可以减少其二氧化碳足迹。 程序中有两个类,CO2FromWaste和CO2FromWasteTester 第一类二氧化碳废物是: public class CO2FromWaste { //declaration of private instance variables private int numPeople; private boolean Paper, Plastic, Glass, C

我有一项任务,要计算从一开始一年内产生的二氧化碳量 一个家庭,并比较如何回收可以减少其二氧化碳足迹。 程序中有两个类,CO2FromWaste和CO2FromWasteTester

第一类二氧化碳废物是:

public class CO2FromWaste
{
    //declaration of private instance variables
    private int numPeople;
    private boolean Paper, Plastic, Glass, Cans;
    private double grossWasteEmission, wasteReduction, netWasteReduction;

    //constructor 
    CO2FromWaste(int people, boolean paper, boolean plastic, boolean glass, boolean cans){
        numPeople = people;
        Paper = paper;
        Plastic = plastic;
        Glass = glass;
        Cans = cans;
        grossWasteEmission = 0.0;
        wasteReduction = 0.0;
        netWasteReduction = 0.0;
    }
    public void calcGrossWasteEmission(){
        grossWasteEmission = numPeople * 1018;

    }
    public double getGrossWasteEmission(){
        return grossWasteEmission;
    }
    public void calcWasteReduction(){
        if (Paper == true){
            wasteReduction = numPeople * 184;
        }
        if (Plastic == true){
            wasteReduction += (numPeople * 25.6);
        }
        if (Glass == true){
            wasteReduction+= (numPeople*46.6);
        }
        if (Cans == true){
            wasteReduction+=(numPeople*165.8);
        }

    }
    public double getWasteReduction()
    {
        return wasteReduction;
    }
    public void calcNetWasteReduction(){
        netWasteReduction = grossWasteEmission = wasteReduction;

    }
    public double getNetWasteReduction(){
        return netWasteReduction;
    }
    public int getNumPeople(){
        return numPeople;
    }
    public boolean getPaper(){
        return Paper;
    }
    public boolean getPlastic(){
        return Plastic;
    }
    public boolean getGlass(){
        return Glass;
    }
    public boolean getCans(){
        return Cans;
    }
}
第二类二氧化碳排放测试仪为:

import java.util.ArrayList;
public class CO2FromWasteTester
{
    public static void main(String[]args){
        ArrayList<CO2FromWaste> waste = new ArrayList<CO2FromWaste>();

        waste.add(new CO2FromWaste(1, true, true, true, true));
        waste.add(new CO2FromWaste(3, true, false, true, true));
        waste.add(new CO2FromWaste(4, false, false, false, false));
        waste.add(new CO2FromWaste(1, true, true, true, true));
        waste.add(new CO2FromWaste(1, true, true, true, true));

        CO2FromWaste wasteRecord;
        for (int index = 0; index < waste.size(); index++){
            wasteRecord = waste.get(index);
            wasteRecord.calcGrossWasteEmission();
            wasteRecord.calcWasteReduction();
            wasteRecord.calcNetWasteReduction();
        }
        System.out.println("                   Household Waste Recycled                    Total    Pounds of CO2    Net");
        System.out.println(" Index    People    Paper     Plastic     Glass     Cans     Emission     Reduction    Emission ");

        for (int index = 0; index < waste.size(); index ++)
        {
            wasteRecord = waste.get(index);
            System.out.printf("%3d %9d %10s %10s %10s %10s %12.2f %10.2f %10.2f%n",index,wasteRecord.getNumPeople(),wasteRecord.getPaper(), wasteRecord.getPlastic(), wasteRecord.getGlass(),wasteRecord.getCans(),wasteRecord.getGrossWasteEmission(),wasteRecord.getWasteReduction(),wasteRecord.getNetWasteReduction());
        }
    }
}
但是上面写着

0  1   true   true   true   true    422.00   422.00   422.00
总排放部分的开始有点错误,这部分应该相当简单,因为它所需要做的就是将给出的人口数乘以1018。 我不知道从这里该做什么,希望能得到一些帮助。

问题在于:

for (int index = 0; index < waste.size(); index++){
    wasteRecord = waste.get(index);
    wasteRecord.calcGrossWasteEmission();
    wasteRecord.calcWasteReduction();
    wasteRecord.calcNetWasteReduction(); // <== netWasteReduction = grossWasteEmission = wasteReduction;
}
for(int index=0;index
public void calcNetWasteReduction(){
    netWasteReduction = grossWasteEmission = wasteReduction;    
}
这相当于:

public void calcNetWasteReduction(){
    grossWasteEmission = wasteReduction;    
    netWasteReduction = grossWasteEmission;
}
换句话说,它正在修改
grossWasteEmission
,而不应该这样做。我怀疑您想要:

public void calcNetWasteReduction(){
    netWasteReduction = grossWasteEmission - wasteReduction;    
}
换句话说,将第二个
=
改为
-

老实说,我们不清楚为什么会有三个独立的方法——为什么不在构造函数中执行计算?或者在
getter
方法中执行计算(完全删除中间字段)


<>另外,考虑制作一个废物减少类型(纸张、玻璃、塑料),并使用它们的<代码>枚举>代码>。如果你把它们作为单独的参数保存,我强烈建议你把名字改成更传统的java(<代码>文件<代码>代替代码>文件<代码>等),并使用<代码>(纸)。
而不是
如果(paper==true)
等。通常,避免显式检查布尔常量。

您只需要替换下面的“=”符号。正是因为这一行,您得到的三个值都相等。:-)

公共无效计算机网络教育(){ 净排放量=总排放量=减少废物


希望这有帮助

您给出的代码不会编译-
calcGrossWasteEmission
中的CO2FromWaste有一个参数(
numPeople
)但是你调用它时没有任何参数。因此,这不是你正在运行的代码。向我们展示你正在运行的代码,我们就更有可能找到问题…抱歉,我忘记删除参数。它正在测试一些东西试图解决问题,但在这里发布时忘记删除它。好的,专业人士问题存在于
CalcNetwasterEducation
本身-而不是您显示的代码中。哇,我不知道我怎么会没有注意到。我将它改为负号,但现在所有的数字都为0.0。可能我的计算有问题(在执行if语句时)@alphamonkey:我运行了你的精确代码,将
=
更改为
-
,输出中唯一的0是索引2的“减少”部分。我怀疑你做了其他更改,以其他方式破坏了它。没关系……我不小心删除了CO2WasteTester的calc()部分。现在一切正常了!非常感谢你。
public void calcNetWasteReduction(){
    netWasteReduction = grossWasteEmission - wasteReduction;    
}