它适用于int但不适用于double

时间:2018-06-14 13:03:25

标签: java double

以下程序可以正常工作(它从流中获取单词并设置最长和最短的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

1 个答案:

答案 0 :(得分:3)

将您的Scanner读数更改为:

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

我认为问题在于,当您想要结束输入流时,实际上是在中断程序,之后行为变得不可预测。正如你可以看到一些人你的程序运行正常,但对你(对我而言)它没有。如果您将其更改为我的版本,扫描仪读数将在空行后结束。