黑马程序员技术交流社区

标题: 判断是否重复的代码谁能帮我读下! [打印本页]

作者: 289623337    时间: 2014-10-26 17:45
标题: 判断是否重复的代码谁能帮我读下!
本帖最后由 289623337 于 2014-10-26 17:53 编辑
  1. public class Demo3
  2. {
  3.         public static void main(String[] args)
  4. {
  5.                 int []age = {1,2,3,4,5,6,5};
  6.                for (int i = 0; i < age.length-1; i++)</font>
  7. {
  8. //双层循环,定住一个,再考虑下一个!
  9.                 for (int j = i+1; j < age.length; j++)</font>
  10. {
  11.                                 if(age[i] == age[j])
  12. {
  13.                                         System.out.println("有重复的!"+i+"  "+j);
  14.                                         break;
  15.                                 }
  16.                         }
  17.                 }
  18.         }
  19. }结果为什么是 4   6  
复制代码

作者: 英雄传说ER    时间: 2014-10-26 18:47
本帖最后由 英雄传说ER 于 2014-10-26 18:50 编辑


外循环不用说 遍历的是这个数组
内循环的功能是说 你取出一个数(脚标) 和 后面的数(因为脚标一直++) 有没有相等的,如果相等,那么就输出,如果遇到相等的就结束循环外循环接着从第二个数(i++)开始跟后面的比,重复上面内循环那句话。。。。。
这个数的脚标 和 与它相等的数的脚标————注意这里输出的是角标 因为两个5 一个是4脚标,一个是6脚标 所以输出是 4和6
  

作者: cvnmklop    时间: 2014-10-26 18:47
4、6这结果是正确的。这是角标的值 对应到age数组是age[4]和age[6]找出的是两个5,重复的数值。
作者: Fightingforever    时间: 2014-10-26 22:13
break是结束当前循环,在这里就是结束内部循环,从外部循环开始。continue是解释本次循环进入下次循环!
作者: qq8921310    时间: 2014-10-26 22:29
数组查数 是  0,1,2,3,4,5,6
作者: 289623337    时间: 2014-10-27 15:20
英雄传说ER 发表于 2014-10-26 18:47
外循环不用说 遍历的是这个数组
内循环的功能是说 你取出一个数(脚标) 和 后面的数(因为脚标一直++)  ...

对不起英雄你回答的很详细,但是我还是没有读懂还能在简单点吗????
作者: 王世虎    时间: 2014-10-27 16:44
289623337 发表于 2014-10-27 15:20
对不起英雄你回答的很详细,但是我还是没有读懂还能在简单点吗???? ...

这里是循环比较的,使用双层循环。
第一层:以变量i的值为循环条件,这是大循环(大圈)
第二层:以变量j的值为循环条件,这是小的循环(小圈)
比较思路:第一次,i=0,j=1 即age[0]与age[1]比较,判断是否相同,不相同则j++,
                                      然后age[0]再与age[2]比较判断是否相同,不相同则j++,
                                      一次类推,让age[0]与数组中其他数都比较一次,如果没有相同的则i++
                                       同时返回到上一个循环中
               第二次,i=1,j=2,即age[1]与age[2]比较,判断是否相同,不相同则j++
                                                                  …………………………后面一次类推,直到第一次找到两个相同的数时,循环停止。
作者: hanxing    时间: 2014-10-27 19:19
这不和冒泡排序类似吗,把冒泡排序两层循环搞懂了再看这个就清晰多了
作者: 坚持525    时间: 2014-10-27 19:29
你数组使用的局部变量(i和j)都是数组的角标值,那个结果对着呢,你写成age[i]和age[j]就可以了
作者: hanxing    时间: 2014-10-27 19:49
我来做个比喻吧,首先你们有 身高分别为(1,2,3,4,5,6,5)的人站成一排,你们脚下的位子分别是0-6,你们要找出身高相同的人 你站在0这个位子上.
  for (int i = 0; i < age.length-1; i++) 从你开始,你不动(i=0),让其他人过来和你比身高,比完后回到原位
for (int j = i+1; j < age.length; j++)  从你后面的那个人开始(i+1)过来比,直到最后(age.length位子上的人)一个比完
if(age[i] == age[j]) 如果有和你相同身高的人,
  System.out.println("有重复的!"+i+"  "+j);就把你和另一个人的所在的位子打印出来,没有就继续比较
   break;并停止你和j位子以后的人的比较,(严格来说这是不严谨的,万一有三个一样的数字呢)
for (int j = i+1; j < age.length; j++) 此时i=1,你比完了,轮到第二个人不动,从第三个人开始走过来和第二个人比较...下面情景和第一次相似
直到第四个位子上的人(身高为5)和第六个位子上的人(身也为5)才会出现第一次打印
循环到最后结束时候的状态 倒数第二个人不动,倒数第一个人走过来和他比较

作者: 289623337    时间: 2014-11-2 18:46
hanxing 发表于 2014-10-27 19:19
这不和冒泡排序类似吗,把冒泡排序两层循环搞懂了再看这个就清晰多了

thank you     我还没有看到冒泡排序呢,等看到了我在深刻的理解下,谢谢各位啦!!!
作者: 289623337    时间: 2014-11-2 18:47
hanxing 发表于 2014-10-27 19:19
这不和冒泡排序类似吗,把冒泡排序两层循环搞懂了再看这个就清晰多了

thank you     我还没有看到冒泡排序呢,等看到了我在深刻的理解下,谢谢各位啦!!!




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