You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java数组输入异常:为何需输入6次而非预期的2次?

问题分析与修复方案

让我帮你拆解下代码里的问题,以及怎么解决输入次数过多、结果显示异常的问题:

核心问题点

  • 重复创建Scanner完全没必要:你每次循环都新建Scanner s1和Scanner s2,这会导致输入流的管理混乱,而且完全是冗余操作——只用一个Scanner就能处理所有输入。
  • 多次调用nextLine()导致输入被“浪费”:
    比如你先调用s1.nextLine()判断是否是"END",这已经读取了一行输入,但没保存;接着又调用s1.nextLine()给str1[count]赋值,这时候读的是下一行输入,等于你第一次输入的内容直接被丢弃了。
    最后打印时又调用s1.nextLine()和s2.nextLine(),这又会强制你再输入两行,所以你看到的打印结果其实是这两次新输入的内容,和你存在数组里的内容完全无关。
  • 字符串比较用错了方法:Java里==是比较对象引用,不是字符串内容,判断字符串相等应该用equals()方法,否则永远无法正确识别"END"结束符。

修正后的代码

import java.util.Scanner;

public class DependencyInput {
    public static void main(String[] args) {
        String str1[] = new String[100];
        String str2[] = new String[100];
        int count = 0;
        // 只初始化一次Scanner,复用它处理所有输入
        Scanner scanner = new Scanner(System.in);
        
        while (true) {
            // 先读取左项输入,保存到变量后再判断是否结束
            System.out.print("请输入第" + (count + 1) + "个依赖的左项(输入END结束):");
            String left = scanner.nextLine();
            if ("END".equals(left)) {
                break;
            }
            str1[count] = left;
            
            // 读取右项输入,同样先保存再判断
            System.out.print("请输入第" + (count + 1) + "个依赖的右项(输入END结束):");
            String right = scanner.nextLine();
            if ("END".equals(right)) {
                break;
            }
            str2[count] = right;
            
            count++;
            // 直接用数组里已保存的内容打印,不再额外读取输入
            System.out.println("完成第" + count + "个依赖: " + str1[count - 1] + "->" + str2[count - 1]);
        }
        scanner.close(); // 用完关闭Scanner,释放资源
    }
}

改进说明

  1. 单Scanner实例:避免输入流混乱,简化代码逻辑;
  2. 先存后判:把每次输入先保存到变量,再判断是否为结束符,不会浪费输入内容;
  3. 正确的字符串比较:用"END".equals(input)的方式,既保证内容比较,还能避免空指针风险;
  4. 打印复用已存内容:直接使用数组里的左项和右项,不再强制额外输入,解决了结果显示异常的问题;
  5. 增加提示语:让用户清楚知道当前该输入什么,提升交互体验。

内容的提问来源于stack exchange,提问作者蔡王辉

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:29:55