黑马程序员技术交流社区

标题: 关于数组查找的问题? [打印本页]

作者: 董志超    时间: 2012-9-25 09:17
标题: 关于数组查找的问题?
本帖最后由 董志超 于 2012-9-25 17:49 编辑

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

一个整形数组,如{8,6,4,2,4,7,8,1,8,5,8,8},用上述方法查找8,查找的是8第一次出现的位置,
如果要查找8在此数组中出现的其他位置,或所有位置,该怎么办呢?



作者: 罗磊    时间: 2012-9-25 09:32
那么你就定义一个容器计数器将每次匹配的角标保存到容器内!这样容器就能获得你所需要的内容!

作者: 霍明波    时间: 2012-9-25 09:37
本帖最后由 霍明波 于 2012-9-25 09:39 编辑

          public static void main(String[] args)
        {   
           int[] a =  {8,6,4,2,4,7,8,1,8,5,8,8};
           getIndex(a,8);
           System.out.println(sb.toString());
               
        }
        static StringBuilder sb = new StringBuilder();
        public static int getIndex(int[] arr,int a)
        {
                for(int x=0;x<arr.length;x++)
                {
                        if(arr[x]==a){
                                sb.append(x);
                                sb.append(',');
                        }   
                }
                return -1;
        }

在你的基础上简单写了个,有点马虎 你看看能不能用
作者: 覃宏海    时间: 2012-9-25 10:01
本帖最后由 覃宏海 于 2012-9-25 10:06 编辑

这是我的代码,先在getIndex中加入StringBuilder容器,判断,如果arr[x]== 8 ,就把它存到容器中去。最后,通过获取StringBuilder容器的长度来获取8出现的次数!
        public static void main(String[] args){
                int[] a =  {8,6,4,2,4,7,8,1,8,5,8,8};
                StringBuilder b = getIndex(a, 8);
                System.out.println(b.length());------------------------------>最后通过获取容器的长度来判断8出现的次数
        }
        
        public static StringBuilder getIndex(int[] arr,int a)
    {
                StringBuilder sb = new StringBuilder();------------------------------->加入容器,如果符合条件就装入到容器中
            for(int x=0;x<arr.length;x++)
            {
                    if(arr[x]==a)
                            sb.append(arr[x]);
            }
            return sb;
    }




作者: 覃宏海    时间: 2012-9-25 10:07
本帖最后由 覃宏海 于 2012-9-25 10:11 编辑

public class Aaa {
public static void main(String[] args){
  int[] a =  {8,6,4,2,4,7,8,1,8,5,8,8};
  int b = getIndex(a, 8);
  System.out.println(b);
}

public static int getIndex(int[] arr,int a)
    {
  int count = 0;
            for(int x=0;x<arr.length;x++)
            {
                    if(arr[x]==a)
                     count++;------------------------------>加入一个计数器,符合条件count++
            }
            return count;
    }

}
这个是通过计数器的方法  更为简单!
作者: 杜正华    时间: 2012-9-25 10:13
  1. package com.aduvm.practice;

  2. public class FInd {

  3.         /**
  4.          * @param args
  5.          */
  6.         public static void main(String[] args) {
  7.                 // TODO Auto-generated method stub
  8.             int[] a =  {8,6,4,2,4,7,8,1,8,5,8,8};
  9.         int[] arrArguments = new int[getIndex(a,8).length];  //建立与返回数组长度一样的数组
  10.         arrArguments = getIndex(a,8);
  11.         for(int arrArgument:arrArguments)  //输出记录
  12.         System.out.println( arrArgument);

  13.                
  14.         }
  15.         public static int[] getIndex(int[] arr,int a)
  16.         {
  17.                     int i = 0;  
  18.                     int[] arrIndex = new int[arr.length];  //用于记录索引
  19.                 for(int x=0;x<arr.length;x++)
  20.                 {
  21.                         if(arr[x]==a){
  22.                                 arrIndex[i] = x;  //记录相同的值
  23.                                 i++;
  24.                         }
  25.                 }
  26.                 return arrIndex;  //程序不完整,仅供参考 ,返回值为0怎么处理?

  27.         }

  28.   


  29. }
复制代码

作者: 张小龙    时间: 2012-9-25 11:25
可以设置一个集合,直接add()添加很方便,当然也可以定义一个数组,然后把位置存进数组也行
下面给出存进list集合的办法
public static List getIndex(int[] arr, int a) {
  List list=new ArrayList();
  for (int x = 0; x < arr.length; x++) {
   if (arr[x] == a){
    list.add(new Integer(x));
   }
  }
  return list;
}

最后结果返回一个list集合,取出就可以看到所有位置了
作者: 董志超    时间: 2012-9-25 17:33
谢谢大家,会了
作者: 王小闲7    时间: 2012-9-25 19:00
  1. import java.util.Iterator;
  2. import java.util.LinkedList;
  3. import java.util.List;

  4. public class GetIndex {
  5.         public static void main(String[] args) {
  6.                 int[] a={1,2,3,1,3,14,4,6,1};
  7.                 getIndex(a, 1);
  8.         }

  9.         static void getIndex(int[] arr, int a) {

  10.                 List l=  new LinkedList();
  11.                 for (int x = 0; x < arr.length; x++) {
  12.                         if (arr[x] == a) {
  13.                                 l.add(x);
  14.                         }

  15.                 }
  16.                 Iterator<Integer> i=l.iterator();
  17.                 while (i.hasNext()) {
  18.                         Integer integer = (Integer) i.next();
  19.                         System.out.println(integer);
  20.                        
  21.                 }
  22.                
  23.         }
  24. }
复制代码
我是这样实现的不知道有没有帮到你




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