【问题标题】:Math operations conditional statement数学运算条件语句
【发布时间】:2013-10-14 14:48:12
【问题描述】:
public class Eval {
    public static void main(String[] args) {

        int operand1;
        char exp1;
        int operand2;

        if (args.length != 3 ) {
            System.err.println("*** Program needs 3 arguements***");
            System.err.println("Usage: java Eval int1 exp int2");
            System.exit(1);
        }

        operand1 = Integer.parseInt(args[0]);

        exp1 = args[1].charAt(0);

        operand2 = Integer.parseInt(args[2]);


        System.out.print(args[0] + args[1] + args[2] + "=");

        switch(exp1){
            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(" Error.Invalid operator.");
        }
      }
    }

这是一个进行数学运算的程序。目前程序可以做任何事情,除了乘以整数,为什么会发生这种情况?此外,为什么 (Usuage: java Eval) 部分是必要的——没有它就无法工作。有没有办法避免这样做?最后,为什么需要 args。对于这么多问题我很抱歉,但我不想盲目地编写一个对我实际在做什么没有清楚了解的程序。非常感谢您的所有帮助,再次为这么多问题感到抱歉!

【问题讨论】:

  • 坦率地说,您在这里提出了两个不同的问题。对于 args 是什么,您可以简单地阅读任何基本的 Java 教程。
  • 你试过调试吗?当你说乘法不起作用时,你是什么意思?

标签: java math conditional statements


【解决方案1】:

乘法的问题不在于 Java,而在于命令行本身。 * 字符在命令行中是特殊的,所以在命令行中转义它应该没问题:

$ java Eval 6 * 9
*** Program needs 3 arguements***
Usage: java Eval int1 exp int2
$ java Eval 6 \* 9
6*9=54

这里需要 args,因为 Java 接受命令行参数并通过 main 参数 args 将它们传递给您的程序。

你必须说java Eval,因为你真的在运行程序java——JVM本身。它的第一个参数是包含要运行的main 方法的类。所有其他命令行参数都传递给mainargs 参数。

Java tutorial on the subject 解释了命令行参数的工作原理。

【讨论】:

  • 看来,当使用 Windows 命令提示符时,使用单引号是唯一有效的方法(我发现); \* 没有,而是扩展到 \ 根文件夹中的所有文件。顺便说一句,您链接的 Java 教程没有解释任何有关通配符扩展的内容。在 Un*x 类型的系统上,这当然不是 Java 问题,因为 shell 在 Java 看到之前处理了 *。附言我使用的是从 Oracle 下载的 Java,但其他平台的行为可能有所不同。
  • 谢谢,如果我添加这个语句 if ( (args[1] == "/" ) && (args[2] == "0" ) ) { System.out.println("不能被零除"); } else { 在切换之前我只得到“不能除以零和线程主线程中的异常
  • @user2827494 您可以使用if 进行测试,也可以将实际除法包含在try-catch 块中以捕获ArithmeticException。我会用if 测试参数,这样你就可以自己检测这个案例。但是,如果您使用if,请将您的String 值与Stringequals 方法进行比较,而不是==
  • @user2827494 如果您使用if,请不要使用字符串比较来比较数字。如果您输入"00" 作为参数之一,args[2] == "0" 或(更好)args[2].equals("0") 将不会捕获它,但程序仍会尝试除以零。而是等到您致电parseInt,然后检查operand2 == 0
猜你喜欢
  • 2021-09-28
  • 1970-01-01
  • 2023-03-10
  • 2020-08-19
  • 2011-02-18
  • 2023-04-05
  • 1970-01-01
  • 2020-07-06
  • 2012-04-19
相关资源
最近更新 更多