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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 尤洋 中级黑马   /  2012-8-3 19:06  /  1812 人查看  /  4 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 尤洋 于 2012-8-3 20:32 编辑

      在毕老师视频中讲到查询数组位置时   里面讲到的是获取key第一次出现在数组中的位置,假如一个数在数组中存在多次,后面相同的数就查不到了,
后来看视频看到 10进制数转2进制时用StringBuffer把数据存储了再一起输出,我就想 能不能 在查询数组的时候也用StringBuffer把查询到数据的 角标
存起来,最后一起把多个相同数据的角标 一次输出。
       老师的代码是下面这个,我打算自己写段代码来实现,但是遇到了很多问题,首先是方法的返回类型 ,因为可能返回一个数 也可能返回多个数,如果数字不存在还要返回-1,由于要返回-1,所以也没法设为void类型,另外循环内部一返回数值用return,语句就结束了,没法继续循环往后查找后面相同的数据的角标。
       有没有谁能帮忙实现下,查找数组中多个相同数字的位置,而不仅仅是第一次出现的位置。
  1. class ArrayTest4
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int[] arr = {3,2,1,5,4,2,9};
  6.                 int index = getIndex(arr,190);
  7.                 System.out.println("index="+index);               
  8.         }
  9.      
  10. //获取key第一次出现在数组中的位置。如果返回是-1,那么代表该key在数组中不存在。   
  11.          public static int getIndex(int[] arr,int key)
  12.         {
  13.                 for(int x=0; x<arr.length; x++)
  14.                 {
  15.                         if(arr[x]==key)
  16.                                 return x;
  17.                 }
  18.                 return -1;
  19.         }
  20. }
复制代码

4 个回复

倒序浏览
  1. public static void main(String[] args) {
  2.                 int[] arr = {3,2,1,5,4,2,9,9,9};

  3.                 StringBuffer index = getIndex(arr,9);

  4.                 System.out.println("index="+index);
  5.         }
  6.         public static StringBuffer getIndex(int[] arr,int key)

  7.                 {
  8.                 StringBuffer b=new StringBuffer();
  9.                         for(int x=0; x<arr.length; x++)

  10.                         {

  11.                                 if(arr[x]==key){
  12.                                         b.append(x+1);//由于数组下标是从0开始的,这里要+1
  13.                                         }

  14.                         }
  15.                         if(b.length()<=0){//没有找到的话,b的长度就是0了,这时候追加-1.
  16.                                 b.append(-1);
  17.                         }
  18.                         return b;

  19.                 }
复制代码
这个也不难啊,就是在相同时,追加到StringBuffer里面。最后来个判断,StringBuffer的长度为0,说明没找到,就追加个-1.返回值是最后返回一个StringBuffer。
回复 使用道具 举报
学到集合了吗?可以弄一个容器,感觉比较好。

public class ArrayTest4
{

        public static void main(String[] args)
        {

                int[] arr = {3,2,1,5,4,2,9};

                ArrayList index = getIndex(arr,2);

                System.out.println(index);               
        }

        public static ArrayList getIndex(int[] arr,int key)
        
        {
                ArrayList list=new ArrayList();
            for(int x=0; x<arr.length; x++)
            {
                    if(arr[x]==key)
                            list.add(x);//把坐标加到list中
                    }
            if(list.isEmpty())
                    list.add("所查数组中无次数");

              return list;

        }


}
回复 使用道具 举报
李东升 发表于 2012-8-3 19:51
这个也不难啊,就是在相同时,追加到StringBuffer里面。最后来个判断,StringBuffer的长度为0,说明没找到 ...

嗯,多谢指点了。
我尝试了下,的确解决了查找多个角标的问题。

不过17行那 貌似不用+1,求的就是数组中的位置,加1了反而结果错误。
改成 b.append("["+x+"]"); 避免得出的数据紧靠在一起分不清 。
回复 使用道具 举报
问题已解决
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马