【发布时间】:2018-06-14 21:22:48
【问题描述】:
以下程序按应有的方式工作(它从流中获取单词并设置最长和最短的 String.length 值(最大值和最小值))
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
【问题讨论】:
-
我已经更正了您代码中的一个错字,该错字会阻止它编译。如果我做错了,请把它改过来。
-
谢谢我注意到了,如果有拼写错误是因为我很快从另一种语言翻译了它
-
没有崩溃,它只打印最大值,而不是其他两个打印。如果我在使用双精度时删除“医学打印”,它不会停止并打印最小值,所以这是使用双精度的错误,但我无法理解
-
似乎为我打印了
med(尽管int和double可以预见地给出不同的除法结果)-> ideone.com/20uFti -
啊,那是@Carcigenicate,不是我