当前位置: 首页 > 知识库问答 >
问题:

如何处理扫描仪中不正确的用户输入?

高皓
2023-03-14

我正在创建一个用于处理用户输入的类。这样,在其他项目中,我可以从类中调用方法,而不必担心在每个新项目中创建扫描程序

类中将有一个单独的方法来处理不同的变量类型(float、int、String等)。我从浮动类型开始:

import java.util.Scanner;

public class Input {

public static float floatInput() {

    Scanner in1 = new Scanner(System.in);
    float in;

    if (in1.hasNextFloat()) {
        in = in1.nextFloat();
        return in;
    } else {
        System.out.print("Incorrect input type, try again");
        floatInput();
        return 0;
    }
}

这个方法工作得很好,只是它必须在else部分返回一个float。在本例中,它是一个零,因此当输入到计算器(例如)时,零会导致任何输出等于零。

有没有返回空浮点值的方法来克服这个问题?

有没有人对处理不正确的扫描仪输入有更好的建议?

非常感谢。

共有3个答案

潘凯
2023-03-14
public static float floatInput() {

    Scanner in1 = new Scanner(System.in);
    float in = in1.nextFloat();

    while (/*in.isGood()*/) {
        System.out.println("Incorrect input type, try again:");
        in = in1.nextFloat();
    }

    return in;
}

这将防止在后台运行打开的扫描仪等待返回的方法实例时递归调用。

此外,您可以确保输出将具有nextFloat。

但是,您需要找到一种更好的方法来检查浮点值是否正确,例如内部带有解析的try-catch块。hasNextFloat()不会告诉您。

东郭弘方
2023-03-14

不存在“空”浮动。未初始化的浮点值默认为0.0f。如果要返回'in'变量,而不是在else语句中仅返回0,它将返回0.0。

单击此处了解有关Java中基本数据类型的默认值的更多信息。

云令
2023-03-14

您可以将您的输入读取为String并检查它是否是浮点值,否则循环直到它是浮点值或用户感到厌倦:

public static float floatInput() {
    Scanner scanner = new Scanner(System.in);
    System.out.println("Input a float:");
    for(;;){
        try{
            return Float.parseFloat(scanner.next());
        } catch(NumberFormatException e){
            System.out.println("Incorrect input type, try again:");
        }
    }
}
 类似资料:
  • 我正在尝试通过单行输入检索用户输入:例如,使用扫描仪分隔符为Comma5,6,4,8,9。如何使用这种类型的输入检索任意数量的整数?也就是说,不必询问用户希望输入多少个整数。下面是我一直在使用的代码,但是当我想中断时,不能中断while循环。请注意,我保留System.Out以跟踪程序当前运行的位置。令人困惑的是,我可以以这种格式获得用户输入,但程序停止并再次要求用户输入,然后如果输入是一个整数,

  • 作为一项自我分配的练习,我正在尝试编写一个简单的程序,该程序以生日为准,并确定给定日期所在的一周中的哪一天。计划的第一部分决定了年份。我使用扫描仪收集用户输入,然后使用do while循环测试输入是否可用(必须是数字,必须有四位数字),如果输入不符合标准,则重复该循环。我试图进入1998年,这显然是一个数字和四位数,它重复循环,好像我的输入是无效的。我假设do while循环中的某个地方有问题,但

  • 我正在为课堂做作业。由于某种原因,程序完全跳过了用户应该键入变量的部分。我想不出任何理由为什么它会以这种方式运行,因为我的其余代码位于部分之后(它要求诸如和类型之类的东西)工作正常且有序。

  • 我开发了一个字符排序器,我想每次字符串排序后提示用户输入一个新的字符串。我遇到的问题是扫描仪一直在扫描用户的第一个输入。如果我使用scanner.next(),它不会计算输入末尾的空白,这不是解决方案。 这是while循环的开始。一旦代码完成,它将再次从“inputtext”开始。

  • 我是一个初学者,我写了一个java程序,允许你输入n个数字,它只显示最大值、最小值和平均值,如果输入了数字-5,我的程序显示不正确,我需要一些帮助。我想在输入字符串而不是整数时使用try/catch来捕获错误。

  • 问题内容: 请问我关于扫描仪的问题;我在一家小公司工作;我们有一个软件;它生成一个大文本文件;而且我们必须从中得到一些有用的信息; 我想用Java编写一个简单的应用程序以节省时间;你能指导我吗? 例如我要这个输出; 输出量 RFID:25蓝色:562 WifiID:2610 RFID:33 RFID数量:2 例如;这是我的文本文件,因为使用我们的软件生成的每个文件都有14000行:) 我用此源代码