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