Java 为什么我的get方法总是返回0
我正在创建这个程序,它将打印由用户输入的日期日历。在我的方法Java 为什么我的get方法总是返回0,java,Java,我正在创建这个程序,它将打印由用户输入的日期日历。在我的方法dayOfWeek()中,公式采用日-月和两种类型的年,并计算0-6之间的数字,该数字等于一周中的一天。 然而,我的方法总是返回2,经过一些测试,我发现get方法(getDay(),getMonth(),getYear())都没有返回值 命令行输入为“dd/mm/yyyy”,分为主命令行。在dayofweek()方法中,它总是返回2或星期一(因为它是分配给2的值)。然而,当定义变量q、m、K和J时,它们都被设置为0 有人能看到逻辑错误吗
dayOfWeek()
中,公式采用日-月和两种类型的年,并计算0-6之间的数字,该数字等于一周中的一天。
然而,我的方法总是返回2,经过一些测试,我发现get方法(getDay()
,getMonth()
,getYear())
都没有返回值
命令行输入为“dd/mm/yyyy”,分为主命令行。在dayofweek()
方法中,它总是返回2或星期一(因为它是分配给2的值)。然而,当定义变量q、m、K和J时,它们都被设置为0
有人能看到逻辑错误吗?(编辑,部分缩进有点不正确)
classmycalendar
{
私人MyDate MyDate;
私人日;
int dayofmonth,month,year;
公共静态void main(字符串[]args)
{
字符串userinput=args[0];
字符串[]splitdate=userinput.split(“/”);
int dayofmonth=Integer.parseInt(splitdate[0]);
int year=Integer.parseInt(splitdate[2]);
int month=Integer.parseInt(splitdate[1]);
如果(月让我们仔细考虑一下:
1) MyDate的代码很简单。一个构造函数和getter。没有我能看到的bug
2) MyDate
实例是这样创建和使用的:
MyDate Date = new MyDate(dayofmonth, month, year);
Day myDay = Day.Sunday;
int q = Date.getDay();
int m = Date.getMonth();
int K = (Date.getYear()%100);
int J = (Date.getYear()/100);
这里有一些令人震惊的风格错误(Date
应该是Date
等等),这让人很难理解。有经验的Java程序员在看到Date.getDay()
后会仔细考虑一下。但这是一种误导
3) 真正的问题是dayofmonth
、month
和year
的值来自哪里?答案:它们被声明为MyCalendar
的字段
int dayofmonth, month, year;
4) 它们在哪里初始化?回答:无处!!您似乎正试图在main
方法中初始化它们,如下所示:
int dayofmonth = Integer.parseInt(splitdate[0]);
int year = Integer.parseInt(splitdate[2]);
int month = Integer.parseInt(splitdate[1]);
但是请仔细看!您实际上是在声明和初始化局部变量…而不是MyCalendar
实例的实例字段。因此,这些信息不会到达代码需要的地方
您需要重新设计代码。例如,问问自己为什么MyCalendar
既有myDate
字段,又有单独的dayofmonth
、month
和year
字段
仔细思考信息流
正如@ScaryWombat恰当地评论的那样:
是的…你需要一点思考和发展
(理论上,我们可以为您重新编写代码,但您可以通过自己编写代码学到更多。特别是“思考”部分。)您可以更具体一点吗?您的输入和输出是什么?您希望得到什么?为什么?命令行输入是“dd/mm/yyyy”,它被分成了主命令行。在dayofweek()中方法它总是或星期一返回2(因为它是分配给2的值)。但是,当定义变量q、m、K和J时,它们都被设置为0此声明int dayofmonth=Integer.parseInt(splitdate[0]);
正在隐藏类字段int dayofmonth,month,year;
,但老实说,您应该只依赖实例值,而不是在这种方法中创建MyDayOfWeek
的新实例。这是否意味着不使用var dayofmonth,month,year,而只使用splitdate[…]?可能更改mycal.dayOfWeek()
就像mycal.dayOfWeek(myDate)
int dayofmonth = Integer.parseInt(splitdate[0]);
int year = Integer.parseInt(splitdate[2]);
int month = Integer.parseInt(splitdate[1]);