在 Integer 变量中仅存储整数值,同时在输入中有双精度值
Storing only integer values in Integer variable while having doubles in the input
所以基本上我只是试图从正在读取的文件中获取整数值,我想将每个值存储在自己的 ArrayList 中。
读取的文件数据格式如下
1002 53 1 82 169 120 80 237.6 239.0 177.6 42.5 885.8 7.4
1004 53 1 83.7 169 110 70 160.2 173.4 115.8 44.0 73.5 8.2
1006 48 1 81.1 158 130 70 102.6 173.4 100.4 61.8 73.5 5.2
等...
这是我的代码:
public class Test {
public static void main(String[] args) {
ArrayList<Integer> integerArrayList = new ArrayList();
ArrayList<Double> doubleArrayList = new ArrayList();
String filePath = "records.txt";
try { // Methodology Store in string, split on spaces, covert to int or double,
// add to the variables directly from the Arraylist.
Scanner input = new Scanner(new File(filePath));
Integer integerVal = 0;
Double doubleVal = 0.0;
while (input.hasNextLine() ) {
integerVal = input.nextInt();
if (integerVal instanceof Integer) {
integerArrayList.add(integerVal);
}
doubleVal = input.nextDouble();
if (doubleVal instanceof Double) {
doubleArrayList.add(doubleVal);
}
}
System.out.println(integerArrayList);
System.out.println(doubleArrayList);
} catch (IOException e) {
e.printStackTrace();
}
}
}
我尝试逐步调试,问题是它按预期将每个值存储在两个变量中直到达到双精度值...
最后一个可执行步骤:
输出异常:
如果您有任何其他解决方案/方法,请告诉我,谢谢。
你的意思是你只想提取 237 而不是 237.6?
int val = Math.round(Math.floor(input.nextDouble()));
你也可以使用这个函数来检查下一个值
if (scanner.hasNextDouble()) { /*do double conversion*/ } else { /*just read int*/ }
在使用之前测试下一个标记是否为 int
(或 double
)。如果不是跳过令牌。像,
while (input.hasNext() ) {
if (input.hasNextInt()) {
integerArrayList.add(input.nextInt());
} else if (input.hasNextDouble()) {
doubleArrayList.add(input.nextDouble());
} else {
System.out.printf("Skipping non-numeric token: %s%n", input.next());
}
}
所以基本上我只是试图从正在读取的文件中获取整数值,我想将每个值存储在自己的 ArrayList 中。
读取的文件数据格式如下
1002 53 1 82 169 120 80 237.6 239.0 177.6 42.5 885.8 7.4
1004 53 1 83.7 169 110 70 160.2 173.4 115.8 44.0 73.5 8.2
1006 48 1 81.1 158 130 70 102.6 173.4 100.4 61.8 73.5 5.2
等...
这是我的代码:
public class Test {
public static void main(String[] args) {
ArrayList<Integer> integerArrayList = new ArrayList();
ArrayList<Double> doubleArrayList = new ArrayList();
String filePath = "records.txt";
try { // Methodology Store in string, split on spaces, covert to int or double,
// add to the variables directly from the Arraylist.
Scanner input = new Scanner(new File(filePath));
Integer integerVal = 0;
Double doubleVal = 0.0;
while (input.hasNextLine() ) {
integerVal = input.nextInt();
if (integerVal instanceof Integer) {
integerArrayList.add(integerVal);
}
doubleVal = input.nextDouble();
if (doubleVal instanceof Double) {
doubleArrayList.add(doubleVal);
}
}
System.out.println(integerArrayList);
System.out.println(doubleArrayList);
} catch (IOException e) {
e.printStackTrace();
}
}
}
我尝试逐步调试,问题是它按预期将每个值存储在两个变量中直到达到双精度值...
最后一个可执行步骤:
输出异常:
如果您有任何其他解决方案/方法,请告诉我,谢谢。
你的意思是你只想提取 237 而不是 237.6?
int val = Math.round(Math.floor(input.nextDouble()));
你也可以使用这个函数来检查下一个值
if (scanner.hasNextDouble()) { /*do double conversion*/ } else { /*just read int*/ }
在使用之前测试下一个标记是否为 int
(或 double
)。如果不是跳过令牌。像,
while (input.hasNext() ) {
if (input.hasNextInt()) {
integerArrayList.add(input.nextInt());
} else if (input.hasNextDouble()) {
doubleArrayList.add(input.nextDouble());
} else {
System.out.printf("Skipping non-numeric token: %s%n", input.next());
}
}