Java 方法返回错误的值

Java 方法返回错误的值,java,swing,date,methods,Java,Swing,Date,Methods,我正在创建一个接收当前日期和明天日期的程序。一切正常,但当我试着在第4个月进入第30天,而不是把它作为一个月的最后一天,并进入下个月,它只是增加了一天,并返回31。我后来发现,为每个月设置最大天数的方法是将最大天数返回为0。当我尝试将方法中的代码放入 actionPerformed 它工作得很好,但在我让它不断返回最大天数为零的方法中,我尝试使用不同的变量和其他东西,但没有任何效果 这是我的密码: import java.awt.*; import java.awt.event.*; imp

我正在创建一个接收当前日期和明天日期的程序。一切正常,但当我试着在第4个月进入第30天,而不是把它作为一个月的最后一天,并进入下个月,它只是增加了一天,并返回31。我后来发现,为每个月设置最大天数的方法是将最大天数返回为0。当我尝试将方法中的代码放入

actionPerformed 
它工作得很好,但在我让它不断返回最大天数为零的方法中,我尝试使用不同的变量和其他东西,但没有任何效果

这是我的密码:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Tomorrow extends JFrame implements ActionListener {
JLabel dayL;
JLabel monthL;
JLabel yearL;
JTextField dayT;
JTextField monthT;
JTextField yearT;
JButton enter;
public static void main(String[] args) {
    Tomorrow frame=new Tomorrow();
    frame.setSize(400, 400);
    frame.setLocation(500, 300);
    frame.createGUI();
    frame.setVisible(true);
    frame.setTitle("Enter Current Date");
}

void createGUI(){
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    Container window=getContentPane();
    window.setLayout(new FlowLayout(5));

    dayL=new JLabel("Enter the day for today's date");
    window.add(dayL);
    dayT=new JTextField(10);
    window.add(dayT);
    monthL=new JLabel("Enter the month for today's date");
    window.add(monthL);
    monthT=new JTextField(10);
    window.add(monthT);
    yearL=new JLabel("Enter the year for today's date");
    window.add(yearL);
    yearT=new JTextField(10);
    window.add(yearT);
    enter=new JButton("Enter");
    window.add(enter);
    enter.addActionListener(this);
}

int maxiDay(int month, int day, int year){
    if((month==1)||(month==3)||(month==5)||(month==7)||(month==8)||(month==10)||(month==12)){
            day=31;
    }else if((month==4)||(month==6)||(month==9)||(month==11)){
            day=30;
    }else if(month==2){
        if((year%400==0)||(year%100!=0&&year%4==0)){
            if(day>28){
            JOptionPane.showMessageDialog(null, "Highest day for this month is 28");
            day=28;
            }
        }else{
            if(day>29){
                JOptionPane.showMessageDialog(null, "Highest day for this month is 29");
                day=29;
            }
        }
    }
    return day;
}

int todDay;
int todMonth;
int todYear;
int tomDay;
int tomMonth;
int tomYear;
int maxDay;
public void actionPerformed(ActionEvent e) {
    if ((!dayT.getText().isEmpty())||(!monthT.getText().isEmpty())||(!yearT.getText().isEmpty())){
    todDay=Integer.parseInt(dayT.getText());
    todMonth=Integer.parseInt(monthT.getText());
    todYear=Integer.parseInt(yearT.getText());
    }
    maxiDay(todMonth, maxDay, todYear);
    if(todDay>maxDay){
        if(maxDay==31){
            JOptionPane.showMessageDialog(null, "The Highet day for this month is 31");
            todDay=31;
        }else if(maxDay==30){
            JOptionPane.showMessageDialog(null, "The Highet day for this month is 30");
            todDay=30;
            }
    }

    if(todDay==maxDay){
        tomDay=1;
        tomMonth=todMonth+1;
    }else if((todMonth==12)&&(todDay==31)){
        tomDay=1;
        tomMonth=1;
        tomYear=todYear+1;
    }
    tomDay=todDay+1;
    tomMonth=todMonth;
    tomYear=todYear;
    JOptionPane.showMessageDialog(null, "(DD/MM/YYYY)" + "\nTomorrow's date is: " + tomDay + "/" + tomMonth + "/" + tomYear + maxDay);
}

}
我只是想知道我做错了什么
P.S我无法摆脱我创建并付诸实施的方法,这是一个赋值,必须这样做。

必须存储

maxiDay(todMonth、maxDay、todYear)的返回值在适当的变量中

maxiDay
方法正在更改
day
参数的本地值。在
maxiDay
之外,此类更改将不存在


实际上,将
maxDay
传递给
maxiDay
没有任何意义,因为它是一个未初始化的变量,没有被更改。在java中,参数传递是通过值进行的,即。e、 ,您正在向方法
maxiDay
传递
maxDay
变量值的副本,然后在
maxiDay
内部修改该副本,而不是原始变量。

1.您尚未存储函数的返回值

maxiDay(todMonth, maxDay, todYear);
2.您正在使用另一个名为“maxDay”的变量进行比较,该变量未初始化

if(todDay>maxDay){
    if(maxDay==31){
        JOptionPane.showMessageDialog(null, "The Highet day for this month is 31");
        todDay=31;
    }else if(maxDay==30){
应该是

maxDay = maxiDay(todMonth, maxDay, todYear);
if(todDay>maxDay){
 if(maxDay == 31)....

您在哪里分配maxDay的值?