A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 289623337 中级黑马   /  2014-10-26 17:45  /  1518 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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  
复制代码

评分

参与人数 1技术分 +1 收起 理由
敏敏好学 + 1

查看全部评分

11 个回复

倒序浏览
本帖最后由 英雄传说ER 于 2014-10-26 18:50 编辑


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

评分

参与人数 1技术分 +1 收起 理由
敏敏好学 + 1

查看全部评分

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

对不起英雄你回答的很详细,但是我还是没有读懂还能在简单点吗????
回复 使用道具 举报
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:58
8#
这不和冒泡排序类似吗,把冒泡排序两层循环搞懂了再看这个就清晰多了
回复 使用道具 举报
你数组使用的局部变量(i和j)都是数组的角标值,那个结果对着呢,你写成age[i]和age[j]就可以了
回复 使用道具 举报
我来做个比喻吧,首先你们有 身高分别为(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)才会出现第一次打印
循环到最后结束时候的状态 倒数第二个人不动,倒数第一个人走过来和他比较
回复 使用道具 举报
hanxing 发表于 2014-10-27 19:19
这不和冒泡排序类似吗,把冒泡排序两层循环搞懂了再看这个就清晰多了

thank you     我还没有看到冒泡排序呢,等看到了我在深刻的理解下,谢谢各位啦!!!
回复 使用道具 举报
hanxing 发表于 2014-10-27 19:19
这不和冒泡排序类似吗,把冒泡排序两层循环搞懂了再看这个就清晰多了

thank you     我还没有看到冒泡排序呢,等看到了我在深刻的理解下,谢谢各位啦!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马