黑马程序员技术交流社区

标题: 数组中有多个值与给定key值相等,如何取出? [打印本页]

作者: 月老~牵红线    时间: 2014-10-20 15:16
标题: 数组中有多个值与给定key值相等,如何取出?

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

如果int arr[]={2,5,8,3,5,9};int key=5;遍历数组,取出的是key第一次出现在数组中的位置。想把所有的5都取出来,要如何实现?

作者: 香草芭芙    时间: 2014-10-20 15:46
  1. package com.itheima.test;

  2. public class Test22
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 int arr[] = { 2, 5, 8, 3, 5, 9 };
  7.                 int key = 5;
  8.                 int[] t = getIndex(arr, key);
  9.                 // -----遍历数组, 获取key坐标---------------
  10.                 for (int i = 0; i < t.length; i++)
  11.                 {
  12.                         if (t[i] != arr.length)
  13.                                 System.out.print(t[i] + " ");
  14.                 }
  15.                 // ---------------------------------------
  16.         }
  17.         public static int[] getIndex(int[] arr, int key) // 返回值类型 数组.
  18.         {
  19.                 int[] temp = new int[arr.length];// 想一次性取1个以上的数,就得数组,
  20.                 for (int x = 0, y = 0; x < arr.length; x++)
  21.                 {
  22.                         if (arr[x] == key)
  23.                         {
  24.                                 temp[y++] = x; // 找到key,装进数组
  25.                         }
  26.                         else
  27.                         {
  28.                                 temp[y++] = arr.length; // 没找到key就装数组大小,
  29.                                                                 // 因为key有可能会出现在0坐标,
  30.                                                                 // 这么做是为了防止碰上0坐标
  31.                         }
  32.                 }
  33.                 return temp; // 返回数组
  34.         }
  35. }
复制代码

作者: 月老~牵红线    时间: 2014-10-20 17:35
香草芭芙 发表于 2014-10-20 15:46

非常感谢,原来是我自己写的时候没有用数组装获取到的值,所以存储那些值的时候出现了问题
作者: hanxing    时间: 2014-10-20 17:42
每天都在前进的途中:lol
作者: 想飞的鱼    时间: 2014-10-20 18:47
  1. package com.itheima;

  2. /*
  3. * 需求: 如果int arr[]={2,5,8,3,5,9};int key=5;
  4. * 遍历数组,取出的是key第一次出现在数组中的位置。想把所有的5都取出来,要如何实现?
  5. */
  6. public class Test8 {
  7.         public static void main(String[] args) {
  8.                 int arr[] = { 2, 5, 8, 3, 5, 9 };
  9.                 int key = 5;

  10.                 int index = 0;// key所在的角标
  11.                 int start = 0;// 定义变量,从start的角标开始往后查找,初始为0
  12.                 while ((index = getFirstIndex(arr, key, start)) != -1) {
  13.                         System.out.println("index: " + index);
  14.                         start = index + 1;
  15.                 }
  16.                 if (start == 0) {
  17.                         System.out.println("数组中没有要查找的元素key!");
  18.                 }

  19.         }

  20.         public static int getFirstIndex(int[] arr, int key, int start) {
  21.                 for (int x = start; x < arr.length; x++) {
  22.                         if (key == arr[x]) {
  23.                                 return x;
  24.                         }
  25.                 }
  26.                 return -1;
  27.         }
  28. }
复制代码

作者: 想飞的鱼    时间: 2014-10-20 18:53
类似于String类的indexOf方法,返回的是第一次查到的位置
作者: 月老~牵红线    时间: 2014-10-20 20:22
想飞的鱼 发表于 2014-10-20 18:47

请问一下上面程序中是不是靠start = index + 1中不断变化的start实现getFirstIndex方法的不断循环?
作者: 想飞的鱼    时间: 2014-10-20 20:25
月老~牵红线 发表于 2014-10-20 20:22
请问一下上面程序中是不是靠start = index + 1中不断变化的start实现getFirstIndex方法的不断循环? ...

嗯,每次获取的都是第一次出现的位置
作者: 月老~牵红线    时间: 2014-10-20 20:31
想飞的鱼 发表于 2014-10-20 20:25
嗯,每次获取的都是第一次出现的位置

非常感谢,看明白了。。:P




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