隔壁王健喜儿 2023-02-25 14:54 采纳率: 96%
浏览 37
已结题

关于Java局部变量报错的问题


import java.util.Scanner;

public class MyCalendar {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        System.out.println("如果您想查看某年的日历,请输入1");
        System.out.println("如果您想查看某天的星期,请输入2");

        int user_input = scanner.nextInt();

        if (user_input == 1) {
            int year = scanner.nextInt();
            //已知2023年一月一日是星期日
            int temp;
            int first_day;

            if (year < 2023) {
                for (int i = year; i < 2023; i++) {
                    int days = 0;
                    if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {
                        days += 366;
                    } else {
                        days += 365;
                    }
                    temp = days % 7;
                    first_day = 7 - temp;  //每年的11日是星期几
                    if (temp == 0) {
                        first_day = 0;  //将星期日记作0
                    }
                }
            } else if (year == 2023) {
                first_day = 0;  //2023一月一日是星期日
            } else {
                int days = 0;
                for (int i = 2023; i < year; i++) {
                    if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {
                        days += 366;
                    } else {
                        days += 365;
                    }
                    temp = days % 7;
                    first_day = temp;
                }
            }

            int day = 1;
            int[] a;
            if (year % 4 == 0 && year % 100 != 0 || year % 400 ==0) {
                a = new int[]{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
            } else {
                a = new int[]{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
            }
            
            int m;
            for (m = 1; m <= 12; m++) {
                System.out.println("Sun Mon Tue Wed Thu Fri Sat");
                for (int i = 0; day < a[m]; day++) {
                    for (int j = 0; j < first_day; j++) {

                    }
                }
            }

        } else if (user_input == 2) {
            
        } else {
            System.out.println("请输入有效的数字!");
        }

    }
}

编写一个交互系统,用户输入年份即可查看当年的日历,输入日期即可查看星期。

这个程序尚未完成,正在编写第一部分,我定义了一个first_day用来表示输入年份的1月1日是星期几,first_day是局部变量,但我在所有的if else下都对其赋值了,但是在后面的循环里报错:first_day可能尚未初始化,这是怎么回事?要怎么修改?望指点

img

本人大一下学期初学Java,上学期学的C,有人说我代码风格有点乱,明显的C程序编程习惯,请问大家是怎么规划/设计自己的代码的?

  • 写回答

3条回答 默认 最新

  • pzzhao 2023-02-25 15:06
    关注

    java中局部变量需要初始化一下,记得first_day 就是一个局部变量,所以你在声明的时候可以给他赋默认值0之类的。
    至于代码风格,建议看下阿里巴巴java开发规约,你这个变量命名习惯确实是c的,java一般都是驼峰式

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月25日
  • 已采纳回答 2月25日
  • 创建了问题 2月25日

悬赏问题

  • ¥15 电脑开机过商标后就直接这样,求解各位
  • ¥15 mysql , 用自己创建的本地主机和用户名 登录不上
  • ¥15 关于#web项目#的问题,请各位专家解答!
  • ¥15 vmtools环境不正常
  • ¥15 请问如何在Ubuntu系统中安装使用microsoft R open?
  • ¥15 jupyter notebook
  • ¥30 informer时间序列预测
  • ¥20 SSR引物多态性分析
  • ¥15 大漠插件在Win11易语言注册调用和免注册灵异事件,VS上注册调用完全没问题
  • ¥15 Addressable缓存机制做热更新的问题