我对使用扫描仪类读取输入有疑问。通常它会这样。如果我使用print而不是println,我可以在同一行中获得输入
public class A {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Enter loan amount: ");
double loanAmount = sc.nextDouble();
}
}
现在我想以其他方式扩展扫描仪的使用,但我无法这样做。
public class A {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String input = "";
double val = 0.0;
System.out.println(""Enter a command push n,add");
Calculator xyz = new Calculator();
while(true) {
input = sc.next();
if(input.equals("push")+val) {
val = sc.nextDouble();
xyz.push(val);
abc.getValues();
}
if(input.equals("add"))
xyz.add();
}
}
}
在上面我想在输入“push”后读取同一行中的值 例如,当我运行上面的代码时,我将得到如下的o / p
Enter a command
push
4
4.0
但我希望o / p为:
Enter a command
push 4
4.0
答案 0 :(得分:0)
每一行都会有一个字和一个双字:
System.out.println("Enter a command");
final String command = sc.next();
final double value = sc.nextDouble();
行可以包含具有可变数量令牌的命令;
使用sc.nextLine()
并手动解析输入:
final String input = sc.nextLine();
eval(input);
eval
类似于:
private void eval(String input) {
String[] parts = input.split("\\s+");
switch (parts[0]) {
case "push": {
final double value = Double.parseDouble(parts[1]);
stack.push(value);
System.out.println(value);
break;
}
case "pop": {
System.out.println(stack.pop());
break;
}
case "add": {
System.out.println(stack.pop() + stack.pop());
break;
}
case "exit": {
hasNext = false;
break;
}
default: {
System.err.println("Invalid command");
break;
}
}
}
最后一个例子演示了一个接受序列的简单解释器,例如:
push 4
push 8
push 10
add
pop
exit
您也可以使用类似于第一个示例的代码来实现相同的目标:
sc.next()
获取实际命令sc.next*
调用以接收特定于每个命令的令牌。 但我认为sc.nextLine()
更易于管理,特别是如果您需要验证输入。
答案 1 :(得分:0)
试试这个: -
public class A{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter a command");
while(true){
String val[]=sc.nextLine().split(" ");
//System.out.println("push "+val[1]);
System.out.println(Double.parseDouble(val[1]));
}
}
}
输出: -
Enter a command
push 4
4.0
push 5
5.0
push 6
6.0
希望它会对你有所帮助。