我试图制作一个程序,计算今天和出生日之间的天数(好吧,我还在学习,所以这个想法不是很明亮)。 程序从键盘获取用户写入的日期并计算稍后输出的差异。我做了一个getdifference方法来计算。
问题是,我需要一个日,月和年的变量(由用户输入),稍后由getdifference方法使用。 我知道,方法中的变量是局部的,所以eclipse告诉我将它们转换为静态变量 - 我猜这不是最好的主意,因为它们(至少我认为是)启动为默认值和答案总是0。
问题是 - 如何创建一个可能不是静态的值并且可以在方法中使用?我曾经尝试过安装者,吸气剂,但我认为这可能是一种更简单的方法,但却无法找到它。我很久以前就已开始编码了,所以任何方向和提示都会受到赞赏,因为老实说,我不认识任何java开发人员,所以不能只是给别人检查代码。
public class HowManyDaysTest {
static String yearinStr;
static String monthinStr;
static String dayinStr;
static String strLong;
static long daysBetween;
Temporal birthday;
public void getDifference() {
LocalDate today = LocalDate.now();
try{
birthday = LocalDate.of(Integer.valueOf(dayinStr),Integer.valueOf(monthinStr), Integer.valueOf(yearinStr));
}
catch(NumberFormatException ex) {
System.out.println("Error");
}
try{
daysBetween = ChronoUnit.DAYS.between(birthday, today); }
catch(NullPointerException e) {
System.out.println("Error"); }
strLong = Long.toString(daysBetween);
System.out.println(strLong);
System.out.println(daysBetween);
System.out.println(birthday);
}
public HowManyDaysTest() {
JFrame frame= new JFrame("How many days?");
JLabel question= new JLabel("Please enter your date of birth");
JTextField d = new JTextField("DD");
JTextField m = new JTextField("MM");
JTextField y = new JTextField("YYYY");
JLabel ans= new JLabel();
frame.setVisible(true);
frame.setSize(500, 500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(question,BorderLayout.NORTH);
frame.add(d,BorderLayout.WEST);
frame.add(m,BorderLayout.CENTER);
frame.add(y,BorderLayout.EAST);
frame.add(ans,BorderLayout.SOUTH);
d.addFocusListener(new FocusListener() {
@Override
public void focusGained(FocusEvent arg0) {
d.setText("");
}
@Override
public void focusLost(FocusEvent e) {
// TODO Auto-generated method stub
}
});
m.addFocusListener(new FocusListener() {
@Override
public void focusGained(FocusEvent arg0) {
m.setText("");
}
@Override
public void focusLost(FocusEvent e) {
// TODO Auto-generated method stub
}
});
y.addFocusListener(new FocusListener() {
@Override
public void focusGained(FocusEvent arg0) {
y.setText("");
}
@Override
public void focusLost(FocusEvent e) {
// TODO Auto-generated method stub
}
});
d.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dayinStr = d.getText();
Integer.parseInt(dayinStr);
}
});
m.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
monthinStr = m.getText();
}
});
y.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
yearinStr = y.getText();
odp.setText(strLong);
}
});
}
public static void main(String[] args) {
HowManyDaysTest app = new HowManyDaysTest();
app.getDifference();
}
}
答案 0 :(得分:3)
将日,月和年文本字段声明为实例变量,并使用getDifference()
方法访问它们。