【发布时间】:2015-09-13 08:20:45
【问题描述】:
此代码是 prifix 的计算器。 第一个输入表示要计算的行数, 然后输入表达式。
例如) 2\n 12+3*\n 31/2-4*2+\n
它在 Eclipse 中运行良好,但在评分站点中不起作用。 评分网站说
异常:java.util.NoSuchElementException 也许在:在 Calculation.main(Calculation.java:16)
第 16 行是 'String string=scan2.nextLine();'
但我不知道哪里错了。
import java.util.*;
public class Calculation{
public static void main(String[] args){
System.out.print("Enter a number: ");
Scanner scan1=new Scanner(System.in);
int n=scan1.nextInt();
ArrayList<String> input=new ArrayList<String>();
for(int i=0;i<n;i++){
System.out.print("Enter a expression in postfix: ");
Scanner scan2=new Scanner(System.in);
String string=scan2.nextLine();
input.add(i,string);
}
Stack<Integer> stack=new Stack<Integer>();
for(int i=0;i<=input.size()-1;i++){
for(int j=0;j<=input.get(i).length()-1;j++){
if(input.get(i).charAt(j)>=48&&input.get(i).charAt(j)<=57)
stack.push(Integer.parseInt(input.get(i).valueOf(input.get(i).charAt(j))));
else{
int n2=stack.pop();
int n1=stack.pop();
if(input.get(i).charAt(j)=='+')
stack.push(n1+n2);
if(input.get(i).charAt(j)=='-')
stack.push(n1-n2);
if(input.get(i).charAt(j)=='/')
stack.push(n1/n2);
if(input.get(i).charAt(j)=='*')
stack.push(n1*n2);
}
}
int output=stack.pop();
System.out.println(output);
}
}
}
【问题讨论】:
-
评分网站是使用测试用例来检查您的算法还是只是一个在线编译器?
-
不要为同一个输入流打开多个扫描器。并关注clearing the scanner after
nextInt。
标签: java nosuchelementexception