我有一个看起来像这样的文本文件
2017-06-14 7932
2017-06-15 10092
2017-06-16 7626
2017-06-17 7613
2017-06-18 11072
2017-06-19 8286
2017-06-20 9293
我正在尝试将值存储在ArrayList
。
我的代码:
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.io.*;
import java.util.Scanner;
public class Sample2 {
public static void main(String[] args) throws FileNotFoundException {
List<Date> l1 = new ArrayList<Date>();
List<Integer> l2 = new ArrayList<Integer>();
Scanner s = new Scanner(new FileReader("t1.txt"));
while (s.hasNext()) {
l1.add(s.nextInt()); !!!!-----Error Line-----!!!!!!!!
l2.add(s.nextInt());
}
s.close();
System.out.println(l1);
System.out.println(l2);;
}
}
我收到以下错误:
线程“main”中的异常java.lang.Error:未解决的编译问题: 类型List中的方法add(int,Date)不是 适用于参数(int) 在Sample2.main(Sample2.java:17)
我该如何解决?
答案 0 :(得分:1)
两个建议:
int
。为什么?请参阅Jon Skeet的Anti-pattern: parallel collections。Date
课程,改用现代LocalDate
。它模拟没有时间的日期,这正是您在这里所需要的。它还可以开箱即用解析您的日期,无需显式格式,因此非常方便您的特定用途。下面我将代码集中在一个类中,你可能想要一个包含更多类的设计。我会把它留给你。
public class Sample2 {
private LocalDate date;
private int value2;
public Sample2(LocalDate date, int value2) {
this.date = date;
this.value2 = value2;
}
@Override
public String toString() {
return "\nSample2 [date=" + date + ", value2=" + value2 + "]";
}
public static void main(String[] args) throws FileNotFoundException {
List<Sample2> l = new ArrayList<>();
Scanner s = new Scanner(new FileReader("t1.txt"));
while (s.hasNext()) {
l.add(new Sample2(LocalDate.parse(s.next()), s.nextInt()));
}
s.close();
System.out.println(l);
}
}
程序打印
[
Sample2 [date=2017-06-14, value2=7932],
Sample2 [date=2017-06-15, value2=10092],
Sample2 [date=2017-06-16, value2=7626],
Sample2 [date=2017-06-17, value2=7613],
Sample2 [date=2017-06-18, value2=11072],
Sample2 [date=2017-06-19, value2=8286],
Sample2 [date=2017-06-20, value2=9293]]
我还会留给你添加getter(你可能不需要setter)并找到更好的变量名。你知道数字是什么意思。
答案 1 :(得分:0)
您可以尝试使用以下代码
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Scanner;
public class Sample2 {
private static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
public static void main(String[] args) throws FileNotFoundException {
List<Date> l1 = new ArrayList<Date>();
List<Integer> l2 = new ArrayList<Integer>();
Scanner s = new Scanner(new FileReader("t1.txt"));
while (s.hasNext()) {
l1.add(getDate(s.next()));
l2.add(s.nextInt());
}
s.close();
System.out.println(l1);
System.out.println(l2);
}
private static Date getDate(String next) {
Date date = null;
try {
date = dateFormat.parse(next);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
}
答案 2 :(得分:0)
您需要使用int
方法检查nextInt()
。
“else”s.next()
将返回String
。
这将解决您的错误:
while (s.hasNext()) {
if (s.hasNextInt()) {
int myInt = s.nextInt();
System.out.println(myInt);
} else {
String dateAsString = s.next();
System.out.println(dateAsString);
}
}
当我运行此代码时,我得到:
2017-06-14
7932
2017-06-15
10092
2017-06-16
7626
2017-06-17
7613
2017-06-18
11072
2017-06-19
8286
2017-06-20
9293
您必须将日期字符串转换为localDate()
或Date()