第一次卡在了输入问题上:
输入n=input.nexInt()
之后紧跟着输入String temp = input.nextLine();
这时temp会读取nextInt之后的空字符,导致读入一直为空,而出错
实际上半小时之内就完成了,但是开始并没有找到这个错误,而是想要还一种处理方法(把数字改为字符串处理之类的),但是换方法之后的结果依然如此,从而在输入上发现这个问题
import java.util.*;
public class Test {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
int n = Integer.parseInt(input.nextLine());
// int n =1;
// String temp = "5x6/5x4";
for(int i =0;i< n;i++){
String temp = input.nextLine();
if(check(temp))
System.out.println("Yes");
else
System.out.println("No");
}
}
public static boolean check(String s){
char[] c = s.toCharArray();
int n = c.length;
String[] stack = new String[n];
String[] result = new String[n];
int top =0;
int rtop=0;
//先运算乘除
for(int i =0;i<n;i++){
if(c[i] == 'x'){
stack[top-1] = ""+(Integer.parseInt(stack[top-1])* Character.getNumericValue(c[i+1]));
i++;
continue;
}
if(c[i] == '/'){
stack[top-1] = ""+(Integer.parseInt(stack[top-1])/Character.getNumericValue(c[i+1]));
i++;
continue;
}
stack[top++] = c[i]+"";
}
//在运算加减
for(int i =0;i<n;i++){
if(Objects.equals(stack[i], "+")){
result[rtop-1] = ""+(Integer.parseInt(result[rtop-1]) + Integer.parseInt(stack[i+1]));
i++;
continue;
// stack[top-1] = stack[top-1]*c[i+1];
}
if(Objects.equals(stack[i], "-")){
result[rtop-1] = ""+(Integer.parseInt(result[rtop-1]) - Integer.parseInt(stack[i+1]));
i++;
continue;
//stack[top-1] = stack[top-1]/c[i+1];
}
result[rtop++] = stack[i];
}
//System.out.println(result[0]);
if(Integer.parseInt(result[0]) == 24)
return true;
return false;
}
}
//9+3+4x3
//5+4x5x5
//7-9-9+8
//5x6/5x4
//8/5+6x9