2

所以,这个问题是基本的。在下面的代码中,当我传递命令行参数时java CommandLineDemo 3 5 *,我当前目录中的文件名被列出。在谷歌做一些研究我发现我们应该在命令行中*提供。'*'

我的问题是,如何修改我的代码以使其'*'在命令行中接受并执行operand1operand2

class CommandLineDemo {
    public static void main(String[] args) {
        int operand1 = Integer.parseInt(args[0]);
        int operand2 = Integer.parseInt(args[1]);
        char theOperator = args[2].charAt(0);
        System.out.print(args[0] + args[2] + args[1] + " = ");
        switch(theOperator) {
            case ('+'):
                System.out.println(operand1 + operand2); break;
            case ('-'):
                System.out.println(operand1 - operand2); break;
            case ('*'):
                System.out.println(operand1 * operand2); break;
            case ('/'):
                System.out.println(operand1 / operand2); break;
            default:
                System.out.println("Invalid Operator selected");
        }
    }
}
4

3 回答 3

1

您可以尝试使用以下修改后的代码将命令行参数作为单个字符串(例如:“2 3 +”)传递。

import java.util.Arrays;

class CommandLineDemo {

    public static void main(String[] args) {

        String strArray = Arrays.toString(args);
        strArray = strArray.replace("[", "").replace("]", "").replaceAll("[, ]", "");
        String[] splits = strArray.split("");

        int operand1 = Integer.parseInt(splits[1]);
        int operand2 = Integer.parseInt(splits[2]);
        char theOperator = splits[3].charAt(0);

        System.out.print(splits[1] + " " + splits[3] + " " + splits[2] + " = ");

        switch(theOperator) {
            case ('+'):
                System.out.println(operand1 + operand2); break;
            case ('-'):
                System.out.println(operand1 - operand2); break;
            case ('*'):
                System.out.println(operand1 * operand2); break;
            case ('/'):
                System.out.println(operand1 / operand2); break;
            default:
                System.out.println("Invalid Operator selected");
        }
    }
}

用法和输出如下所示:

C:\Users\sarath_sivan\Desktop>java CommandLineDemo "2 3 +"
2 + 3 = 5

C:\Users\sarath_sivan\Desktop>java CommandLineDemo "2 3 -"
2 - 3 = -1

C:\Users\sarath_sivan\Desktop>java CommandLineDemo "2 3 *"
2 * 3 = 6

C:\Users\sarath_sivan\Desktop>java CommandLineDemo "2 3 /"
2 / 3 = 0

C:\Users\sarath_sivan\Desktop>java CommandLineDemo "2 3 a"
2 a 3 = Invalid Operator selected

C:\Users\sarath_sivan\Desktop>
于 2013-03-19T06:44:18.877 回答
0

*是 shell 中的元字符,这意味着它具有特殊含义。\因此,您需要使用No need to modify code来转义它,而只需键入\*意味着*

于 2013-03-19T04:45:54.987 回答
0

你不需要扩展你的程序。*原样传递'*'是因为shell(或者更准确地说是Linux shell,对windows cmd :p 知之甚少)会进行文件名扩展,如果*直接传递,它将被扩展为当前目录下的所有文件。'*'防止这种情况并*作为命令行参数传递给您的程序。

于 2013-03-19T04:46:52.930 回答