2014-10-19 58 views
0

我正在試圖編寫一個程序,接收當前的日期輸入,然後顯示明天的日期。 我認爲它幾乎完成,但是當我將當前日期變量測試到maxDays時出現問題。我從未得到明天的正確日期。Java程序來計算並顯示明天的日期

我認爲我的代碼問題在於這部分。謝謝參觀!

if (((presentDay > maxDays || presentDay < 1)) || (presentMonth > 12) 
      || (presentYear < 0)) { 
     JOptionPane.showMessageDialog(null, "Please enter valid date \n\n" 
       + "consider number of days in each month\n" 
       + "entries must be greater than or equal to 1"); 
    } else { 

     if (presentDay == maxDays) { 
      if (presentMonth == 12) { 
       tmrwDay = 1; 
       tmrwMonth = 1; 
       tmrwYear = presentYear++; 
      } else { 
       tmrwDay = 1; 
       tmrwMonth = presentMonth++; 
       tmrwYear = presentYear; 
      } 
     } else { 
      tmrwDay = presentDay++; 
      tmrwMonth = presentMonth; 
      tmrwYear = presentYear; 
     } 

     displayTmrwDate(tmrwDay, tmrwMonth, tmrwYear); 

    } 

以下是完整的程序:

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

public class Lab5 extends JFrame implements ActionListener { 

private JTextField dayTextField, monthTextField, yearTextField; 
private JLabel nextDateCalculatorLabel, presentDayLabel, 
     presentMonthLabel, presentYearLabel; 

public static void main(String[] args) { 
    Lab5 frame = new Lab5(); 
    frame.pack(); 
    frame.setSize(300, 200); 
    frame.createGUI(); 
    frame.setLocationRelativeTo(null); //centers the frame 
    frame.setVisible(true); 
} 

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

    nextDateCalculatorLabel = new JLabel("- - - - -" + " " 
      + "N e x t" + " " + "D a y" + " " + "C a l c u l a t o r" 
      + " " + "- - - - -"); 
    window.add(nextDateCalculatorLabel); 

    presentDayLabel = new JLabel("Enter Present Day:"); 
    window.add(presentDayLabel); 

    dayTextField = new JTextField(5); 
    window.add(dayTextField); 
    dayTextField.addActionListener(this); 

    presentMonthLabel = new JLabel("Enter Present Month:"); 
    window.add(presentMonthLabel); 

    monthTextField = new JTextField(5); 
    window.add(monthTextField); 
    monthTextField.addActionListener(this); 

    presentYearLabel = new JLabel("Enter Present Year:"); 
    window.add(presentYearLabel); 

    yearTextField = new JTextField(5); 
    window.add(yearTextField); 
    yearTextField.addActionListener(this); 
} 

@Override 
public void actionPerformed(ActionEvent event) { 
    int presentDay, presentMonth, presentYear; 
    int maxDays, tmrwDay, tmrwMonth, tmrwYear; 
    String inputString; 

    inputString = dayTextField.getText(); 
    presentDay = Integer.parseInt(inputString); 

    inputString = monthTextField.getText(); 
    presentMonth = Integer.parseInt(inputString); 

    inputString = yearTextField.getText(); 
    presentYear = Integer.parseInt(inputString); 

    maxDays = calcMaxDays(presentMonth, presentYear); 

    if (((presentDay > maxDays || presentDay < 1)) || (presentMonth > 12) 
      || (presentYear < 0)) { 
     JOptionPane.showMessageDialog(null, "Please enter valid date \n\n" 
       + "consider number of days in each month\n" 
       + "entries must be greater than or equal to 1"); 
    } else { 

     if (presentDay == maxDays) { 
      if (presentMonth == 12) { 
       tmrwDay = 1; 
       tmrwMonth = 1; 
       tmrwYear = presentYear++; 
      } else { 
       tmrwDay = 1; 
       tmrwMonth = presentMonth++; 
       tmrwYear = presentYear; 
      } 
     } else { 
      tmrwDay = presentDay++; 
      tmrwMonth = presentMonth; 
      tmrwYear = presentYear; 
     } 

     displayTmrwDate(tmrwDay, tmrwMonth, tmrwYear); 

    } 

} 

private int calcMaxDays(int m, int y) { 
    int maxDays = 0; 

    switch (m) { 

     case 1: case 3: case 5: case 7: case 8: case 10: case 12: 
      maxDays = 31; 
      break; 

     case 4: case 6: case 9: case 11: 
      maxDays = 30; 
      break; 

     case 2: 
      if ((y % 400 == 0) || (y % 100 != 0 && y % 4 == 0)) { 
       maxDays = 29; 
      } else { 
       maxDays = 28; 
      } 
      break; 
    } 

    return maxDays; 
} 

private static void displayTmrwDate(int tD, int tM, int tY) { 
    JOptionPane.showMessageDialog(null, "The Date Tomorrow is:\n" 
      + tD + "/" + tM + "/" + tY); 
} 

}

+3

考慮發佈[最小示例程序](http://stackoverflow.com/help/mcve)。這個程序應該爲我們編譯和運行,並且應該爲我們展示你的問題。我們所需要的只是代碼的邏輯部分。無需發佈任何GUI代碼,因爲它與您的問題無關。 – 2014-10-19 00:44:09

+3

以儘可能最短,自包含的正確代碼示例展示您的問題。沒有人會基於模糊的聲明「所出現的問題」來檢查所有代碼。找出發生問題的特定區域併發布該位。此外,請充分準確地描述問題。 – MarsAtomic 2014-10-19 00:44:38

+1

感謝您的建議,我是新手。我會試着寫一些能夠重現我的問題的小東西。 – CompEng 2014-10-19 00:48:28

回答

2

您使用後遞增presentDay++,你需要在你的if語句使用預增++presentDay在每個語句。

例如,在你的聲明:

tmrwDay = presentDay++; 

首先presentDay值分配給tmrwDay然後presentDay的價值遞增。如果您預先遞增,則++presentDay,則presentDay的值將遞增,然後將其值分配給tmrwDay

+0

非常感謝!這解決了它!我不能夠感謝你! – CompEng 2014-10-19 01:40:39