我遇到一个问题,我被要求从文件中读取令牌并打印出三个值:作为数字的令牌数量(双打),不是数字的令牌数量,以及数字的总和。而且只是那些价值观。
我设法读取了文本文件,并且能够根据它们是否双倍来分离它们,但是我在构建输出时遇到了麻烦,目前只是列表,除了那个非双打在我的文本文件中列出:
1 2 3 one two three
z 1.1 zz 2.2 zzz 3.3 zzzz
我的代码如下:
import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
public class Lab1 {
public static void main(String[] args) {
Scanner in = null;
try {
in = new Scanner(new File("data.txt"));
} catch (FileNotFoundException e) {
System.err.println("failed to open data.txt");
System.exit(1);
}
/**
* parse file token by token
*/
while (in.hasNext()) {
String token = in.next();
// if it's a Double
try {
double d = Double.parseDouble(token);
System.out.println(+d);
continue;
}
catch (NumberFormatException e) {
// It's not a double:
System.out.println("Not a double");
}
}
}
}
这是我的输出:
1.0
2.0
3.0
Not a double
Not a double
Not a double
Not a double
1.1
Not a double
2.2
Not a double
3.3
Not a double
当我希望我的输出为:
6 7 12.6
分别对应双打次数,非双打次数和双打次数。
如果我说错了请原谅。只是想修复我的输出。
提前致谢!
答案 0 :(得分:1)
你需要
在main
函数顶部定义变量记住双精度的当前计数,
非双打,以及双打的总和。
int doubles = 0;
int nonDoubles = 0;
double sumOfDoubles = 0.0;
添加到double / non-double / sum
while (in.hasNext()) {
String token = in.next();
try {
// try to convert string to double
double d = Double.parseDouble(token);
doubles += 1;
sumOfDoubles += d;
} catch (NumberFormatException e) {
// conversion failed - it's not a double
nonDoubles += 1;
}
}
在main
功能结尾处打印总计数。请注意,%.1f
会截断到一个小数位。
System.out.printf("%d %d %.1f", doubles, nonDoubles, sumOfDoubles);
答案 1 :(得分:1)
由于您已经设法检测输入何时是双精度,并且当它不是双精度时,您可以在满足每个情况时分别增加计数器,并在读完输入后显示输出。例如:
import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
public class Lab1 {
public static void main(String[] args) {
Scanner in = null;
try {
in = new Scanner(new File("data.txt"));
} catch (FileNotFoundException e) {
System.err.println("failed to open data.txt");
System.exit(1);
}
/**
* parse file token by token
*/
// Added lines of code
int noOfDoubles = 0;
int noOfNonDoubles = 0;
while (in.hasNext()) {
String token = in.next();
// if it's a Double
try {
double d = Double.parseDouble(token);
System.out.println(+d);
noOfDoubles++;
continue;
}
catch (NumberFormatException e) {
// It's not a double:
System.out.println("Not a double");
noOfNonDoubles++;
}
}
System.out.println("No of doubles: " + noOfDoubles + ", " +
"No of non-doubles: " + noOfNonDoubles);
}
}
至于计算存在的双打的总和,你可以像布鲁斯在他的答案中所建议的那样做,即以与上述计数器相似的方式添加另一个计数器。但是,您可能需要考虑使用BigDecimal,因为此问题:Java: Adding and subtracting doubles are giving strange results。