编程语言
首页 > 编程语言> > java-开关中的不可达语句

java-开关中的不可达语句

作者:互联网

因此,我有一个switch语句,它将打开数组中的每个字符串.当遇到运算符时,会将其添加到ArrayList中.但是,由于某种原因,当我编译代码时,它说某些语句“不可到达”.我在下面的代码中用“ //”标记了哪些语句是令人反感的.

提前致谢!

码:

import java.util.*;
import java.io.*;

public class a3
{

public static void main(String[] args) throws FileNotFoundException
{
    ArrayList<Token> tokens = new ArrayList<Token>();
    String[] readTokens;
    Stack<Operator> postStack = new Stack<Operator>();

    String filename = "input.infix";
    String DELIM = " ";

    File in = new File(filename);
    Scanner sc = new Scanner(in);

    while (sc.hasNextLine())
    {
        readTokens = sc.nextLine().split(DELIM);

        for (String s : readTokens)
        {
            switch(s)
            {
                case "(": 
                    tokens.add(new Operator(opType.LPAR));
                    break;

                case ")": 
                    tokens.add(new Operator(opType.RPAR));
                    break; //unreachable

                case "*": 
                    tokens.add(new Operator(opType.MULT));
                    break; //unreachable 

                case "/": 
                    tokens.add(new Operator(opType.DIV));
                    break; //unreachable 

                case "%": 
                    tokens.add(new Operator(opType.MOD));
                    break; //unreachable 

                case "+": 
                    tokens.add(new Operator(opType.ADD));
                    break; //unreachable 

                case "-": 
                    tokens.add(new Operator(opType.SUB));
                    break; //unreachable 

                //Assuming the expression are valid (according to the
                //assignment notes, anything other than operators are
                //operands.
                //
                //NOTE: Even though spaces exist, they will not be
                //interpreted as they are the delim

                default: 
                    tokens.add(new Operand(Integer.parseInt(s)));
                    break; //unreachable 
            }
        }

    String postfix = infix2postfix(tokens);
    int finalResult = evalPostfix(postfix);

    System.out.println(postfix + " = " + finalResult);
    }
}   

public static String infix2postfix(ArrayList<Token> al)
{
    return "";
}

public static int evalPostfix(String post)
{
    return 0;
}

}

解决方法:

我在代码中添加了缺少的类/接口/枚举声明,并且无法重现该错误.问题显然出在您尚未发布的代码中.

这是适合我的编译方法:

import java.util.*;
import java.io.*;

public class Test
{

    public static interface Token
    {
    }

    public static class Operator implements Token
    {
        public Operator(opType type)
        {
        }
    }

    public static enum opType
    {
        LPAR, RPAR, MULT, DIV, MOD, ADD, SUB
    }

    public static class Operand implements Token
    {
        public Operand(int val)
        {
        }
    }

    public static void main(String[] args) throws FileNotFoundException
    {
        ArrayList<Token> tokens = new ArrayList<Token>();
        String[] readTokens;
        Stack<Operator> postStack = new Stack<Operator>();

        String filename = "input.infix";
        String DELIM = " ";

        File in = new File(filename);
        Scanner sc = new Scanner(in);

        while (sc.hasNextLine())
        {
            readTokens = sc.nextLine().split(DELIM);

            for (String s : readTokens)
            {
                switch (s)
                {
                    case "(":
                        tokens.add(new Operator(opType.LPAR));
                        break;

                    case ")":
                        tokens.add(new Operator(opType.RPAR));
                        break;

                    case "*":
                        tokens.add(new Operator(opType.MULT));
                        break;

                    case "/":
                        tokens.add(new Operator(opType.DIV));
                        break;

                    case "%":
                        tokens.add(new Operator(opType.MOD));
                        break;

                    case "+":
                        tokens.add(new Operator(opType.ADD));
                        break;

                    case "-":
                        tokens.add(new Operator(opType.SUB));
                        break;

                        // Assuming the expression are valid (according to the
                        // assignment notes, anything other than operators are
                        // operands.
                        //
                        // NOTE: Even though spaces exist, they will not be
                        // interpreted as they are the delim

                    default:
                        tokens.add(new Operand(Integer.parseInt(s)));
                        break;
                }
            }

            String postfix = infix2postfix(tokens);
            int finalResult = evalPostfix(postfix);

            System.out.println(postfix + " = " + finalResult);

        }
    }

    public static String infix2postfix(ArrayList<Token> al)
    {

        return "";
    }

    public static int evalPostfix(String post)
    {

        return 0;
    }

}

标签:break,switch-statement,java
来源: https://codeday.me/bug/20191030/1965787.html