30秒到达战场
您可以添加另一个条件来检查此控制结构中的任何位置。例如,假设您要为程序添加对数函数,并假设该函数的方法签名包含log(double value, double base),则可以添加语句...else if (op == "log") {
log(x, y);}......在您的初始if陈述之后和陈述之前的任何地方else。你甚至可以if用检查这个条件来替换你的初始语句,如果你愿意,可以将当前if语句推送到系列else if语句中。鉴于这种自由度,您设计此程序的最终目标应该是管理复杂性,以便其他人尝试阅读您的代码将很容易理解您的意图。我的意思是,虽然你可以在任何地方添加这个条件,但你应该把它放在最有意义的地方。在我看来,看到你的控制结构首先检查乘法和除法运算符,然后对于加法和减法运算符,然后检查指数/平方根运算符,我会检查对数运算符只是在检查指数/平方根运算符之后,以及在else语句之前。我还建议将指数/平方根操作分成两个单独的else if语句,并为这两个操作定义操作代码,而不是使用空操作代码来定位这些操作。我建议这不仅是为了您的代码清晰和可读性; 还有另一个原因。如果有人理解他们应该将String ""作为操作代码传递给该程序,他们需要了解其内部工作原理。面向对象编程的很大一部分是“信息隐藏”,或试图使您的方法和类可理解而无需知道它们是如何实现的。假设有人想要使用这个程序而不阅读其内部工作原理。如果没有其他人会使用这个程序,假设您想在一年后使用该程序,并且您不希望再次阅读该程序以了解它正在做什么。您只想传递两个值和一个操作码并获得所需的值。在这种情况下,更加用户友好的实现是为每个可能的内部操作提供明确定义的操作码。您可以提供操作代码列表及其功能说明作为文档供您的用户参考,即使这仅仅意味着您自己。作为一个小理由,想象一个用户意外地尝试将String ""作为操作码传递给此方法。在这种情况下,理想的响应是通知用户已将无效的操作码传递给方法,但在当前实现中,该方法将执行平方根或指数操作,具体取决于传入的值。如果用户意外这种行为,他们可能会感到困惑,并且可能会浪费一些时间来试图理解为什么这种方法的行为不像他们期望的那样。另一个小建议是使用String比较函数equals()将传递的操作代码与您正在检查的每个值进行比较。可以在此处找到此函数的文档,并且程序的修订版本如下所示:public void OperatorIndicator(double x, double y, String op){
if (op.equals("+")) {
multiply(x, y);
} else if (op.equals("/")) {
divide(x, y);
} else if (op.equals("+")) {
sum(x, y);
} else if (op.equals("-")) {
difference(x, y);
} else if (op.equals("")){
if (y == 0) {
squareroot(x);
} else {
exponent(x,y);
}
} else {
System.out.println("OPERATOR NOT VALID");
}}