Java开发之道
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

陷阱17 脱离控制——if语句没加大括号“{”和“}”

在程序中经常需要使用if 等分支结构,实现对程序的流程进行控制,if 语句是程序当中最常用的一种分支结构,可以说要编程就离不开if语句,由此可见if语句的重要性,如果if 语句使用不正确,就会使程序发生逻辑错误,影响整个系统的执行,甚至会造成严重的经济损失。

对于一些刚刚走上编程岗位的程序员,很容易犯这样一个错误,那就是在使用if 语句时不加大括号“{”和“}”,对于一个优秀的程序,应做到简单清晰、易于理解,就这一点而言,不加大括号就已经不可取了,实际上还有更严重的,那就是会导致程序的执行逻辑不正确,从而对整个系统造成影响。

说明

使用if 语句不加大括号,在很大程度上是由于在刚刚学习编程时养成的坏习惯,因为那时经常使用if 语句控制一条语句的执行,if 语句控制一条语句的执行时,是完全可以将大括号“{”和“}”省略的。

没有添加大括号,导致程序发生错误的示例:

计算产品的总金额,只有当产品编号是1008时,才通过产品单价800与产品数量100计算出产品的总金额,并输出产品编号和产品的总金额,否则什么也不做。

    public class BigBracket {
      private int productId = 0;             // 定义成员变量产品ID
      private int price = 0;                 // 定义成员变量产品单价
      private int number = 0;                // 定义成员变量产品数量
      private int totalMoney = 0;            // 定义成员变量产品总金额
      public void outputTotalMoney (int id){// 定义输出信息的方法,形参id是传入的产品编号
          if (id == 1008)                    // 判断传递的参数是否为1008,如果是1008就向下执行
            productId = id;                  // 为成员变量赋值为参数id的值
            price = 800;                     // 为成员变量单价赋值为800
            number = 100;                    // 为成员变量数量赋值为100
            totalMoney = price * number;     // 计算总金额
            System. out. println ("产品ID是"+productId+"的产品");
            System. out. println ("其总金额是:"+totalMoney);
      }
      public static void main (String[] args) {
          BigBracket bracket = new BigBracket ();     // 创建类的实例
          bracket. outputTotalMoney (1001);            // 调用方法,并传递实参1001
      }
    }

运行本示例,程序将在控制台输出如图3.13所示的产品信息,即产品ID是0的产品,而本示例的原意是产品ID是1008才输出,所以结果是错误的。

图3.13 在控制台输出的产品信息

说明

本示例之所以输出如图3.13所示的信息,是由于在使用if语句时,没有在if语句后添加大括号“{”和“}”将黑体字代码括起来,所以导致程序执行了不该执行的语句,因此输出了如图3.13所示的信息,如果用大括号“{”和“}”将黑体字代码括起来,则当调用方法outputTotalMoney ()时,如果为其传递的实参不是1008,程序就不会输出任何信息。

添加大括号,使程序正确执行,示例:

    public class BigBracket {
        private int productId = 0;               // 定义成员变量产品ID
        private int price = 0;                   // 定义成员变量产品单价
        private int number = 0;                  // 定义成员变量产品数量
        private int totalMoney = 0;              // 定义成员变量产品总金额
        public void outputTotalMoney (int id){    // 定义输出信息的方法,形参id是传入的产品编号
        ❷if (id == 1008) {                  // 判断传递的参数是否为1008,如果是1008就向下执行
              productId = id;                // 为成员变量赋值为参数id的值
              price = 800;                   // 为成员变量单价赋值为800
              number = 100;                  // 为成员变量数量赋值为100
              totalMoney = price * number; // 计算总金额
              System. out. println ("产品ID是"+productId+"的产品");
              System. out. println ("其总金额是:"+totalMoney);
            }
        }
        public static void main (String[] args) {
            BigBracket bracket = new BigBracket ();    // 创建类的实例
            ❶bracket. outputTotalMoney (1001);         // 调用方法,并传递实参1001
        }
    }

说明

运行本示例时,由于在标记❶处调用方法outputTotalMoney ()时,为其传递的实参是1001,所以执行outputTotalMoney ()方法时,当程序执行到标记❷处时,判断产品编号不是1008,不执行其后大括号内的代码,因此不会输出任何信息;如果在标记❶处调用方法outputTotalMoney ()时,将为其传递的实参改为1008,程序将在控制台输出如图3.14所示的正确结果。

图3.14 在控制台输出正确的产品信息