2017-04-06 62 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

相关问题