0

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

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);

    }
}
4

3 回答 3

0

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

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

于 2013-08-26T12:39:27.597 回答
0

好吧,我不想做你的任务,但我确实看到了一些可能给你带来问题的事情:

你永远不会改变 i 的值:

int i = 0;

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

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

于 2013-08-26T12:40:05.423 回答
0

这里有一些提示:

Calculathor counter = new Calculathor();

应该是

Calculator counter = new Calculator();

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

您可能希望遍历每个参数并检查它是数字还是运算符。例如:

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].

于 2013-08-26T12:53:58.173 回答