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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵方明 中级黑马   /  2012-7-2 18:27  /  2964 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
在一个数组中找到某一个数。
*/
class ArrayTest4
{
        public static void main(String[] args)
        {
                int [] arr=new int []{6,3,2,8,2,7,56,9};//有两个2
                int x=getIndex(arr,2);//getIndex(arr,2)是调用getIndex方法,会得到一个int型的返回值。这个值可以被赋给一个int型变量。
                System.out.println("x="+x);
        }
        /*
        建立一个函数,作用是输入一个数组和一个值,找到这个值在这个数组中的位置。
        也就是找到这个数组的角标。
       
        */
public static int getIndex(int [] arr,int key)
        {
        /*
        遍历数组,
        */
                for (int i=0;i<arr.length ;i++)
                {
                        /*
                        当要找的值与arr[i]相等时,返回角标。
                        */
              if (arr[i]==key)
              {
                                  return i;
              }
                }
                return -1;//当在数组中没有数组元素与要找的值相等时,返回-1.


        }



}
有两个2,用的是for循环,应该一直进行到底的啊?为什么第二个2的角标不输出呢?

15 个回复

正序浏览
朱东方 发表于 2012-7-3 01:53
这个不行,有返回值int的,你的返回的类型是void。不可行。

必须可以 ,有返回值 你不是返回-1了啊
回复 使用道具 举报

/*
在一个数组中找到某一个数。
*/
class ArrayTest4
{
        public static void main(String[] args)
                {
                        int [] arr=new int []{6,3,2,8,2,7,56,9};
                        getIndex(arr,2);
                       
                }

        public static int getIndex(int [] arr,int key)
    {
                for (int i=0;i<arr.length ;i++)
                {
                        if (arr==key)
                        {
                                System.out.println("arr["+i+"]="+arr);//把println放在这里就行了
                        }
                }
                return -1;
        }
}
回复 使用道具 举报
在函数getIndex中遇见第一个2的时候,就运行了return i;这句程序。于是函数就结束了,不会再运行循环。如果楼主想运行出所有和参数相同的下标,则可以添加一个数组,记录所有的下标的值。再最后输出数组。可以用void,不需要返回值。
回复 使用道具 举报
由于你的for循环是从0开始的,也就是说这是正向查找,那么你的判断语句就是  找到了,则return,而一执行return,循环就结束了,函数也结束了。就不会再继续找了,如果你想找最后一次出现的位置那么,把return放在循环外面去,这样,返回的就是最后一次出现的位置。
回复 使用道具 举报
楼主第一次找到2的时候就return了,所以没有运行到第二个。这个可以在函数内打印出来,为什么还要做个返回值。
回复 使用道具 举报
8楼的  if (arr==key)不行吧{:soso_e120:}
回复 使用道具 举报
★╃小胖╃☆ 发表于 2012-7-2 20:24
当时毕老师的视频也有讲到.这种方法只能找到key第一次出现的元素,就结束了.所以我把代码稍微改了一下,可以 ...

if(arr==key)改成if(arr==key)就可以了。

我刚查了查毕老师的视频“第四天07 数组折半查找”看了看,没说怎么查找第二个。return只能返回一次,高手来详细的说下吧。
回复 使用道具 举报
周朋飞 发表于 2012-7-2 20:04
因为当你执行到第一个2的时候直接就退出循环 直接返回给你定义的x了,如果想要打出你要的两个结果的话 ,把 ...

这个不行,有返回值int的,你的返回的类型是void。不可行。
回复 使用道具 举报
System.out.println("x="+x);
这个语句放的位置,决定了它只能被打印一次
回复 使用道具 举报
  for (int i=0;i<arr.length ;i++)
   {
               if (arr[i]==key)
              {
               return i;//顺序遍历数组时候,找到第一个2的时候,执行到该return语句  此函数就已经结束了
              }
   }
    ///要想把两个2的角标的打印出来  可以这么写
public static void getIndex(int [] arr,int key)
        {
      
                for (int i=0;i<arr.length ;i++)
                {
                     
              if (arr[i]==key)
              {
                    System.out.println(i);
              }
        }
               


        
         
回复 使用道具 举报
因为当你执行到第一个2的时候直接就退出循环 直接返回给你定义的x了,如果想要打出你要的两个结果的话 ,把return i 改成System.out.println(i)不就得到你要的效果了吗
回复 使用道具 举报
好的,谢谢
回复 使用道具 举报
你可以定义一个数组  把数据存进去  循环完以后返回数组
回复 使用道具 举报
如何让它输出两次?
回复 使用道具 举报
return 只能返回一次  并且返回以后方法就调用结束
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马