如何设置月份为1、日期为1、年份为2018的虚假值?代码问题咨询
解决你的日期默认值与代码逻辑问题
首先,咱们先梳理下你代码里的两个关键问题:
- 逻辑顺序颠倒:你在还没让用户输入月份、日期、年份的时候,就先判断这些变量的值了——这时候变量都是未初始化的默认值(int类型默认是0),肯定会直接进入else分支,完全不符合预期。
- 语法错误:else块的代码不完整,括号匹配也有问题,导致代码无法编译。
接下来是修正后的完整代码,我会在代码里加注释说明每一步的改动:
import java.util.Scanner; public class EventManager { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String doAgain = "y"; String[] names = new String[100]; // 假设数组大小为100,你可以根据需求调整 int[] months = new int[100]; int[] days = new int[100]; int[] years = new int[100]; int count = 0; while (doAgain.equalsIgnoreCase("y")) { System.out.println("Enter the details of a new event ..."); System.out.println("Name: "); // 处理nextInt之后的换行符问题,避免后续nextLine读取空字符串 if (count > 0) { sc.nextLine(); } String name = sc.nextLine(); names[count] = name; // 先获取用户输入的月份、日期、年份 System.out.println("Month: "); int mNum = sc.nextInt(); System.out.println("Day: "); int day = sc.nextInt(); System.out.println("Year: "); int year = sc.nextInt(); // 验证并设置默认值:无效值替换为指定默认值 // 月份不在1-12范围则设为1 if (mNum < 1 || mNum > 12) { mNum = 1; } // 日期不在1-31范围则设为1 if (day < 1 || day > 31) { day = 1; } // 年份不是2018则设为2018 if (year != 2018) { year = 2018; } // 将处理后的值存入数组 months[count] = mNum; days[count] = day; years[count] = year; // 询问是否继续添加事件 System.out.println("Add another event? (y/n)"); doAgain = sc.next(); count++; } sc.close(); // 打印事件列表验证结果 System.out.println("\nEvent List:"); for (int i = 0; i < count; i++) { System.out.printf("Event %d: %s, %d/%d/%d%n", i+1, names[i], months[i], days[i], years[i]); } } }
关键改动说明:
- 调整输入与验证顺序:先让用户输入所有日期信息,再进行有效性判断,这样判断的是用户实际输入的值,而非未初始化的默认值。
- 修复默认值逻辑:分别对每个字段独立验证,不符合要求时直接替换为你指定的默认值(月份/日期为1,年份为2018)。
- 处理Scanner输入异常:解决
nextInt()后残留换行符导致nextLine()读取空字符串的问题,保证名称输入正常。 - 完善循环逻辑:添加了是否继续添加事件的交互,同时正确维护数组索引
count,确保数据存入正确位置。 - 补充代码完整性:补全了类、主方法和数组初始化,让代码可以直接编译运行。
如果需要更严格的日期验证(比如考虑不同月份的天数差异、闰年等),可以随时告诉我,咱们再进一步优化~
内容的提问来源于stack exchange,提问作者user9680482
相关产品推荐
相关产品推荐

