Java循环遍历数组打印索引等信息 变量未初始化索引输出错误
代码问题原因及修复方案
问题原因分析
- 编译器提示
max_L未赋值:Java要求局部变量必须初始化后才能使用,你仅在循环的if分支中为max_L、max_box赋值,若数组只有1个元素(循环不执行)、或后续所有单词长度都不超过第一个单词,这两个变量就始终没有初始值,因此编译报错。 - 输出的
i为数组最后一个索引:i是循环的计数变量,循环结束时i的值等于数组长度,本身就不是用来存储最长单词索引的变量,你代码中定义的max_box才是专门存最长索引的变量,最后输出时误用了i。 - 无法正常打印
max值:因为编译阶段就因为max_L未初始化报错,代码根本无法正常运行,自然无法输出结果。
修复步骤
- 初始化
max时同步初始化max_box、max_L,对应第一个元素的索引和长度 - 最终输出时使用存储最长单词信息的
max、max_L、max_box,不要用循环计数变量i - 可选优化:将
split(" ")改为split("\\s+"),避免多个连续空格拆分出空字符串的问题
修复后完整代码
import java.util.Scanner; public class missYou { public static void main(String[] args) { System.out.println("Words"); System.out.print("Enter words: "); Scanner input = new Scanner(System.in); String word = input.nextLine(); // 用\\s+匹配任意多个空白字符,避免连续空格产生空字符串 String[] parts = word.split("\\s+"); String max = parts[0]; // 初始化时就给最长索引、最长长度赋初始值(对应第一个元素) int max_box = 0; int parts_L = parts.length; int max_L = parts[0].length(); for (int i = 1; i < parts_L; i++) { if (parts[i].length() > max.length()) { max = parts[i]; max_box = i; max_L = parts[i].length(); } } System.out.print("The longest word is " + max + " contain " + max_L + " letters, in box " + max_box); input.close(); } }
内容的提问来源于stack exchange,提问作者Noble.Programmer
相关产品推荐
相关产品推荐

