私のプログラムには6つのクラスがありますので、私が抱えている問題に関連するメソッドだけを試してみます。私は、ファイルから情報を読み取ることからその属性を得る寄付オブジェクトを追加しようとしています。私のプログラムはdonationListの関連情報を表示しないので、System.out.println(donationList.size())を実行しました。リストには0個のオブジェクトがあることがわかります。私はこれをしばらく見てきましたが、寄付オブジェクトが正しく作成されていないか、またはarraylistに正しく追加されていないかを把握できません。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;
}
donatingIDの一意の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;
}
これは、固有のdonorIDをチェックする方法です。
public boolean isIDUnique(int donorID) {
int index;
for (index = 0; index < donorList.size(); ++index) {
if (donorID == donorList.get(index).getDonorID()) {
return false;
}
}
return true;
}
これは、オブジェクトをarraylistに追加するDonationImplクラスのメソッドです。このメソッドの指示は、何らかの理由でブール値として設定するように私に指示しましたが、私はその理由を正確にはわかりません。
public boolean add (Donation donation) {
if (donationList.add(donation)) {
return true;
}
return false;
}
arrayListの作成方法を示すdonationImplクラスです。
public class DonationImpl {
// Data Field
private ArrayList<Donation> donationList = new ArrayList<Donation>();
//Getter
public ArrayList<Donation> getDonationList() {return donationList;}
以下の実施例における1,3は、ドナーIDを指す。私のdonorIDメソッドと作成はすべて正しく動作しています。テキストの
例ライン:
寄付、ADD、101,1、給与控除、22.22,07/04/1776、Y、1001 寄付、ADD、303,3、記念日の貢献、111.00,07/04/1777、N、2244
まあそのexplaする必要があります持っていますなぜ私はとても混乱しているのですか?それをキャッチしてくれてありがとう、私の頭を壁に叩いていた。 –