Java程序计算并显示明天的日期

标签 java if-statement switch-statement

我正在尝试编写一个程序,该程序接收当前日期输入,然后显示明天的日期。 我认为它几乎完成了,但是当我将当前日期变量测试为 maxDays 时,出现了问题。我从来没有得到明天的正确日期。

我认为我的代码的问题就出在这部分。感谢您的浏览!

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);
}

}

最佳答案

您使用了后置增量 presentDay++,并且需要在 if 语句中的每个语句中使用前置增量 ++presentDay

例如在您的声明中:

tmrwDay = presentDay++;

首先将presentDay 的值赋给tmrwDay,然后presentDay 的值递增。如果您要预先递增 ++presentDay,则 presentDay 的值将递增,然后将其值分配给 tmrwDay

关于Java程序计算并显示明天的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26446064/

相关文章:

java - 构造函数设置/获取。如何设置不返回小于0的值?

Javassist:将静态类字段初始化为给定值?

java.lang.NoClassDefFoundError : org/apache/log4j/Level - slf4j? 错误

java - 三星远程测试实验室 (RTL) : how to bind the device to Eclipse/debugger

JavaScript:是否允许在 `ternary` 语句中使用 `if` 语句?

python - 是否可以在代码检查完每个选项后让我的 else 语句出现?

c# - 从 C# 中的变量执行函数

c++ - 在案例中更改开关变量

switch-statement - switch 语句出错了 - swift 语言

java - 为什么我无法访问在 switch 中声明的变量?