黑马程序员技术交流社区

标题: 为什么输出结果只有一个? [打印本页]

作者: 赵方明    时间: 2012-7-2 18:27
标题: 为什么输出结果只有一个?
/*
在一个数组中找到某一个数。
*/
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的角标不输出呢?

作者: 蒋映辉    时间: 2012-7-2 18:29
return 只能返回一次  并且返回以后方法就调用结束
作者: 赵方明    时间: 2012-7-2 18:36
如何让它输出两次?
作者: 蒋映辉    时间: 2012-7-2 18:46
你可以定义一个数组  把数据存进去  循环完以后返回数组
作者: 赵方明    时间: 2012-7-2 18:47
好的,谢谢
作者: 周朋飞    时间: 2012-7-2 20:04
因为当你执行到第一个2的时候直接就退出循环 直接返回给你定义的x了,如果想要打出你要的两个结果的话 ,把return i 改成System.out.println(i)不就得到你要的效果了吗
作者: 葛奎    时间: 2012-7-2 20:17
  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);
              }
        }
               


        
         
作者: 黑马-王言龙    时间: 2012-7-2 20:31
System.out.println("x="+x);
这个语句放的位置,决定了它只能被打印一次
作者: 朱东方    时间: 2012-7-3 01:53
周朋飞 发表于 2012-7-2 20:04
因为当你执行到第一个2的时候直接就退出循环 直接返回给你定义的x了,如果想要打出你要的两个结果的话 ,把 ...

这个不行,有返回值int的,你的返回的类型是void。不可行。
作者: 朱东方    时间: 2012-7-3 02:04
★╃小胖╃☆ 发表于 2012-7-2 20:24
当时毕老师的视频也有讲到.这种方法只能找到key第一次出现的元素,就结束了.所以我把代码稍微改了一下,可以 ...

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

我刚查了查毕老师的视频“第四天07 数组折半查找”看了看,没说怎么查找第二个。return只能返回一次,高手来详细的说下吧。
作者: 黑马-李勇    时间: 2012-7-3 02:04
8楼的  if (arr==key)不行吧{:soso_e120:}

作者: 黑马-李勇    时间: 2012-7-3 02:10
楼主第一次找到2的时候就return了,所以没有运行到第二个。这个可以在函数内打印出来,为什么还要做个返回值。
作者: 金龙    时间: 2012-7-3 02:41
由于你的for循环是从0开始的,也就是说这是正向查找,那么你的判断语句就是  找到了,则return,而一执行return,循环就结束了,函数也结束了。就不会再继续找了,如果你想找最后一次出现的位置那么,把return放在循环外面去,这样,返回的就是最后一次出现的位置。
作者: 刘鹏程    时间: 2012-7-3 07:51
在函数getIndex中遇见第一个2的时候,就运行了return i;这句程序。于是函数就结束了,不会再运行循环。如果楼主想运行出所有和参数相同的下标,则可以添加一个数组,记录所有的下标的值。再最后输出数组。可以用void,不需要返回值。
作者: 封明川    时间: 2012-7-3 08:45

/*
在一个数组中找到某一个数。
*/
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;
        }
}
作者: 周朋飞    时间: 2012-7-3 11:58
朱东方 发表于 2012-7-3 01:53
这个不行,有返回值int的,你的返回的类型是void。不可行。

必须可以 ,有返回值 你不是返回-1了啊





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