【发布时间】:2016-02-16 21:00:05
【问题描述】:
我正在编写一个与“Transactions.txt”文件交互的程序,该文件的格式如下。
TransactionNumber,ItemName,Quantity,Purchase/HireDate,ReturnDate
其中的内容:
T01,Jumper,5,10/03/2015,14/03/2015
T02,Tuxedo,1,21/04/2015,23/05/2015
T03,Jacket,2,02/07/2015,09/07/2015
T04,Hat,3,12/09/2015,19/09/2015
T05,Shoes,4,09/11/2015,20/11/2015
该程序的目标是获取开始日期并检查文件中的所有日期以查看开始日期是否在任何日期之前,如果是,它将添加项目名称,它是数量,它是购买/雇用日期及其返回日期到要打印的字符串。例如,如果我输入 10/03/2015 作为开始日期,则应打印所有内容,但只打印第 1、2 和 4 行,我不知道问题出在哪里。
我还尝试添加一段代码,该代码将进入结束日期,并检查文件中的任何日期是否在结束日期之后,如果是,则将打印输出,然后它应该完成执行 main (而不是 exit(0) 因为我让它与其他类交互。所以如果我输入 10/03/2015 作为开始日期和 15/03/2015 作为结束日期,只有第 1 行的内容将被打印出来。
我已经尝试解决这个问题几个小时了,但我找不到哪里出了问题,非常感谢任何帮助。
import java.io.*;
import java.util.*;
import java.text.*;
public static File transactionsFile = new File("Transactions.txt");
public class Transaction
{
public static void main() throws IOException
{
try
{
String details = "";
Date tempDate;
SimpleDateFormat SDF = new SimpleDateFormat("dd/mm/yyyy");
System.out.print("Enter in a start date (dd/mm/yyyy): ");
String sDate = userInput.nextLine();
Date startDate = SDF.parse(sDate);
System.out.print("Enter in an end date (dd/mm/yyyy): ");
String eDate = userInput.nextLine();
Date endDate = SDF.parse(eDate);
List<String[]> contents = new ArrayList<>();
Scanner searchTransactionsFile = new Scanner(transactionsFile);
System.out.println("\n---------Summary of Transactions---------");
while(searchTransactionsFile.hasNextLine())
{
String[] current = searchTransactionsFile.nextLine().split(",");
contents.add(current);
}
for(String[] elements: contents)
{
tempDate = SDF.parse(elements[3]);
if(tempDate.after(startDate) || tempDate.equals(startDate))
details += "\nItem Name:\t\t" + elements[1] + "\nQuantity:\t\t" + elements[2] + "\nHire/Purchase Date:\t" + elements[3] + "\nReturn Date:\t\t" + elements[4] + "\n";
}
System.out.print(details);
searchTransactionsFile.close();
}
catch(Exception e)
{
System.out.println("Invalid date entered. Please enter a valid date in the format dd/mm/yyyy");
}
}
}
【问题讨论】:
-
您遇到的错误是什么?
-
当我输入 2015 年 3 月 10 日作为开始日期,忽略结束日期并输入任意随机日期时,文件中的所有 5 行都应打印,但仅打印 3/5。
标签: java file date for-loop arraylist