i进击的攻城狮 2022-09-30 22:26 采纳率: 97.9%
浏览 24
已结题

这段代码为什么没有执行while里面的输入就报错了?

这段代码为什么没有执行while里面的输入就报错了?在while里面不是应该继续等待控制台输入吗?为什么直接往后执行了

img

  • 写回答

2条回答 默认 最新

  • a5156520 2022-10-01 10:29
    关注

    应该是因为第13行in.nextLine()这行代码的原因,nextLine()遇到回车就会结束,而前面第8行的in.nextInt()读取一个整数后,丢弃了一个回车键到缓冲区,而这个回车键之前的内容被nextLine读取,但是这个回车之前没有内容,所以返回空字符串,然后遇到后面的代码就报错了。

    可以在第8行后,加一句in.nextLine()把前面丢弃的回车键读走即可。

    参考资料:
    java中next()和nextline()用法区别_做难做的事的博客-CSDN博客_nextline
    java 输入 Scanner中 next(),nextInt(),nextLine()辨析_yanerkouxin的博客-CSDN博客_java sc.nextint
    Java HashMap getOrDefault() 方法 | 菜鸟教程
    Java遍历Map集合的四种方式
    Java语言程序设计基础篇(原书第8版) 第9章 字符串和文本I/O 9.7 文件输入和输出 9.7.3 Scanner如何工作(第263页)

    测试代码如下:

    
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.Map;
    import java.util.Scanner;
    
    public class nextLineTest {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            
            Scanner in = new Scanner(System.in);
            int  x = in.nextInt();
            in.nextLine();
            
            HashMap<Integer,Long> hashmap = new HashMap();
            HashSet<Integer> set = new HashSet();
            
        //    https://blog.csdn.net/qq_39593222/article/details/125157841
                //https://blog.csdn.net/yanerkouxin/article/details/124000633
                //https://www.runoob.com/java/java-hashmap-getordefault.html
                //http://c.biancheng.net/view/6872.html
            //Java语言程序设计基础篇(原书第8版) 第9章 字符串和文本I/O  9.7 文件输入和输出 9.7.3  Scanner如何工作(第263页)
            while(x>0) {
                String str = in.nextLine();
                String[] s = str.split(" ");
                set.add(Integer.parseInt(s[0]));
                hashmap.put(Integer.valueOf(s[0]),
                    hashmap.getOrDefault(Integer.valueOf(s[0]), 0L)+Integer.parseInt(s[1]));
                x--;
            }
            
            System.out.println("Set集合:");
            for(int i:set) {
                System.out.print(i+" ");
            }
            
            System.out.println("\nMap键值对:");
            
            for(Map.Entry<Integer, Long> entry:hashmap.entrySet()) {
                System.out.println(entry.getKey()+":"+entry.getValue());
            }
        }
    
    }
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月14日
  • 已采纳回答 10月6日
  • 创建了问题 9月30日

悬赏问题

  • ¥15 速帮,学校需要在外上班没空
  • ¥15 人在外地出差,速帮一点点
  • ¥15 如何使用canvas在图片上进行如下的标注,以下代码不起作用,如何修改
  • ¥15 Windows 系统cmd后提示“加载用户设置时遇到错误”
  • ¥50 vue router 动态路由问题
  • ¥15 关于#.net#的问题:End Function
  • ¥15 无法import pycausal
  • ¥15 VS2022创建MVC framework提示:预安装的程序包具有对缺少的注册表值的引用
  • ¥15 weditor无法连接模拟器Local server not started, start with?
  • ¥20 6-3 String类定义