此代码是 prifix 的计算器。 第一个输入表示要计算的行数, 然后输入表达式。
例如) 2\n 12+3*\n 31/2-4*2+\n
它在 Eclipse 中运行良好,但在评分站点中不起作用。 评分网站表示
Exception: java.util.NoSuchElementException Maybe at: at Calculation.main(Calculation.java:16)
line 16 is '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);
}
}
}
最佳答案
问题是当你使用
String str=scan1.nextLine();
它只会读取您的输入,直到空格之后,它不会读取字符串输入,只需使用
String str=scan1.next();
关于java - 使用 Scanner 时出现 NoSuchElementException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32547726/