Java程序输出null而非星期字符串的问题排查求助
问题分析与修复方案
兄弟,你的代码里有几个关键问题导致星期名称输出null,还有潜在的数组越界错误,我一步步给你捋清楚:
核心问题:星期数组未提前初始化就使用
你现在的代码是先进入循环打印dayOfWeek[i],之后才尝试给数组赋值——而且赋值的方式完全错了!你所有的dayOfWeek[i] = "XXX"都是给同一个i赋值(循环结束后i已经是7了,还超出了数组的索引范围),等于根本没给数组里的元素正确赋值,所以打印的时候自然是null(Java中字符串数组默认初始值都是null)。
具体修复步骤
第一步:提前初始化星期数组
在开始输入温度之前,就把dayOfWeek的每个元素对应好星期名称,数组索引从0到6分别对应周日到周六:String[] dayOfWeek = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};或者逐个赋值:
dayOfWeek[0] = "Sunday"; dayOfWeek[1] = "Monday"; // ... 以此类推到dayOfWeek[6] = "Saturday"第二步:修复循环边界
你的循环条件i <= temp.length会导致数组越界,因为数组的索引是从0开始的,temp.length是7,最大索引是6。所以循环条件要改成i < temp.length。第三步:删除冗余的输入代码
你在循环之后又写了7次temp[i] = scnr.nextInt();,这完全多余,而且此时i已经是7,会直接触发数组越界异常,必须删掉。
修正后的完整代码
import java.util.Scanner; public class TempsInOneWeek { public static void main(String[] args) { Scanner scnr = new Scanner(System.in); final int NUMBER_OF_DAYS = 7; // 提前初始化好星期数组 String[] dayOfWeek = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; int[] temp = new int[NUMBER_OF_DAYS]; System.out.println("Enter the temperature for each day, beginning with Sunday."); // 修复循环边界,用i < temp.length for (int i = 0; i < temp.length; ++i) { System.out.print("Enter temperature for " + dayOfWeek[i] + ": "); temp[i] = scnr.nextInt(); // 现在可以正常打印星期名称了 System.out.println(dayOfWeek[i] + "'s temperature was: " + temp[i] + " degrees."); } scnr.close(); // 记得关闭Scanner资源 } }
额外说明
- Java中,当你创建一个对象数组(比如
String[])时,每个元素的默认值是null,必须手动赋值后才能正常使用。 - 数组的索引范围永远是
0到length-1,循环时一定要注意边界条件,避免ArrayIndexOutOfBoundsException。
内容的提问来源于stack exchange,提问作者Jen
相关产品推荐
相关产品推荐

