gpt4 book ai didi

java - 为什么我的 get 方法总是返回 0

转载 作者:行者123 更新时间:2023-12-02 09:51:37 25 4
gpt4 key购买 nike

我正在创建这个程序,它将打印用户输入的日期的日历。在我的方法 dayOfWeek() 中,公式采用日、月和两种类型的年份,并计算 0-6 之间的数字,该数字等于一周中的某一天。然而,我的方法总是返回 2,经过一些测试,我发现没有任何 get 方法 (getDay()getMonth()getYear()) code> 返回值。

命令行输入是“dd/mm/yyyy”,它被分成主要部分。在 dayofweek() 方法中,它始终返回 2 或星期一(因为它是分配给 2 的值)。然而,当定义变量 q、m、K 和 J 时,它们都设置为 0

谁能看出逻辑错误吗? (编辑,有些缩进有点不对)

class MyCalendar
{
private MyDate myDate;
private Day day;
int dayofmonth, month, year;

public static void main(String[] args)
{
String userinput = args[0];

String[] splitdate = userinput.split("/");

int dayofmonth = Integer.parseInt(splitdate[0]);
int year = Integer.parseInt(splitdate[2]);
int month = Integer.parseInt(splitdate[1]);
if (month <= 2)
{
month = month + 12;
}

MyDate myDate = new MyDate(dayofmonth, month, year);
MyCalendar mycal = new MyCalendar(myDate);
Scanner scanner = new Scanner(System.in);

while (myDate.isDateValid() == false)
{
System.out.print("Date is not valid. Please input a valid date: ");

userinput = scanner.nextLine();

splitdate = userinput.split("/");

dayofmonth = Integer.parseInt(splitdate[0]);
year = Integer.parseInt(splitdate[2]);
month = Integer.parseInt(splitdate[1]);

if (month <= 2)
{
month = month + 12;
}

myDate.isDateValid();
}

System.out.println(myDate.getDay() + " " + myDate.getMonth() + " " + myDate.getYear() + " " + mycal.dayOfWeek());
}
public MyCalendar(MyDate myDate)
{
this.myDate = myDate;
}
public Day dayOfWeek()
{
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);

int h = ((q + ((13*(m+1))/5) + K + (K/4) + (J/4) + 5*J)%7);

System.out.println(h + " " + q + " " + m + " " + K + " " + J);

if (h == 0){
myDay = Day.Saturday;
return myDay;
}
if (h == 1){
myDay = Day.Sunday;
return myDay;
}
if (h == 2){
myDay = Day.Monday;
return myDay;
}
if (h == 3){
myDay = Day.Tuesday;
return myDay;
}
if (h == 4){
myDay = Day.Wednesday;
return myDay;
}
if (h == 5){
myDay = Day.Thursday;
return myDay;
}
if (h == 6){
myDay = Day.Friday;
return myDay;
}

System.out.println(q + " " + m + " " + K + " " + J);

return myDay;
}
public int weekOfMonth()
{
int week = 0;
return week;
}
public void printCalendar()
{
}
}




class MyDate
private int day;
private int month;
private int year;
public MyDate(int day, int month, int year)
{
this.day = day;
this.month = month;
this.year = year;
}

public int getDay()
{
return day;
}

public int getMonth()
{
return month;
}

public int getYear()
{
return year;
}

最佳答案

让我们考虑一下:

1) MyDate 代码很简单。构造函数和 setter/getter 。我没有看到任何错误。

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) 真正的问题是 dayofmonthmonthyear 的值从何而来?答案:它们被声明为 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 字段,又有单独的 dayofmonthmonth字段?

仔细思考信息流。

正如@ScaryWombat 恰本地评论的那样:

Yeah ... a bit of thinking and development is required on your part.

(理论上,我们可以为您重写您的代码,但您自己动手会学到更多东西。特别是“思考”部分。)

关于java - 为什么我的 get 方法总是返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56284844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com