java - 这个程序如何在不知道数据类型的情况下接受数据?

标签 java java.util.scanner

这是一个程序,它通过 System.in 输入流检查可用的输入类型,并决定将其存储在变量的数据类型中。该程序的代码是:

import java.util.Scanner;
public class hasNextNumberDemo
{
    public static void main(String args[])
    {
        Scanner in = new Scanner(System.in);
        System.out.print("Enter your Data :");
        if(in.hasNextInt())
            System.out.println("You have entered an Integer as : " + in.nextInt());
        else if(in.hasNextFloat())
            System.out.println("You have entered an Float Value as : " + in.nextFloat());
        else if(in.hasNextDouble())
            System.out.println("You have entered an Double Value as : " + in.nextDouble());
        else 
            System.out.println("Token not an Integer or a real value.");
   }
}

在这里,我们清楚地看到可以通过多个点接受数据:in.nextInt()in.nextFloat() 甚至 in。 nextDouble(),但所有的前面都有一个语句来检查输入的数据类型(尚未输入 [通过 hasNextInt()hasNextFloat()hasNextDouble()]).

我的问题是程序如何在接受数据之前决定下一个标记是什么数据类型?

进一步,如果hasNextInt()hasNextFloat()hasNextDouble()触发数据的输入,而不是in .nextInt() or in.nextFloat() or in.nextDouble(),那怎么没有3个输入数据的提示3 个不同的函数调用(hasNextInt()hasNextFloat()hasNextDouble())?

最佳答案

扫描器将尝试解析下一个输入,如果成功则数据类型适合。

例如,看一下 hasNextFloat() 的实现:

public boolean hasNextFloat() {
    setRadix(10);
    boolean result = hasNext(floatPattern());
    if (result) { // Cache it
        try {
            String s = processFloatToken(hasNextResult);
            typeCache = Float.valueOf(Float.parseFloat(s));
        } catch (NumberFormatException nfe) {
            result = false;
        }
    }
    return result;
}

如您所见,涉及多个步骤:

  1. 检查输入是否与 float 模式匹配,即它看起来像 float 吗?
  2. 如果输入看起来像一个 float ,尝试解析它。如果失败则不是 float ,如果有效则至少是 float (可以是 double 甚至是 int 作为好吧,这就是为什么您发布的代码会按顺序检查 int、float 和 double)。

关于java - 这个程序如何在不知道数据类型的情况下接受数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37696831/

相关文章:

java.sql.SQLException : Column not found 异常

onClick后的java空指针异常

java - 创建工资/奖金计算器

Java-将文件中的所有整数添加到ArrayList

java - 验证扫描仪的输入: is it an integer and within a certain number range?

java - EOFException 与 FileUtils.copyURLToFile

java - 我们如何确保在集群环境中有一个类的单个实例

java - 从用户 java 读取一行文本

java - 在java中使用扫描仪的问题

java - 创建字符/字符数组列表