返回错误值的方法

时间:2015-10-15 04:56:03

标签: java swing date methods

我正在创建一个收到当前日期和明天日期的程序。一切都工作正常,但当我尝试进入第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我无法摆脱我制作的方法并付诸行动执行,这是一项任务,必须以这种方式完成。

2 个答案:

答案 0 :(得分:0)

您必须将maxiDay(todMonth, maxDay, todYear);的返回值存储在适当的变量中。

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

确实将maxDay传递给maxiDay是没有意义的,因为它是一个未被更改的未初始化变量。在java参数传递是由值,i。例如,您正在向方法maxiDay传递maxDay变量值的副本,然后在maxiDay内部修改该副本,而不是原始变量。

答案 1 :(得分:0)

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)....