Java scanner类,用于计算我的双精度和非双精度
我有一个问题,我被要求从一个文件中读取令牌并打印出三个值:是数字的令牌数(双倍)、不是数字的令牌数以及数字的总和。就这些价值观 我已经设法读取了文本文件,并且能够根据它们是否为双倍来区分它们,但是我在构建输出时遇到了问题,目前,输出只是列表,除了非双倍的文本文件在以下位置列出外:Java scanner类,用于计算我的双精度和非双精度,java,double,java.util.scanner,Java,Double,Java.util.scanner,我有一个问题,我被要求从一个文件中读取令牌并打印出三个值:是数字的令牌数(双倍)、不是数字的令牌数以及数字的总和。就这些价值观 我已经设法读取了文本文件,并且能够根据它们是否为双倍来区分它们,但是我在构建输出时遇到了问题,目前,输出只是列表,除了非双倍的文本文件在以下位置列出外: 1 2 3 one two three z 1.1 zz 2.2 zzz 3.3 zzzz 我的代码如下所示: import java.util.Scanner; import j
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
它分别对应于双精度数、非双精度数和双精度和
如果我的措辞有误,请原谅。只是想修复我的输出
提前谢谢 你需要
main
函数顶部定义变量,以记住当前的双倍计数,
非双倍,以及双倍的总和
int doubles = 0;
int nonDoubles = 0;
double sumOfDoubles = 0.0;
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;
}
}
主功能的末尾打印总计数。请注意,%.1f
截断为小数点后一位
System.out.printf("%d %d %.1f", doubles, nonDoubles, sumOfDoubles);
由于您已经成功地检测到输入何时为双精度输入,何时不是双精度输入,因此您可以在满足每种情况时分别增加计数器,并在读取完输入后显示输出。例如:
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);
}
}
至于计算现在双倍的总和,你可以按照Bruce在回答中的建议,也就是以类似的方式为总和添加另一个计数器。但是,由于这个问题,您可能需要考虑使用BigDeCimple:p> 你能不能澄清一下,是什么阻碍了你获得想要的结果?看起来您需要使用3个变量来跟踪2个计数和运行总和。老实说,我只是有点困惑在开始解析文件后该怎么做。我想用int表示双倍数,int表示非双倍数,double表示双倍和。我不知道如何组织这个想法。这正是我想要的。非常感谢。