黑马程序员技术交流社区

标题: if elseif elseif ...else 与if if if... 连用的区别 [打印本页]

作者: 2012    时间: 2013-9-8 13:40
标题: if elseif elseif ...else 与if if if... 连用的区别
本帖最后由 杨增坤 于 2013-9-11 17:25 编辑

if elseif elseif ...else 与if if if... 连用的区别


定义一个静态方法用于打印二维数组
输出结果:arr={[3,5,5,8],     [7,9],     [12,5,8],     [13,34,27,7,9],     [45,6,-1,3,7]}

//1、定义一个静态方法用于打印二维数组
        public static void printArr_2(int[][] arr)
        {
                 for(int i=0; i<arr.length; i++)

                        for(int j=0; j<arr.length; j++)
                                {  
                                        if(i==0 && j==0)
                                                System.out.print("arr={["+arr[j]+",");

                                        else if(i!=0 && j==0)
                                                System.out.print("     ["+arr[j]+",");

                                        else if(i==arr.length-1 && j==arr.length-1)
                                                System.out.println(arr[j]+"]}");

                                        else if(i!=arr.length-1 && j==arr.length-1)
                                                System.out.println(arr[j]+"],");

                                        else
                                                System.out.print(arr[j]+",");
                                }
               
        }
}
  1. // 2、定义一个静态方法用于打印二维数组
  2.         public static void printArr_2(int[][] arr) {
  3.                 for (int i = 0; i < arr.length; i++)
  4.                         for (int j = 0; j < arr.length; j++) {
  5.                                 if (i == 0 && j == 0)
  6.                                         System.out.print("arr={[" + arr[j] + ",");
  7.                                 if (i != 0 && j == 0)
  8.                                         System.out.print("     [" + arr[j] + ",");
  9.                                 if (i == arr.length - 1 && j == arr.length - 1)
  10.                                         System.out.println(arr[j] + "]}");
  11.                                 if (i != arr.length - 1 && j == arr.length - 1)
  12.                                         System.out.println(arr[j] + "],");
  13.                                 System.out.print(arr[j] + ",");
  14.                         }
  15.         }
  16. }// 两个方法答应的结果相同吗?
复制代码


作者: EYE_SEE_YOU    时间: 2013-9-8 13:47
要注意排版问题
作者: 静心鱼    时间: 2013-9-8 21:12
本帖最后由 静心鱼 于 2013-9-8 21:36 编辑
  1. <blockquote>class Demo
复制代码
你使用if 判断时 最后一句打印语句是不受if语句控制的。
无论上面的if语句块是否执行,最后的打印语句都会循环一次执行一遍。

而当你使用 if eles 语句时,可将这部分代码看做一个整体 只有当条件满足时执行相对应的语句,都不满足,则执行else后的语句。

顺便说一句 哥们你原来的语句中 大循环后面都少了大括号 数组定义的大括号里面也是大括号不应该是中括号。
作者: 静心鱼    时间: 2013-9-8 21:37
囧 不知道为什么编辑一下代码都没了 再发一遍吧、
  1. class Demo
  2. {
  3.         public static void main(String[ ] args)
  4.         {
  5.                 int[ ][ ] arr =new int[ ][ ]{ { 3, 5, 5, 8 } , { 7, 9 } , { 12, 5, 8 } , { 13, 34, 27, 7, 9} , { 45, 6, -1, 3, 7 } };
  6.                 Demo.printArr_2( arr ) ;
  7.         }

  8.         public static void printArr_2(int[ ][ ] arr)   
  9.         {                 
  10.                 for(int i = 0; i < arr.length; i++){
  11.                         for(int j = 0; j < arr[ i ].length; j++){                                          
  12.                                 if( i == 0 && j == 0)
  13.                                 //当a = 0 且 b = 0 时打印 ,即打印arr[ 0 ][ 0 ];                             
  14.                                 {
  15.                                         System.out.print("arr={ {"+arr[ i ][ j ]+",");
  16.                                 }
  17.                                 if( i != 0 && j == 0)   
  18.                                 //当a 不等于 0 时 且 b = 0 时 打印, 即打印 arr[ 1 ][ 0 ],arr[ 2 ][ 0 ],arr[ 3 ][ 0 ],arr[ 4 ][ 0 ],
  19.                                 {
  20.                                         System.out.print(" { "+arr[ i ][ j ]+",");
  21.                                 }
  22.                                 if( i == arr.length-1 && j == arr[ i ].length-1)  
  23.                                 //当i = arr.length - 1时 且 j = arr[ i ].length - 1 时,即i = 4, j =  4 时打印 arr[ 4 ][ 4 ]
  24.                                 {
  25.                                         System.out.println(arr[ i ][ j ]+" } } ");
  26.                                 }
  27.                                 if( i != arr.length-1 && j == arr[ i ].length-1)
  28.                                 //当 i 不等于 4 且 j 分别等于 3,1,2,4,时打印arr[ 0 ][ 3 ],arr[ 1 ][ 1 ], arr[ 2 ][ 2 ],arr[ 3 ][ 4 ];
  29.                                 {
  30.                                         System.out.println(arr[ i ][ j ]+" } ,");
  31.                                 }

  32.                                 //可以看到运行结果中,符合上面任意判断条件的数据项被打印了两遍。不符合的则打印了一边。   
  33.                                 System.out.print(arr[ i ][ j ]+",");  //打印二维数组的所有数据。                               
  34.                         }                        
  35.                 }
  36.         }

  37.         /*
  38.         public static void printArr_2( int[ ][ ] arr)
  39.         {
  40.                 for(int i = 0; i < arr.length; i++)
  41.                 {
  42.                         for(int j = 0; j < arr[ i ].length; j++)
  43.                         {  
  44.                                 if( i == 0 && j == 0)
  45.                                         System.out.print("arr={ {"+arr[ i ][ j ]+",");
  46.                                 else if( i != 0 && j == 0)
  47.                                         System.out.print(" { " + arr[ i ][ j ] + ",");
  48.                                 else if( i == arr.length-1 && j == arr[ i ].length-1)
  49.                                         System.out.println(arr[ i ][ j ] + "} }");
  50.                                 else if( i != arr.length-1 && j == arr[ i ].length-1)
  51.                         System.out.println(arr[ i ][ j ] + "},");
  52.                                 else
  53.                                 System.out.print(arr[ i ][ j ] + ",");
  54.                         }   
  55.             }
  56.         }
  57.        
  58.         */
  59.        
  60. }
复制代码

作者: 张凡    时间: 2013-9-8 21:54
if if...连用时,每个if语句都得执行,elseif elseif...else连用时,前面的elseif语句里的条件为true执行当前的语句块,不再执行后面的elseif语句。
作者: 辛春鹏    时间: 2013-9-8 21:54
不一样吧
if(1)
{a}
if(2)
{b}
if(3)
{c}
如果是这样的话,判断1之后,如果满足,执行a;然后继续向下执行。会继续判断2,如果为true就会执行b。。。。。。如此向下
if(1)
{a}
else if(2)
{b}
else if(3)
{c}
else{d}
如果是这样的话,就是a,b,c,d这四个表达式只会有一个执行的。前面的条件语句满足哪个就对应执行{}中的表达式。前面3个条件表达式都不满足的时候,就会执行d
作者: 陶智第    时间: 2013-9-8 23:00
执行的结果应该是一样的
但两种方法的执行过程是不一样的
第一种方式:每一次循环过程中程序遇到符合条件的就执行当前语句,而后面的语句就不会再执行了
第二种方式:每一次循环过程中程序遇到符合条件的就执行当前语句,但后面的语句也要执行

相比较而言,第一种方式效率更高,消耗的资源也较小

作者: 杨增坤    时间: 2013-9-9 19:51
楼主,你好,如果您的问题解决了!


请把您问题的未解决更改为已解决

谢谢合作!






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2