在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);
无论数据类型如何,我如何以任何顺序获取输入?
答案 0 :(得分: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);
}
}
请注意,小数点分隔符取决于区域设置。
答案 1 :(得分:0)
如果要确定任意类型的数据类型,则唯一的选择(使用扫描程序时)是使用nextLine()
(或next()
)。这些方法返回一个String,您可以将其解析为所需的数据类型,例如:
String s = sc.nextLine();
// For an integer
int i = Integer.parseInt(s);
// For a double
double i = Double.parseDouble(s);
答案 2 :(得分:0)
你可以使用扫描仪的hasNext()方法。只需检查API: https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int x;
double y;
String s;
while(sc.hasNext()) {
if (sc.hasNextInt()) {
x = sc.nextInt();
} else if (sc.hasNextDouble()) {
y = sc.nextDouble();
} else if (sc.hasNextLine()) {
y = sc.nextNextLine();
}
// and so on...
}
}
}
答案 3 :(得分: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);
}
}
答案 4 :(得分: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() + " ");
}
}