此代码是prifix的计算器。 第一个输入表示要计算的行数, 然后输入表达式。
e.g) 2 \ n 12 + 3 * \ n 31 / 2-4 * 2 + \ n
它在日食中效果很好但在得分网站上没有用。 得分网站说了
异常:java.util.NoSuchElementException也许at:at 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);
}
}
}
答案 0 :(得分:0)
当你使用
时String str=scan1.nextLine();
它只会读取您的输入,直到空格之后才会读取字符串输入,只需使用
String str=scan1.next();
答案 1 :(得分:0)
读取整行以与行结尾保持同步。不要使用其他扫描仪。
int n=scan1.nextInt();
scan1.nextLine();
ArrayList<String> input=new ArrayList<String>();
for(int i=0;i<n;i++){
System.out.print("Enter a expression in postfix: ");
String string=scan1.nextLine();
input.add(i,string);
}
答案 2 :(得分:0)
当您在scan2.nextLine();
未处理之后执行nextInt()
上一次换行时,这就是为什么仍然在缓冲区中的换行符仍然通过scan2.nextLine()
而不是您的新输入读取。
你可以用两种方式处理 -
在第一次scan1.nextLine()
电话后立即执行空nextInt()
。
或使用nextInt()
而不是使用nextLine()
,并使用Integer.parseInt()
将该字符串转换为整数。