使用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
相关产品推荐
相关产品推荐

