将Calculator类编写成“命令行计算器”程序(Java)

时间:2013-08-26 12:30:05

标签: java command-line-arguments calculator

以下是作业中主程序的相关部分:

public static void main(String [] args) {

        int characters = args.length;
        if (characters < 3) 

            System.out.println("You did not type in a calculation!");

        else if (characters % 2 == 0)

            System.out.println("Invalid number of command line parameters.");

        else {

            Calculathor counter = new Calculathor();
            counter.count(args);
        }
    }
}

我只允许将下面显示的类(计算器)写入作业中的程序中。我只是无法弄清楚如何从计算中获得可打印的结果。

我认为switch语句正在按照预期的方式从用户的输入接收操作符并将其用于使用但我需要其他东西来获得实际结果。

class Calculator {

int result;
int i = 0;

    String[] args;

    void count(String[] args) {


    switch (args[i].charAt(i)) {
    case '+': result = Integer.parseInt(args[i]) +
    Integer.parseInt(args[i+2]);
    break;

    case '-': result = Integer.parseInt(args[i]) -
    Integer.parseInt(args[i+2]);
    break;
    }

System.out.println("\nResult of the calculation " + args[0] + " + " + args[2] + " + " + args[4] + " - " + args[6] + " is " + result);

    }
}

3 个答案:

答案 0 :(得分:0)

你不应该遍历args-Array,并在循环时递增i(例如,通过应用for循环)?

你是否为你的程序提供了足够的cmd参数?

答案 1 :(得分:0)

好吧,我不想做你的任务,但我确实看到了一些可能导致你出现问题的事情:

你永远不会改变i的值:

int i = 0;

这意味着你的switch语句将对第一个字符起作用。例如,如果你的args是:2 + 3,将评估2。由于2既不是+也不是 - 并且因为你的switch语句中没有默认大小写,所以你不会看到任何输出。

您的方法不会返回数字。有关详细信息,请参阅mabbas答案

答案 2 :(得分:0)

以下是一些提示:

Calculathor counter = new Calculathor();

应该是

Calculator counter = new Calculator();

而且,switch statement或多或少是if-elseif-else-statements的替代品(请参阅链接教程以获得澄清)。

您可能希望loop超过每个参数,并检查它是数字还是运算符。例如:

for(String arg: args){
    ///Code 
}

for(int i = 0; i < args.length; i++) {
    //Code
}

在此循环中,您可以使用switch语句检查当前arg是int还是运算符。例如,您可以将i递增多次以在每次迭代时进行一次求和,例如i+=3而不是i++(警告:仔细考虑,这样您就不会得到ArrayIndexOutOfBoundsException

此外,可能不需要charAt,因为每个arg是一个长度为1的字符串(我假设)。如果你有一个大字符串,你可能只想循环args[0]