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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张迁 中级黑马   /  2013-4-25 21:07  /  3749 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张迁 于 2013-4-25 21:53 编辑
  1. public static int getIndex(int[] arr,int key) {
  2.                 for (int x = 0;x < arr.length; x++){
  3.                         if (key == arr[x]){
  4.                                 return x;
  5.                         }
  6.                 }
  7.                 return -1;
  8.         }
复制代码
今天老师讲了这么一段代码,用来按值查询数组并返回角标,但明显如果数组中有重复值,代码就不可靠了,如何处理有重复值的数组,并返回所有角标呢?

7 个回复

倒序浏览
返回值 这个问题只能够返回一个数据, 如果说考虑到有相同值问问题,可以考虑返回一个数组,或者集合。在遍历传入的数组时,一旦有值与想要的值相等时,将该值的角标存入一个数组,或者是集合, 待遍历的数组完毕后,将存储着角标的数组或是集合返回,   (建议用集合,因为集合定义时可以不定长度,比较方便)  再将返回的集合或数组遍历得到所有角标。

这个问题在初期学习中能够想到非常好,到学到一段时间后,自己自然就能够解决了

加油!!!
回复 使用道具 举报
刘凯 发表于 2013-4-25 21:14
返回值 这个问题只能够返回一个数据, 如果说考虑到有相同值问问题,可以考虑返回一个数组,或者集合。在遍 ...

嗯,我自己也想过用数组,可是1、数组的长度不确定,2、数组默认好多0,不知道输出的时候怎么把没用的0去掉,用一个计数器记忆一下再输出?集合我现在还不懂,不过以后我肯定会解决这个问题!
回复 使用道具 举报
张迁 发表于 2013-4-25 21:36
嗯,我自己也想过用数组,可是1、数组的长度不确定,2、数组默认好多0,不知道输出的时候怎么把没用的0去 ...

用数组的话  数组类型可以定义为 Integer[]  这样一来 默认的就是null了  可以将数组长度定义成跟传递的数组一样的长度  这样即使Integer[] 后边的没用到,他的值就会使null  ,在遍历返回的Integer[]时,遇到null就停止就ok了,不过这个得等你学到了Integer这个基本数据类型int的(叫做包装类还是什么来着,忘了这个名词了)。现在了解下,很快就能讲到了
回复 使用道具 举报
package cn.joe.FileandRecursion;

public class Test2 {
        public static void main(String[] args) {
                int [] arr={6,11,34,99,66,11};
//                调用方法
                getIndex(arr, 11);
                       
        }

        private static void getIndex(int[] arr, int key) {
                for(int i=0;i<arr.length;i++)
                        if(key==arr[i])
                                System.out.println(i);
//                打印出来 1  5
        }
}
这不是全部能得到吗?还有这些东西以后都用不到写了,只是要知道并且理解....
回复 使用道具 举报
我感觉在if语句的上面加一个  while循环

public static int getIndex(int[] arr,int key) {
              while(x<=arr.length-1)
{
for (int x = 0;x < arr.length; x++){
                        if (key == arr[x]){

                                return x;

                        }

}      
        }

07.                return -1;

08.        }
回复 使用道具 举报
张迁 中级黑马 2013-4-25 21:52:01
7#
刘凯 发表于 2013-4-25 21:48
用数组的话  数组类型可以定义为 Integer[]  这样一来 默认的就是null了  可以将数组长度定义成跟传递的 ...

哦,原来是我还没学到的内容,谢谢哈,你讲的很好!:D
回复 使用道具 举报
刘凯 金牌黑马 2013-4-25 21:52:23
8#
smile_joe 发表于 2013-4-25 21:49
package cn.joe.FileandRecursion;

public class Test2 {

他没说要打印啊。他是要调用方法返回角标的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马