以任何顺序接受用户的任何数据类型(int、float、string)

问题描述 投票:0回答:4

在 Java 中获取 StdInput 和 StdOutput 的语法应该是什么?

我需要从用户那里获取输入,这些输入可以是任何顺序和任何数据类型(int、float、string)。我的代码就是这样,但它不允许灵活地以随机顺序接受数据类型。

Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
double y = sc.nextDouble();
sc.nextLine();
String s = sc.nextLine();

System.out.println("String: " + s);
System.out.println("Double: " + y);
System.out.println("Int: " + x);

无论数据类型如何,如何以任意顺序获取输入?

java java.util.scanner
4个回答
2
投票

这取决于您想要输入什么。

但是您可以做的一件事是将输入作为字符串,然后检查字符串的内容。例如,您可以使用

parseInt()
parseDouble()
方法对数据类型进行跟踪和错误。像这样的东西:

try {
    // Try to parse it as an integer
    Integer.parseInt(input);
}
catch (NumberFormatException exc) {
    try {
        // Try to parse it as a double
        Double.parseDouble(input);
    }
    catch (NumberformatException exc) {
        // Else, it's a string
    }
}

但是,下面有一个更优雅的方式:

Scanner sc = new Scanner(System.in);
while (true) { // Some condition
    if (sc.hasNextInt()) {
        int i = sc.nextInt();
        System.out.println("int: " + i);
    }
    else if (sc.hasNextDouble()) {
        double d = sc.nextDouble();
        System.out.println("double: " + d);
    }
    else {
        String s = sc.next();
        System.out.println("string: " + s);
    }
}

请注意,小数点分隔符取决于区域设置。


0
投票

如果您想确定任意类型的数据类型,您唯一的选择(使用扫描仪时)是使用

nextLine()
(或
next()
)。这些方法返回一个字符串,您可以将其解析为所需的数据类型,例如:

String s = sc.nextLine();
// For an integer
int i = Integer.parseInt(s);
// For a double
double i = Double.parseDouble(s);

0
投票

你可以做类似的事情,

Scanner in = new Scanner(System.in);
in.useDelimiter(" ");
while(in.hasNext()) {
    String s = in.next();
    try {
        Double d = Double.valueOf(s);
        d += 1;
        System.out.print(d);
        System.out.print(" ");
    } catch(NumberFormatException e) {
        StringBuffer sb = new StringBuffer(s);
        sb.reverse();
        System.out.print(sb.toString() + " ");
    }
}

0
投票

Scanner
hasNextInt
hasNextDouble
等方法来确定下一个标记是什么类型,因此您可以基于此进行分支:

Scanner sc = new Scanner(System.in);
while (true) {
    if (sc.hasNextInt()) {
        int i = sc.nextInt();
        System.out.println("Int: " + i);
    } else if (sc.hasNextDouble()) {
        double d = sc.nextDouble();
        System.out.println("Double: " + d);
    } else {
        String s = sc.next();
        if (s.equals("END")) break; // stop condition
        System.out.println("String: " + s);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.