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

这段代码为什么没有执行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 请问各位,如何在Jetson nano主控板的Ubuntu系统中安装PyQt5
  • ¥15 MAC安装佳能LBP2900驱动的网盘提取码
  • ¥400 微信停车小程序谁懂的来
  • ¥15 ATAC测序到底用什么peak文件做Diffbind差异分析
  • ¥15 安装ubantu过程中第一个vfat 文件挂载失败
  • ¥20 GZ::CTF如何兼容一些靶机?
  • ¥15 etcd集群部署问题
  • ¥20 谁可以帮我一下问一下各位
  • ¥15 为何重叠加权后love图的SMD与svyCreateTableOne函数绘制基线表的不一致
  • ¥150 求 《小魔指》街机游戏机整合模拟软件