栈操作、四则运算、括号匹配

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


猜你喜欢

转载自blog.csdn.net/sir_ti/article/details/80379865
今日推荐