gpt4 book ai didi

java - 将对象添加到数组列表中可能存在逻辑问题

转载 作者:行者123 更新时间:2023-12-01 10:11:09 24 4
gpt4 key购买 nike

我的程序有 6 个类,因此我将尝试仅发布与我遇到的问题相关的方法。我正在尝试添加捐赠对象,这些对象通过从文件中读取信息来获取其属性。我的程序没有打印出任何与donationList相关的信息,所以我做了一个System.out.println(donationList.size());它告诉我列表中有 0 个对象。我已经研究这个问题有一段时间了,但无法弄清楚在这个过程中,捐赠对象未能正确创建或正确添加到数组列表中的位置。

这是我调用启动进程的方法的地方。

public static void main(String[] args) {
readAndProcess();

这是启动该过程的方法。

public static void readAndProcess() {
final String INPUT_FILENAME = "input/assn2input.txt";
File dataFile = new File(INPUT_FILENAME);
Scanner fileScanner = null;

try {
fileScanner = new Scanner(dataFile);
}catch (FileNotFoundException e) {
System.out.println("File not found exception for file " + e);
System.exit(0);
}

String oneLine;
String [] lineValues;

while(fileScanner.hasNextLine()) {
oneLine = fileScanner.nextLine();
lineValues = oneLine.split(",");

if(lineValues[0].equals("DONOR")) {
if (lineValues[1].equals("ADD") ) {

addDonor(lineValues);
}
else if (lineValues[1].equals("DEL")) {

// call method to delete
}
}

else if ( lineValues[0].equals("Donation")) {
if (lineValues[1].equals("ADD")) {

addDonation(lineValues);
}
else if (lineValues[1].equals("DEL")) {

// call method to delete
}
}
}
}

这是在 readAndProcess 方法之后发生的 addDonation 方法。

public static void addDonation(String [] lineValues) {
Donation donation = new Donation();
setDonationAttributes(donation, lineValues);
if (donorImpl.isIDUnique(donation.getDonorID()) == false &&
donationImpl.isIDUnique(donation.getDonationID()) == true) {
donationImpl.add(donation);
}
else {
System.out.println("ERROR: The Donation either had a non-unique"
+ " donation ID or a unique Donor ID. Was not "
+ "added to list." + donation.toString());
}

}

这是设置捐赠对象属性的方法。

public static Donation setDonationAttributes (Donation donation, 
String [] lineValues) {
donation.setDonationID(Integer.parseInt(lineValues[2]));
donation.setDonorID(Integer.parseInt(lineValues[3]));
donation.setDonationDescription(lineValues[4]);
if (donation.checkDescriptionLength() == false) {
System.out.println("ERROR: Donation description is longer "
+ "than 25 characters");
}
donation.setDonationAmount(Double.parseDouble(lineValues[5]));
donation.setDonationDate(lineValues[6]);
if (lineValues[7].equalsIgnoreCase("Y") ) {
donation.setTaxDeductible(true);
}
else {
donation.setTaxDeductible(false);
}
donation.setCheckNumber(Integer.parseInt(lineValues[8]));
if (donation.checkNumberCheck()== false) {
System.out.println("ERROR: Invalid check number is not between 100 "
+ "and 5000: " + lineValues[8]);
}
return donation;
}

这是检查donationID 的唯一ID 的方法。

public boolean isIDUnique(int donationID) {
int index;

for (index = 0; index < donationList.size(); ++index) {
if (donationID == donationList.get(index).getDonationID() ) {
return false;
}

}
return true;
}

这是检查唯一捐赠者ID的方法。

public boolean isIDUnique(int donorID) {
int index;
for (index = 0; index < donorList.size(); ++index) {
if (donorID == donorList.get(index).getDonorID() ) {
return false;
}
}
return true;

}

这是 DonationImpl 类中的方法,用于将对象添加到数组列表中。此方法的说明告诉我出于某种原因将其设置为 boolean 值,我不确定为什么。

public boolean add (Donation donation) {
if (donationList.add(donation)) {
return true;
}
return false;

}

donationImpl 类显示 arrayList 创建的样子。

public class DonationImpl {

// Data Field
private ArrayList<Donation> donationList = new ArrayList<Donation>();

//Getter
public ArrayList<Donation> getDonationList() {return donationList;}

以下示例中的1和3指的是donorID。我的捐赠者 ID 方法和创建都工作正常。

文本行示例:

捐赠,ADD,101,1,工资扣除,22.22,07/04/1776,Y,1001捐赠,ADD,303,3,周年纪念捐款,111.00,07/04/1777,N,2244

最佳答案

你有一个错别字

else if ( lineValues[0].equals("Donation")) {

应该是

else if ( lineValues[0].equals("DONATION")) {

关于java - 将对象添加到数组列表中可能存在逻辑问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36104686/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com