Java 方法返回错误的值
我正在创建一个接收当前日期和明天日期的程序。一切正常,但当我试着在第4个月进入第30天,而不是把它作为一个月的最后一天,并进入下个月,它只是增加了一天,并返回31。我后来发现,为每个月设置最大天数的方法是将最大天数返回为0。当我尝试将方法中的代码放入Java 方法返回错误的值,java,swing,date,methods,Java,Swing,Date,Methods,我正在创建一个接收当前日期和明天日期的程序。一切正常,但当我试着在第4个月进入第30天,而不是把它作为一个月的最后一天,并进入下个月,它只是增加了一天,并返回31。我后来发现,为每个月设置最大天数的方法是将最大天数返回为0。当我尝试将方法中的代码放入 actionPerformed 它工作得很好,但在我让它不断返回最大天数为零的方法中,我尝试使用不同的变量和其他东西,但没有任何效果 这是我的密码: import java.awt.*; import java.awt.event.*; imp
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我无法摆脱我创建并付诸实施的方法,这是一个赋值,必须这样做。
必须存储
maxiDay(todMonth、maxDay、todYear)的返回值代码>在适当的变量中
maxiDay
方法正在更改day
参数的本地值。在maxiDay
之外,此类更改将不存在
实际上,将maxDay
传递给maxiDay
没有任何意义,因为它是一个未初始化的变量,没有被更改。在java中,参数传递是通过值进行的,即。e、 ,您正在向方法maxiDay
传递maxDay
变量值的副本,然后在maxiDay
内部修改该副本,而不是原始变量。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)....
您在哪里分配maxDay的值?