它适用于 int,但不适用于双精度



以下程序按其应有的方式工作(它从流中获取单词并设置最长和最短的 String.length 值(max 和 min((

String s;
int max = 0;
int min = Integer.MAX_VALUE;
int words = 0;
int totallength = 0;
Scanner in = new Scanner(System.in);
while(in.hasNext()) {
s = in.next();
words++;
int length = s.length();
totallength += length;
if(length > max) {
max = length;
}
if(length < min) {
min = length;
}
}
System.out.println("max: " + max);
System.out.println("med: " + totallength/words);
System.out.println("min: " + min);

但是函数 med(单词的平均长度(只有在它是 int 类型(部分无用(时才返回结果。 如果我将其设置为双精度:

double med = (double)totallength/(double)words;
System.out.println("max: " + max);
System.out.println("med: " + med);
System.out.println("min: " + min);

它只打印"最大值",程序停止。为什么会这样?

附言流插入控制台,并以快捷键 Ctrl+C 或 Ctrl+D 结束,具体取决于操作系统

一些例子:

1
22
333
4444
max: 4
hello
helloo    hello
max: 6
the program does
does not work
for some reason
max: 7

Scanner读数更改为:

while(true) {
s = in.nextLine();
if(s.isEmpty())
break;

我认为问题在于,当您想要结束输入流时,您实际上是在中断程序,并且之后行为变得不可预测。正如你所看到的,对于某些人来说,你的程序工作得很好,但对你(对我也是如此(它没有。如果您将其更改为我的版本,扫描仪读数将在空行后结束。

最新更新