我试图通过使用命令" java PostFix<来获取文件中的表达式来评估后缀表达式。 in.dat&#34 ;.现在,当我想从用户(即控制台)获取变量的值时,它恰好是从文件读取并给出输入不匹配异常(因为它从文件而不是从控制台读取字符串值)。以下是我的代码的摘录。如何从控制台而不是文件中获取输入?
public class PostFix{
String operators[] = new String[]{"+","-","*","/","_","!","#","^","<","<=",">",">=","==","!=","&&","||","$"};
ArrayList<String> variables = new ArrayList<String>();
ArrayList<Integer> variable_value = new ArrayList<Integer>();
public static void main(String[] args) {
// TODO Auto-generated method stub
PostFix pf = new PostFix();
pf.getVariables();
}
public void getVariables(){
Scanner sc = new Scanner(System.in);
String line = sc.nextLine();
String tokens[] = line.split(" ");
while(sc.hasNextLine()){
System.out.println("in geVariables()");
for(int i = 0; i < tokens.length; i++){
if(!Arrays.asList(operators).contains(tokens[i])){
try{
Integer.parseInt(tokens[i]);
}
catch(Exception e){
//e.printStackTrace();
variables.add(tokens[i]);
System.out.println("Please enter the value of "+tokens[i]);
variable_value.add(sc.nextInt());
}
}
}
}
sc.close();
}
}
错误:
请输入一个
的值 线程&#34; main&#34;中的例外情况java.util.InputMismatchException
在java.util.Scanner.throwFor(未知来源)
在java.util.Scanner.next(未知来源)
在java.util.Scanner.nextInt(未知来源)
在java.util.Scanner.nextInt(未知来源)
在PostFix.getVariables(PostFix.java:51)
在PostFix.main(PostFix.java:16)
in.dat文件的内容:
2 a + b _ *! c c ^ 15 /# - $
值x +值y - != x y&lt; =&amp;&amp; $
答案 0 :(得分:1)
java PostFix < in.dat
表示所有标准输入都将来自in.dat
文件。
您的Java代码不了解此重定向。它只是从System.in
(即标准输入)读取,这通常意味着键盘。
因此,解决方案是简单地让您的代码在没有任何重定向的情况下运行
java PostFix