2015-10-15 66 views
0

我正在創建一個接收當前日期和明天的日期的程序。一切工作正常,但當我嘗試進入第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); 
} 

} 

我真的需要知道我在做什麼錯 PS我無法擺脫我做的方法,投放的actionPerformed,這是一個任務,它必須這樣做。

+0

你在哪裏分配maxDay的價值? – Swag

回答

0

1.You沒有從功能

maxiDay(todMonth, maxDay, todYear); 

2.You使用名爲「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).... 
0

您必須將返回的值maxiDay(todMonth, maxDay, todYear);存儲在適當的變量中。

maxiDay方法正在改變day參數的本地值。 maxiDay以外的這些更改將不存在。

事實上,將maxDay傳遞給maxiDay是沒有意義的,因爲它是未被更改的未初始化變量。在Java參數傳遞是由價值,我。即,您正在向maxiDay方法傳遞maxDay變量的值的副本,然後在maxiDay的內部修改該副本,而不是原始變量。