使用java.util.Scanner解析基本类型

时间:2010-05-29 19:46:19

标签: java swing

我是java的新手,请原谅noob问题。

我创建了一个swing应用程序,在JTextFields中基本上有三个输入字符串: loanAmount,interestRate和loanYears以及带有EventAction的单个提交按钮。

我正在尝试使用java.util.Scanner来解析我可以在计算中使用的基本类型的输入。

我在NetBeans中收到错误,表明我的变量无法识别? 我不应该打电话给System.in吗?

private void submitButtonActionPerformed(java.awt.event.ActionEvent evt) {
    Scanner keyInput = new Scanner(System.in);
    while (true)
        try{
            double amount = keyInput.nextDouble(loanAmount.getText());
            double interest = keyInput.nextDouble(interestRate.getText());
            int years = keyInput.nextInt(loanYears.getText());

        } catch (NumberFormatException nfe){

        }
}

3 个答案:

答案 0 :(得分:2)

不要担心提出更简单的问题,我们会一直得到它们。如果不是为了简单的问题,实际上,我永远不会回答任何问题。

我可以立即看到您的代码存在三个问题:

  1. 您正在捕获异常,但随后将其丢弃。有时候,从用户的角度来看,您不想采取任何操作来响应异常,但作为程序员,您需要知道。试着说nfe.printStackTrace(System.err);

  2. 扫描仪不是您想要的。 Double.valueOf(..)会更直接。

  3. 现在,关于您的实际问题:您的三个变量超出try块末尾的范围。尝试在声明KeyInput的地方声明它们。

  4. private void submitButtonActionPerformed(java.awt.event.ActionEvent evt) {                                             
        double amount, interest;
        int years;
        while (true) {
            try {
                amount = Double.valueOf(loanAmount.getText());
                interest = Double.valueOf(interestRate.getText());
                years = Integer.valueOf(loanYears.getText());
    
            } catch (NumberFormatException nfe){
                if (DEBUG) nfe.printStackTrace(System.err);
                return;
            }
        }
        // Your values of amount, interest and years will be available here.
        // Past this last curley brace, however, they will go out of scope.
        // If you want them to stick around for as long as the new object,
        // define them as class fields.
    }

答案 1 :(得分:0)

扫描仪用于命令行。您需要访问输入字段并获取其值并将其转换为int。

试试这样:

private void submitButtonActionPerformed(java.awt.event.ActionEvent evt) {                                             
        double amount = Double.valueof(loanAmount.getText());
        double interest = Double.valueof(interestRate.getText());
        int years = Double.valueof(loanYears.getText());
}

答案 2 :(得分:0)

不,你不应该;)扫描程序从Stream读取数据,System.in是一个从控制台读取字节而不是从swing组件读取字节的流。

这里的想法是解析文本字段中的字符串:

private void submitButtonActionPerformed(java.awt.event.ActionEvent evt) {                                             
    try {
       double amount = Double.parseDouble(loanAmount.getText());
       double interest = Double.parseDouble(interestRate.getText());
       int years = Integer.parseInt(loanYears.getText());
     } catch (NumberFormatException nfe){

     }
}