我試圖使該計算日今天誕生之日之間的天數的程序(當然,我還在學習這樣的想法是不是很亮) 。 該程序從用戶的鍵盤上獲取日期,並計算稍後輸出的差異。我已經做了一個getdifference方法來計算它。如何使變量通過其他方法可用
的問題是,我需要爲它後來被getdifference法天,月,年(由用戶輸入)的變量。 我知道,那裏面的方法是局部變量,所以日食告訴我,將它們轉換成靜態變量 - 我想這是不是最好的辦法,因爲他們(至少我是這麼認爲的)發起的爲默認值,而答案將永遠是0
的問題是 - 怎麼可能,使可能不是靜態的,並且可以在方法中使用的價值?我已經嘗試過setter,getters,但我認爲這可能是一個更簡單的方法,就是找不到它。我不是很久以前就開始編寫代碼,所以任何方向和技巧都會被讚賞,因爲說實話我不知道任何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();
}
}
而不是使用**靜態**將它們定義爲私有並生成** setters **和** getters ** .... –
這是一個旁邊,'LocalDate.of()'參數的順序'是年,月,日。你不小心把它們倒過來。 –
@ΦXocę웃Пepeúpaツ,而我是贊成的getter和setter的一般多,我會矯枉過正認爲他們對於僅在同一類中使用的專用實例變量。我同意變量不應該是靜態的。 –