【问题标题】:Method that takes user input接受用户输入的方法
【发布时间】:2015-01-08 22:45:36
【问题描述】:

大家好,我的名字是 Fyree,我在学校作业中遇到问题,我需要创建一个从用户那里获取值的方法,然后通过 computeRate() 方法打印出一行显示计算的速率。由于程序将用户输入值作为字符串,因此我无法在计算速率公式中使用它,因为它们不是整数。

我的问题是能够将字符串转换为整数,并让computeRate() 能够正确获取用户输入的六个值中的两个(intev5 / inbv 部分......)。其余值仅用于我需要在此之后制作的条形图,这是另一个问题的问题。出于某种原因,它无法找到上面列出的这两个变量,即使在它能够找到用户输入值的字符串版本之前(但当然无法正确计算速率,因为它们不是整数)。所以这是我的代码:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Rate_Graph extends JApplet implements ActionListener
{ 
JLabel bv, ev1, ev2, ev3, ev4, ev5;
JTextField bv1, ev_1, ev_2, ev_3, ev_4, ev_5;
JButton go, add1, add2, add3, add4, add5;
public void init()
{
    setLayout(new FlowLayout());

    bv = new JLabel("Enter beginning value:");
    bv1 = new JTextField(5);


    ev1 = new JLabel("Enter year 1 value:");
    ev_1 = new JTextField(5);

    ev2 = new JLabel("Enter year 2 value:");
    ev_2 = new JTextField(5);

    ev3 = new JLabel("Enter year 3 value:");
    ev_3 = new JTextField(5);

    ev4 = new JLabel("Enter year 4 value:");
    ev_4 = new JTextField(5);

    ev5 = new JLabel("Enter year 5 value:");
    ev_5 = new JTextField(5);

    int intbv = Integer.parseInt(bv1.getText());
    int intev1 = Integer.parseInt(ev_1.getText());
    int intev2 = Integer.parseInt(ev_2.getText());
    int intev3 = Integer.parseInt(ev_3.getText());
    int intev4 = Integer.parseInt(ev_4.getText());
    int intev5 = Integer.parseInt(ev_5.getText());

    go = new JButton("Add!");
    go.addActionListener(this);
    add(bv); add(bv1);
    add(ev1); add(ev_1);
    add(ev2); add(ev_2);
    add(ev3); add(ev_3);
    add(ev4); add(ev_4);
    add(ev5); add(ev_5);
    add(go);
}
public void actionPerformed(ActionEvent event)
{
        Object src = event.getSource(); 
        if(src==go){
            String strbv = bv1.getText();
            String strev1 = ev_1.getText();
            String strev2 = ev_2.getText();
            String strev3 = ev_3.getText();
            String strev4 = ev_4.getText();
            String strev5 = ev_5.getText();
        }
}

public double computeRate()
{

    double rate = (Math.pow(intev5 / intbv, 1.0 / 5.0) - 1);
    return rate;
    System.out.println(rate);
}
}

任何帮助将不胜感激。

【问题讨论】:

  • System.out.println(rate);返回后就没用了

标签: java math methods action bluej


【解决方案1】:

你在return语句后面有System.out.println(rate)...这是一个无法访问的语句,所以你必须把它去掉或者放在return之前。

intev5 和 inbv 不可见,因为它们是在 init() 方法内声明的,因此它们仅在该方法的范围内可见。

如果您想在computeRate() 中使用这些变量,一种方法是在init() 之外声明它们:

JLabel bv, ev1, ev2, ev3, ev4, ev5;
JTextField bv1, ev_1, ev_2, ev_3, ev_4, ev_5;
JButton go, add1, add2, add3, add4, add5;
int intbv, intev1, intev2, intev3, intev4, intev5; //Declare outside of init()
public void init()
{
    ...

    intbv = Integer.parseInt(bv1.getText());
    intev1 = Integer.parseInt(ev_1.getText());
    intev2 = Integer.parseInt(ev_2.getText());
    intev3 = Integer.parseInt(ev_3.getText());
    intev4 = Integer.parseInt(ev_4.getText());
    intev5 = Integer.parseInt(ev_5.getText());

    ...
}

【讨论】:

【解决方案2】:

当您在代码块或方法中声明变量时,该变量仅是该代码块中的visible。

例如

public void init()
{
...

    int intbv = Integer.parseInt(bv1.getText());

intbv 仅在 init 中可见

同样

if(src==go){
   String strbv = bv1.getText();

strbv 仅在此 if 语句中可见。

如果您需要在其他方法中使用变量,则将它们设为字段(类变量),就像您对 JLabel 和其他 J* 变量所做的那样。

注意 正如其他人所提到的,将代码放在 return 语句之后会导致错误。

【讨论】:

【解决方案3】:
Try this ..It can help you;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Rate_Graph extends JApplet implements ActionListener
{ 
JLabel bv, ev1, ev2, ev3, ev4, ev5;
JTextField bv1, ev_1, ev_2, ev_3, ev_4, ev_5;
JButton go, add1, add2, add3, add4, add5;
 int intbv, intev1,intev2, intev3, intev4, intev5;

@Override
public void init()
{
    setLayout(new FlowLayout());

    bv = new JLabel("Enter beginning value:");
    bv1 = new JTextField(5);
     bv1.setText("5");
    ev1 = new JLabel("Enter year 1 value:");
    ev_1 = new JTextField(5);
 ev_1.setText("5");
    ev2 = new JLabel("Enter year 2 value:");
    ev_2 = new JTextField(5);
 ev_2.setText("5");
    ev3 = new JLabel("Enter year 3 value:");
    ev_3 = new JTextField(5);
 ev_3.setText("5");
    ev4 = new JLabel("Enter year 4 value:");
    ev_4 = new JTextField(5);
 ev_4.setText("5");
    ev5 = new JLabel("Enter year 5 value:");
    ev_5 = new JTextField(5);
 ev_5.setText("5");
   intbv = Integer.parseInt(bv1.getText());
     intev1 = Integer.parseInt(ev_1.getText());
     intev2 = Integer.parseInt(ev_2.getText());
    intev3 = Integer.parseInt(ev_3.getText());
     intev4 = Integer.parseInt(ev_4.getText());
    intev5 = Integer.parseInt(ev_5.getText());

    go = new JButton("Add!");
    go.addActionListener(this);
    add(bv); add(bv1);
    add(ev1); add(ev_1);
    add(ev2); add(ev_2);
    add(ev3); add(ev_3);
    add(ev4); add(ev_4);
    add(ev5); add(ev_5);
    add(go);
}
public void actionPerformed(ActionEvent event)
{
        Object src = event.getSource(); 
        if(src==go){
            String strbv = bv1.getText();
            String strev1 = ev_1.getText();
            String strev2 = ev_2.getText();
            String strev3 = ev_3.getText();
            String strev4 = ev_4.getText();
            String strev5 = ev_5.getText();
        }
}

public double computeRate()
{


    double rate = (Math.pow(intev5 / intbv, 1.0 / 5.0) - 1);
    return rate;

}
}

【讨论】:

  • 这不起作用,因为 int 转换仍在范围内。
猜你喜欢
  • 1970-01-01
  • 2014-05-04
  • 2020-11-13
  • 1970-01-01
  • 1970-01-01
  • 2011-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多