黑马程序员技术交流社区

标题: 关于打印数组元素的问题 [打印本页]

作者: 我为你着迷    时间: 2014-6-4 21:21
标题: 关于打印数组元素的问题
  1. class ArrayText
  2. {
  3.                 public static void main(String[] args)
  4.                 {
  5.                                 int[] arr={3,5,6,7,8,67};
  6.                                 printArray(arr);                               
  7.                 }
  8.                
  9.                 public static void printArray(int[] arr)
  10.                 {
  11.                                 for(int x=0;x<arr.length;x++)
  12.                                 {
  13.                                                 if(x!=arr.length-1)
  14.                                                         System.out.print(arr[x]+",");
  15.                                                 else
  16.                                                   System.out.print(arr[x]);
  17.                                 }       
  18.                 }
  19. }
复制代码
大家好,就是for循环里边的if else的判断我有点想不明白,各位仁兄能不能帮忙说下思路啊,这一块是怎么想的啊,谢谢了。

作者: shisaa    时间: 2014-6-4 21:23
本帖最后由 shisaa 于 2014-6-4 21:31 编辑

我是来混回复的,if(x!=arr.length-1) //判断是否是数组的最后一个元素,否,执行下一句System.out.print(arr[x]+",");
以代码中数组为例,  int[] arr={3,5,6,7,8,67};for(int x=0;x<arr.length;x++)循环中x增大,在最后一次循环时
x=arr.length-1=5,
此时执行 else System.out.print(arr[x]);
表述的不好,望见谅。

作者: 我为你着迷    时间: 2014-6-4 21:26
shisaa 发表于 2014-6-4 21:23
我是来混回复的,if(x!=arr.length-1)  System.out.print(arr[x]+",");

这个代码有点问题,最后一次打印的时候忘记换行了。但是想不明白为什么要2次判断呢 ?
作者: 夏季熬成了秋    时间: 2014-6-5 02:50
关于楼上说的我就不多说了,来说一下你的新问题,为什么要进行来年歌词判断?
if(x!=arr.length-1)
         System.out.print(arr[x]+",");
else
         System.out.print(arr[x]);
说的是这一段吧?
为什么会有else判断这跟你的总体的判断有关,你的if条件是:x!=arr.length-1.他就说明还有x=arr.length-1这种情况,否则它是不会打印arr[length - 1]这个索引所指向的具体的数组值的.所以得有else来让他打印arr[length - 1]这个索引里面的值,即数组的最后一个一个数组元素.其次,也是为了在控制台看着符合规范.
else
         System.out.print(arr[x]); //这里输出的最后的一个数组元素值不会  ",";
输入结果为 :    3,5,6,7,8,67
显然和数组的{}里面一致;
如果不顾及这些可以下面
这个if判断代码块可以这样:
if (x <= arr.length-1){
         System.out.print(arr[x]+",")
}
输出的结果为:  3,5,6,7,8,67,     很明显多了个  ","
希望对你有帮助.
作者: 姿_`态    时间: 2014-6-5 08:57
class ArrayText
{
                public static void main(String[] args)
                {
                                int[] arr={3,5,6,7,8,67};//Array.length=6
                                printArray(arr);                                
                }
               
                public static void printArray(int[] arr)
                {
                                for(int x=0;x<arr.length;x++)//遍历这个数组
                                {
                                                if(x!=arr.length-1)
                                                        System.out.print(arr[x]+",");//当没有遍历到这个数组的最后一个元素67时,每个元素后面都需要逗号分开。
                                                else
                                                  System.out.print(arr[x]);//当遍历到最后一个元素,就不需要逗号了
                                }        
                }
}

作者: wyy666    时间: 2014-6-5 09:53
我为你着迷 发表于 2014-6-4 21:26
这个代码有点问题,最后一次打印的时候忘记换行了。但是想不明白为什么要2次判断呢 ? ...

是为了最后一个元素不加“,”号
作者: pengyu    时间: 2014-6-5 11:22
恩恩,是为了最后一个元素打印出来不加逗号呢
作者: 上杉    时间: 2014-6-5 12:06
是为了最后一位元素后面不会出现逗号,因为数组的元素角标是从0开始的,所以最后一位是length-1,也就是说如果是6个数,那是角标0,1,2,3,4,5,所以是6个数-1,就是数组的最后一个角标,楼主的代码if里就是判断是不是最后一位角标。初学者不知道我回答的对不对,众大神不要笑话我啊!!!
作者: 我为你着迷    时间: 2014-6-5 13:56
夏季熬成了秋 发表于 2014-6-5 02:50
关于楼上说的我就不多说了,来说一下你的新问题,为什么要进行来年歌词判断?
if(x!=arr.length-1)
          ...

谢谢那  辛苦了 亲  
作者: 我为你着迷    时间: 2014-6-5 13:58
姿_`态 发表于 2014-6-5 08:57
class ArrayText
{
                public static void main(String[] args)

谢谢哦 我知道了{:3_53:}
作者: xiazhixing    时间: 2014-6-5 14:22
打印结果3,5,6,7,8,67
判断是为了打印最后一个数arr[5]时后面不跟逗号
作者: winter    时间: 2014-6-5 19:35
路过路过路过路过路过路过路过
作者: pk49800    时间: 2014-6-5 20:36
这里是以逗号作为输出是的分隔符,元素最后一个是没有后续的,所以不需要分隔符,if就是输出前n-1个元素和分隔符,else则负责输出最后一个元素,你也可以用别的分隔符,或者直接println()输出一个就换行
作者: 我为你着迷    时间: 2014-6-5 22:51
pk49800 发表于 2014-6-5 20:36
这里是以逗号作为输出是的分隔符,元素最后一个是没有后续的,所以不需要分隔符,if就是输出前n-1个元素和 ...

嗯谢谢  我懂了   




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