2017-04-06 67 views
0

我試圖使該計算日今天誕生之日之間的天數的程序(當然,我還在學習這樣的想法是不是很亮) 。 該程序從用戶的鍵盤上獲取日期,並計算稍後輸出的差異。我已經做了一個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(); 

} 

} 
+1

而不是使用**靜態**將它們定義爲私有並生成** setters **和** getters ** .... –

+0

這是一個旁邊,'LocalDate.of()'參數的順序'是年,月,日。你不小心把它們倒過來。 –

+0

@ΦXocę웃Пepeúpaツ,而我是贊成的getter和setter的一般多,我會矯枉過正認爲他們對於僅在同一類中使用的專用實例變量。我同意變量不應該是靜態的。 –

回答

3

聲明日,月,年的文本字段的實例變量和方法getDifference()訪問它們。

+0

是的,我已經做了(更改的變量私人而不是靜態的),但我已經檢查 - 值被填充爲空,並且getdifference(),因爲dayinstr等爲null方法返回錯誤。填充文本字段沒有任何變化:( – pavelcik

+0

您在創建對象後不久調用getDifference()方法,而是創建一個按鈕並在用戶單擊它時調用getDifference()方法。 – Jaf

相關問題