You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何设置月份为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. 调整输入与验证顺序:先让用户输入所有日期信息,再进行有效性判断,这样判断的是用户实际输入的值,而非未初始化的默认值。
  2. 修复默认值逻辑:分别对每个字段独立验证,不符合要求时直接替换为你指定的默认值(月份/日期为1,年份为2018)。
  3. 处理Scanner输入异常:解决nextInt()后残留换行符导致nextLine()读取空字符串的问题,保证名称输入正常。
  4. 完善循环逻辑:添加了是否继续添加事件的交互,同时正确维护数组索引count,确保数据存入正确位置。
  5. 补充代码完整性:补全了类、主方法和数组初始化,让代码可以直接编译运行。

如果需要更严格的日期验证(比如考虑不同月份的天数差异、闰年等),可以随时告诉我,咱们再进一步优化~

内容的提问来源于stack exchange,提问作者user9680482

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:58:31