将对象添加到arraylist可能存在逻辑问题

时间:2016-03-19 17:14:04

标签: java

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

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

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类中将对象添加到arraylist的方法。这种方法的说明告诉我出于某种原因将其设置为布尔值,我不确定为什么。

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指的是供体ID。我的donorID方法和创建都正常工作。

示例行文字:

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

1 个答案:

答案 0 :(得分:1)

你有一个错字

[https://jsfiddle.net/boxxevolution/wb64oL66/2/][1]

应该是

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