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

使用for循环向Java数组存储玩家姓名时结果不符,求排查

解决玩家姓名数组存储的问题

嘿,我一眼就瞅出你这段代码大概率栽在nextInt()的换行符陷阱里了!先把你贴的代码片段格式化出来,咱们一步步捋:

Scanner reader = new Scanner (System.in);
System.out.print("Please enter the number of players:");
int players = reader.nextInt();
String[] player_name = new String[players+1];//Array to store names
// 推测你的for循环大概是类似这样的写法
for(int i = 1; i <= players; i++){
    System.out.print("Enter player " + i + " name:");
    player_name[i] = reader.nextLine();
}

问题根源

当你用reader.nextInt()读取玩家数量时,它只会读取输入的数字,不会消耗掉数字后面的换行符。接下来你用nextLine()读取姓名时,第一个nextLine()会直接读取这个残留的换行符,导致第一个玩家的姓名被存成空字符串,后面的输入也会整体错位,这就是结果不符合预期的核心原因。另外你定义数组用了players+1,其实完全没必要——Java数组是0索引的,players个元素的数组用new String[players]就足够了。

修正后的代码

Scanner reader = new Scanner(System.in);
System.out.print("Please enter the number of players:");
int players = reader.nextInt();
// 关键步骤:吃掉nextInt()遗留的换行符
reader.nextLine();

// 定义刚好长度的数组,用0索引更符合Java编码习惯
String[] playerNames = new String[players];

for(int i = 0; i < players; i++){
    System.out.print("Enter player " + (i+1) + " name:");
    playerNames[i] = reader.nextLine();
}

// 可以加个测试输出验证结果
System.out.println("\n你输入的玩家姓名列表:");
for(String name : playerNames){
    System.out.println("- " + name);
}

额外小建议

  • 变量名尽量用小驼峰命名(比如playerNames而不是player_name),符合Java编码规范;
  • 如果坚持想用1-based的数组索引(就是从1到players),那数组长度用players+1没问题,但一定要记得先处理换行符,不然第一个位置还是会空。

内容的提问来源于stack exchange,提问作者Benny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:32:47