Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的get方法总是返回0_Java - Fatal编程技术网

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]);