Logo

郎哥编程

嵌套if结构

2019-12-09 986

除了使用简单if和多重if之外,还可以将整个if块插入另一个if块中,这种结构称为嵌套if。嵌套if主要用于只有当前提条件满足时,才判断后续条件是否满足。例如一个活动计划的安排:如果今天是工作日,则去上班,如果今天是周末,则外出游玩;同时,如果周末天气晴朗,则去室外游乐场游玩,否则去室内游乐场游玩。

嵌套if结构的语法如下:

if(<前提条件>)
{
           if(<后续条件1>)
                 <语句块1>
     else
<语句块2>
}
else
<语句块3>

在编写嵌套if结构时,有时会引发一些疑问,下面是一个例子:

if( x > 0 )
  if( y > 1 )
    z=1;
   else   /*这个else部分属于哪个if?*/
     z=2;

按条件语句的语法形式,上面的例子似乎有两种可能的解释,第一种理解:外层的if是一个没有else部分的条件语句,最后的else部分属于内层的if语句;第二种理解:内层if是一个不带else部分的条件语句,最后的else属于外层的if条件语句。

为了避免这种二义性,Java语言规定,每个else部分总是属于前面最近的那个缺少对应的else部分if语句。根据这一规定,上面的例子第一种解释是正确的,第二种解释是不正确的。

因此,在编写代码时,尽量把嵌入的if语句块用“{”和“}”括起来,避免发生理解上的二义性。如果我们真的需要写出具有第二种意义的嵌套条件语句,那么,就应该采用下面的写法:

if( x > 0 )
{
   if( y > 1 )
      z=1;
}
else  /*这个else部分属于哪个if?*/
  z=2;

案例1:编写一个程序,要求用户输入两个数值,通过嵌套if结构判断两个数值的大小,并输出相应信息。

在PbaseUnit10项目unit包下创建EmbedSample类。代码如下:

/** 
* @Title: EmbedSample.java 
* @Package unit 
* @Description: Java基础知识课程案例 
* @author 编程训练营 
* @date  
* @version V1.0 
*/ 
 
package unit;
 
import java.util.Scanner;
 
/** 
* @ClassName: EmbedSample 
* @Description: 流程控制(嵌套if结构)案例1
* @author 编程训练营 
* @date  
* 
*/
 
public class EmbedSample {
 
    /**
     * @Title: main
     * @Description: Java程序入口main方法
     * @param @param args 参数
     *
     * @return void 返回类型 @throws
     */
 
    public static void main(String[] args) {
       int num1, num2;
       // 声明Scanner类,接收用户输入的两个数值
       Scanner sc = new Scanner(System.in);
       // 提示用户输入两个整数
       System.out.println("请输入两个整数数:");
       // Scanner类方法nextInt获取int类型的输入
       num1 = sc.nextInt();
       num2 = sc.nextInt();
       // 用嵌套if结构判断两个数值的大小
       // 首先判断num1和num2是否相等
       if (num1 != num2) {
           if (num1 > num2) {
              System.out.printf("num1(%d)>num2(%d)", num1, num2);
           } else {
              System.out.printf("num1(%d)<num2(%d)", num1, num2);
           }
       } else
           System.out.printf("num1(%d)=num2(%d)", num1, num2);
 
    }
 
}

程序结构分析

程序功能主要是演示嵌套if结构的使用。

采用嵌套结构实质上是为了进行多分支选择,判断两个数值的大小实际上有三种选择,即num1=num2、num1<num2或num1>num2,这种问题用if-else-if结构也可以完成,而且程序更加清晰。因此,在一般情况下,较少使用if的嵌套结构,以使程序更便于阅读和理解。

程序执行结果如下图所示:

image.png

从上述结果可以看出,输入相同或不同的两个数值,程序能够正确判断两个数值的大小。

在编写代码时,如果要使用嵌套if结构,尽量把嵌入的if语句块用“{”和“}”括起来,一方面可以提高代码的可理解性和易读性;另一方面也可以预防因if和else匹配错误,使程序发生不可预知的结果,增加程序调试难度。


代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论