扫描仪无法按预期工作

时间:2016-03-03 02:07:24

标签: java java.util.scanner

嘿大家我正在研究一个带有java的个人项目(我目前还在学习这门语言)并带着一两个问题来到这里。

第一个问题

在我的try块中,我被允许要求用户输入要分配给变量的值,并且在我的catch块中,如果用户输入错误的值或跳过该条目,它会抛出异常并通知用户已设置默认值。这是一个正确的方法吗?

代码示例

(注意:我有很多这些try / catch语句的工作方式与下面方法中的方法相同。)

 try {
        System.out.print("Please enter a value for price of computer: ");
        price = sc.nextFloat();

    } catch (InputMismatchException ex) {    //Catch skip or error
        System.out.println("You entered an invalid value for price, it is assumed to be 0.");
        price = 0F;   //Assign a default value
    }

第二个问题

当我编译并执行此操作时,它不允许我输入变量,而是直接跳转到异常。我不确定我缺少什么,所以我会喜欢任何建议,再次感谢一个伟大的社区。

3 个答案:

答案 0 :(得分:0)

工作代码:

import java.util.*;

public class InputTest{
    public static void main(String args[]) {
        float price = -1F;
        try {
            Scanner sc = new Scanner(System.in);
            System.out.println("Please enter a value for price of computer: ");
            if (sc.hasNextFloat()){
                price = sc.nextFloat();
            }
        } catch (InputMismatchException ex) {    //Catch skip or error
            System.out.println("You entered an invalid value for price, it is assumed to be 0.");
            price = 0F;   //Assign a default value
        }catch(Exception err){
            err.printStackTrace();
        }
        System.out.println("price:"+price);

    }
}

输出:

D:\Study\Java>java InputTest
Please enter a value for price of computer:
1
price:1.0

D:\Study\Java>java InputTest
Please enter a value for price of computer:
2
price:2.0

D:\Study\Java>java InputTest
Please enter a value for price of computer:
3.3
price:3.3

从您的代码段更改:

在为float变量赋值之前,我添加了sc.hasNextFloat()。从控制台读取值时,请勿在输入值中输入f或F.我提供了样本输入值以便更好地理解。

答案 1 :(得分:0)

此代码在大多数情况下看起来都是正确的。虽然,我假设您的sc变量是通过多个输入相同的扫描程序对象(如您所述),因此可能无法清除其缓冲区,因为每次使用sc.nextFloat()方法时都会假设它。

您可以在再次使用之前重新初始化Scanner对象,以避免这种情况。如果我没记错,就无法明确清除扫描仪对象的缓冲区,因此必须重新初始化以“清除”它。

您还可以使用sc.hasNextFloat()来验证是否已输入浮点值。

您还可以使用和Float.parseFloat(sc.nextLine())在输入新行之前捕获整个输入。

答案 2 :(得分:0)

好的,我已经找到了我的错误,感谢stackoverflow的每个人的帮助。

当我初始化我的Scanner变量时,我这样做:Scanner sc = new Scanner(" System.in")

这意味着我希望它读取字符串而不是用户的输入,因此它会自动抛出异常。

要解决此问题,我删除了引号,现在它正常运行!

再次感谢大家!