Java 使用缓冲读取器不会给出运行时错误,但使用扫描仪会给出在线判断?

Java 使用缓冲读取器不会给出运行时错误,但使用扫描仪会给出在线判断?,java,Java,我在做一个问题。我提交了以下使用扫描仪读取输入的代码 import java.io.*; import java.math.*; import java.util.*; import java.lang.*; class Main{ public static void main(String[] args)throws java.lang.Exception{ Scanner cin = new Scanner(System.in); TreeMap<String,

我在做一个问题。我提交了以下使用扫描仪读取输入的代码

import java.io.*;
import java.math.*;
import java.util.*;
import java.lang.*;

class Main{ 

public static void main(String[] args)throws java.lang.Exception{
    Scanner cin = new Scanner(System.in);
    TreeMap<String, Integer> map = new TreeMap<String, Integer>();
    int trees = 0;
    while(true){
        String tree = cin.nextLine();
        if(tree==null){
            break;
        }
        trees++;
        if(map.containsKey(tree)){
            map.put(tree, map.get(tree)+1);
        }else{
            map.put(tree, 1);
        }
    }
    for(String key : map.keySet()){

    }

    Iterator<String> itr = map.keySet().iterator();
    while(itr.hasNext()){
        String tree = itr.next();
        System.out.print(tree + " " );
        double percent = (double)map.get(tree)/trees*100;
        System.out.format("%.4f\n", percent);
    }

}
}
import java.io.*;
导入java.math.*;
导入java.util.*;
导入java.lang.*;
类主{
公共静态void main(字符串[]args)引发java.lang.Exception{
扫描仪cin=新扫描仪(System.in);
TreeMap map=newtreemap();
int树=0;
while(true){
String tree=cin.nextLine();
if(tree==null){
打破
}
树++;
if(地图容器(树)){
map.put(树,map.get(树)+1);
}否则{
地图。放置(树,1);
}
}
for(字符串键:map.keySet()){
}
迭代器itr=map.keySet().Iterator();
while(itr.hasNext()){
字符串树=itr.next();
系统输出打印(树+“”);
双百分比=(双)映射。获取(树)/树*100;
System.out.format(“%.4f\n”,百分比);
}
}
}
但我得到一个运行时错误。但是,当我提交相同的代码,但这次我使用了缓冲读取器时,我的答案就会被接受。这是judge的问题还是我缺少java输入输出例程的某些功能

我应该使用缓冲读取器还是扫描仪来更可靠地读取数据

import java.io.*;
import java.math.*;
import java.util.*;
import java.lang.*;

class Main{ 

public static void main(String[] args)throws java.lang.Exception{
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    TreeMap<String, Integer> map = new TreeMap<String, Integer>();
    int trees = 0;
    while(true){
        String tree = br.readLine();
        if(tree==null){
            break;
        }
        trees++;
        if(map.containsKey(tree)){
            map.put(tree, map.get(tree)+1);
        }else{
            map.put(tree, 1);
        }
    }
    for(String key : map.keySet()){

    }

    Iterator<String> itr = map.keySet().iterator();
    while(itr.hasNext()){
        String tree = itr.next();
        System.out.print(tree + " " );
        double percent = (double)map.get(tree)/trees*100;
        System.out.format("%.4f\n", percent);
    }

}
}
import java.io.*;
导入java.math.*;
导入java.util.*;
导入java.lang.*;
类主{
公共静态void main(字符串[]args)引发java.lang.Exception{
BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
TreeMap map=newtreemap();
int树=0;
while(true){
字符串树=br.readLine();
if(tree==null){
打破
}
树++;
if(地图容器(树)){
map.put(树,map.get(树)+1);
}否则{
地图。放置(树,1);
}
}
for(字符串键:map.keySet()){
}
迭代器itr=map.keySet().Iterator();
while(itr.hasNext()){
字符串树=itr.next();
系统输出打印(树+“”);
双百分比=(双)映射。获取(树)/树*100;
System.out.format(“%.4f\n”,百分比);
}
}
}

阅读有关您使用的方法的合同。如果处于EOF,则返回
null
;“如果找不到行,则抛出
NoSuchElementException
。”如果要使用
Scanner
,则循环条件需要检查
cin.hasNextLine()

阅读有关所用方法的合同。如果处于EOF,则返回
null
;“如果找不到行,则抛出
NoTouchElementException
。”如果要使用
Scanner
,则循环条件需要检查
cin.hasNextLine()

我收到一个运行时错误。法官只是说有一个运行时错误。我得到一个运行时错误。法官只是说有一个运行时错误。是的!!谢谢当我检查cin的情况时,答案被接受。hasNextLine()。是的!!谢谢当我检查cin.hasnetline()的条件时,答案被接受。