栈的基本操作
/**
* @program: entrance_exam
* @description: 假如现在你是一名记分员,输入一个字符串数组(比赛情况),按如下规则积分:
* 1.若果该字符串时数字,代表当轮的得分情况;
* 2.若该字符串是“+”,代表当轮比赛得分为上两轮之和;
* 3.若该字符串是“C”,代表上一轮的得分无效;
* 4.若该字符串是“D”,代表当轮比赛得分为上一轮得分的两倍。
* 你需要得出最后的得分情况并且返回结果
* @author: TAO
* @create: 2018-05-20 08:10
**/
import java.util.Scanner;
import java.util.Stack;
/**
* 算法思想:先创建一个栈,然后将得分情况依次入栈,出栈
* */
public class Exercise6 {
public static void main(String[] args) {
System.out.print("输入进行的轮数:");
Scanner scanner=new Scanner(System.in);
int round=scanner.nextInt();
System.out.println("输入得分情况:");
String str=scanner.next();
int point=points(str,round);
System.out.println(point);
}
private static int points(String str, int round) {
Stack<Integer> stack=new Stack<>();
for(int i=0;i<round;i++){
//是数字,则入栈
if(str.charAt(i)>'0'&&str.charAt(i)<='9'){
stack.push(Integer.parseInt(String.valueOf(str.charAt(i))));
continue;
}
//是操作符,则计算当前总得分
if(str.charAt(i)=='+'){
int j=stack.peek();//取出栈顶元素
int m=stack.pop();
int k=stack.peek();
stack.push(m);
stack.push(j+k);
continue;
}
if(str.charAt(i)=='C'){
stack.pop();continue;}
if(str.charAt(i)=='D') {
int l = stack.peek() * 2;
stack.push(l);
}
}
int sum=0;
for(int i:stack)
sum+=i;
return sum;
}
}
在本操作中,可以用switch case语句来代替for,能达到同样的效果。