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