以下程序可以正常工作(它从流中获取单词并设置最长和最短的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:
double med = (double)totallength/(double)words;
System.out.println("max: " + max);
System.out.println("med: " + med);
System.out.println("min: " + min);
它只打印&#34;最大值&#34;程序停止了。为什么会这样?
P.S。流被插入控制台,它以快捷键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
答案 0 :(得分:3)
将您的Scanner
读数更改为:
while(true) {
s = in.nextLine();
if(s.isEmpty())
break;
我认为问题在于,当您想要结束输入流时,实际上是在中断程序,之后行为变得不可预测。正如你可以看到一些人你的程序运行正常,但对你(对我而言)它没有。如果您将其更改为我的版本,扫描仪读数将在空行后结束。