这是我第一次在这里发帖。我过去潜伏了很多,但似乎无法弄清楚这次我的问题是什么。这是作业,我试图自己解决。
public class Driver {
public static void main(String[] args) throws FileNotFoundException {
String name = "", date = "", time = "";
String month = "", day = "", year = "";
ArrayList<Customer> customerArray = new ArrayList<Customer>();
ArrayList<Date> dateArray = new ArrayList<Date>();
File myFile = new File("./src/Program4/Customers.csv");
Scanner fileScan = new Scanner(myFile);
while (fileScan.hasNext()) {
String lineString = fileScan.nextLine();
Scanner lineScan = new Scanner(lineString);
lineScan.useDelimiter(",");
while (lineScan.hasNext()) {
// if (lineScan.next().equalsIgnoreCase("Name") == true
// || lineScan.next().equalsIgnoreCase("Date") == true
// || lineScan.next().equalsIgnoreCase("Time") == true) {
// lineScan.next();
// }
// else {
name = lineScan.next();
date = lineScan.next();
time = lineScan.next();
Scanner dateScan = new Scanner(date);
dateScan.useDelimiter("/");
while (dateScan.hasNext()) {
month = dateScan.next();
day = dateScan.next();
year = dateScan.next();
}
Customer newCustomer = new Customer(name, date, time, day,
month);
customerArray.add(newCustomer);
//}
}
} } }
注释掉的部分只是我看到这是否是问题,因为我担心它不起作用的原因是因为标题没有任何&#34; /&#34; 。然而,事实并非如此。这是我正在阅读的文件的示例:
Name Date Time
SK]CD[TUI 12/3/2014 5:41 AM
KXFPPHXPK 12/9/2014 7:43 AM
RVZTA[KLT 7/17/2014 9:35 AM
AUTVFXVZW 12/27/2014 2:39 AM
CFH\XBJRE 2/3/2014 9:51 AM
RT@KNCPHO 4/19/2014 8:42 AM
我必须先按日期排序,然后按时间排序。我正在使用插入排序,但它只是读取日期的第一个数字,它忽略了两位数。所以,我的解决方案是让另一台扫描仪分解日期,然后按此排序。但是,我并没有太过分,因为我收到了以下错误。
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at Program4.Driver.main(Driver.java:55)
第55行:
day = dateScan.next();
所以,不知道问题是什么。 希望我的方法是对此进行排序的最佳方法,如果不是,如果有人可以节省一些时间并建议替代方案,那就好了。
谢谢!
====================
编辑:
好吧,我想出了最初的问题。我补充说:
if (lineScan.next().equalsIgnoreCase("Name") == true) {
lineScan.nextLine(); }
else {
name = lineScan.next();
date = lineScan.next();
time = lineScan.next();
这有点解决了这个问题,但我无法弄清楚为什么扫描仪会跳过文件的第一部分,即名称。&#34; &#34;名称&#34;成为日期,&#34;日期&#34;成为时间,&#34;时间&#34;没有什么可以抓住所以它不会抛出这样的元素。我正在做nextLine,所以它不应该吃\ n。
答案 0 :(得分:3)
家庭作业提示:
您需要使用IDE的调试器来解决此问题。在此行设置断点:
Scanner dateScan = new Scanner(date);
并查看date
是什么。如果这不能使问题显而易见,那么使用调试器一次执行一个语句,观察next
调用返回的内容。 (你可能需要绕过外环几次......)
P.S。我想我可以看出问题是什么......但如果你听从我的建议,你应该能够很快找到它。并学会使用调试器: - )