栈的基本操作
/** * @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,能达到同样的效果。