拥有所有双打文件时很容易,但是什么时候 介于两者之间的非双重, 我无法捕捉到所有这些。
例如:
604.2
609.2
6042
604.4
4234.324
312
gfsdgfreg
6043
604.3
输出:
604.2
609.2
6042.0
604.4
4234.324
312.0
显然,缺少两个双打。有办法吗? 通过使用hasNextDouble()来捕获所有这些? 如果你没有得到回复,请提前。我在某处看到了 我可以解析他们每个人加倍并抓住 例外,但我真的不是那么高级
我在这里有:
import java.util.*;
import java.io.*;
public class Lab11{
public static void main(String[] args)
throws FileNotFoundException{
File nums = new File("file.txt");
int size = arrSize(nums);
double[] phoneNums = copy(nums,size);
for(int i=0;i<phoneNums.length;i++)
System.out.println(phoneNums[i]);
}
public static int arrSize(File f)
throws FileNotFoundException{
int arrSize = 0;
Scanner in = new Scanner(f);
while(in.hasNextDouble()){
arrSize++;
in.next();
}
in.close();
return arrSize;
}
public static double[] copy(File f,int size)
throws FileNotFoundException{
Scanner in = new Scanner(f);
double[] list = new double[size];
int i = 0;
while(in.hasNextDouble()){
list[i++] = in.nextDouble();
}
in.close();
return list;
}
}
答案 0 :(得分:2)
因为您正在使用
while(in.hasNextDouble()){
arrSize++;
in.next();
}
一旦达到非双倍,它就会停止,并且不会继续前进。
您必须循环遍历while
循环中的每一行,并且在此循环中,使用if
语句检查您正在阅读的内容是否为双倍。
答案 1 :(得分:2)
我会给你的两个while循环以下结构:
while(in.hasNext()) {
if(in.hasNextDouble()) {
// your inner while loop code here
} else {
in.next();
}
}
否则,您将在第一次非双重实例后错过任何内容。
答案 2 :(得分:1)
就像Takendarkk所说的那样,一旦输入in.hasNextDouble()中发现非双重将被评估为false,结束你的循环。
以下是一个(希望)更简化的方式来做你正在做的事情的例子:
// create a new list for our doubles
List<Double> doubles = new LinkedList<>();
try {
// open our doubles file reader
BufferedReader reader = Files.newBufferedReader(Paths.get("doubles.txt"), Charset.defaultCharset());
// read our doubles file
String line;
while ((line = reader.readLine()) != null) {
if (line.matches("^[0-9]*(\\.[0-9]+)?$")) {
doubles.add(Double.parseDouble(line));
}
}
// close our doubles file reader
reader.close();
} catch (IOException e) {
e.printStackTrace(); // for the sake of the example
}
// output our doubles
for (Double d : doubles) {
System.out.println("Double: " + d);
}
希望这有帮助