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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


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都取出来,要如何实现?

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

8 个回复

倒序浏览
  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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 赞一个!

查看全部评分

回复 使用道具 举报 1 0

非常感谢,原来是我自己写的时候没有用数组装获取到的值,所以存储那些值的时候出现了问题
回复 使用道具 举报
每天都在前进的途中:lol
回复 使用道具 举报
  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. }
复制代码
回复 使用道具 举报 1 0
类似于String类的indexOf方法,返回的是第一次查到的位置
回复 使用道具 举报

请问一下上面程序中是不是靠start = index + 1中不断变化的start实现getFirstIndex方法的不断循环?
回复 使用道具 举报
月老~牵红线 发表于 2014-10-20 20:22
请问一下上面程序中是不是靠start = index + 1中不断变化的start实现getFirstIndex方法的不断循环? ...

嗯,每次获取的都是第一次出现的位置
回复 使用道具 举报
想飞的鱼 发表于 2014-10-20 20:25
嗯,每次获取的都是第一次出现的位置

非常感谢,看明白了。。:P
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马