使用for循环将方法输入存入数组时遇空指针错误求助
问题:数组未初始化导致无法写入数据
运行时错误提示:
Cannot store to object array because poe_part_2.Task.taskNameArray is null
你声明了多个静态数组变量,但只做了变量声明,没有为数组分配内存空间,这些数组默认值为null,直接通过下标赋值自然会触发空指针错误。另外代码里还有几处拼写错误,也需要同步修正。
解决步骤
- 初始化数组:在
addTasks方法开头,根据传入的HowManyTasks参数,为所有数组分配对应长度的内存空间 - 修正拼写错误:比如
public satic void main的satic、taskNumberAray的拼写问题 - 调整任务描述逻辑:原代码中先取数组的null值再处理,应该先获取合法输入再存入数组
修改后的核心代码示例
public class Task { public static int NumberOfTasks = 0; public static String taskNameArray[]; public static int taskNumberArray[]; // 修正拼写错误 public static String taskDescriptionArray[]; public static String developerDetailsArray[]; public static int taskDurationArray[]; public static String taskIDArray[]; public static String StatusArray[]; public static void main(String[] args) { int HowManyTasks = 2; // 示例任务数,可替换为用户输入逻辑 addTasks(HowManyTasks); } public static void addTasks(int HowManyTasks) { // 初始化所有数组,长度与任务数一致 taskNameArray = new String[HowManyTasks]; taskNumberArray = new int[HowManyTasks]; taskDescriptionArray = new String[HowManyTasks]; developerDetailsArray = new String[HowManyTasks]; taskDurationArray = new int[HowManyTasks]; taskIDArray = new String[HowManyTasks]; StatusArray = new String[HowManyTasks]; for(int i = 0; i < HowManyTasks; i++){ taskNameArray[i] = taskName(); developerDetailsArray[i] = developerDetails(); taskDurationArray[i] = taskDuration(); // 修正任务描述处理逻辑:先获取合法输入再存入数组 String taskDescription; while(!checkTaskDescription(taskDescription = takeTaskDescription())){ System.out.println("Try again"); } taskDescriptionArray[i] = taskDescription; StatusArray[i] = Status(); taskNumberArray[i] = taskNumber(); taskIDArray[i] = createTaskID(NumberOfTasks); NumberOfTasks++; // 新增任务后计数自增,避免taskID重复 } } // 以下是你需要实现的辅助方法框架(原代码未提供,补全示例) private static String taskName() { return "Task" + (NumberOfTasks + 1); } private static String developerDetails() { return "Developer" + (NumberOfTasks + 1); } private static int taskDuration() { return 5; } private static String takeTaskDescription() { return "Task description"; } private static boolean checkTaskDescription(String desc) { return desc != null && desc.length() <= 50; } private static String Status() { return "To Do"; } private static int taskNumber() { return NumberOfTasks + 1; } private static String createTaskID(int numberOfTasks) { return "ID" + numberOfTasks; } }
内容的提问来源于stack exchange,提问作者Simphiwe
相关产品推荐
相关产品推荐

