黑马程序员技术交流社区

标题: 新人求助,“return”问题。。。困扰了好久<已解决> [打印本页]

作者: 刘焘    时间: 2012-6-12 23:29
标题: 新人求助,“return”问题。。。困扰了好久<已解决>
本帖最后由 刘焘 于 2012-6-13 00:13 编辑

class Wenti
{
               public static void main (String[] args)
               {
                  int[] arr={3,2,4,1,5,6,8,2};
                  int index=getIndex(arr,8);
                  System.out.println("index="+index);
               }
               public static int getIndex(int[] arr,int key)
               {
                     for(int x=0;x<arr.length;x++)                                                                                                   
                     {                                                                                                                                         这样理解为什么不行。
                         if(arr[x]==key)                                                                                                                       if(arr[x]==key)
                         return x;                                                                                                                                   arr[x]=key;
                     }                                                                                                                                                }
                     return -1;                   为什么这里必须要加return,如果我要输入的值一定在数组里的话 。      return x;        
}
作者: 王超    时间: 2012-6-12 23:38
我觉得楼主不懂的是return语句的作用范围
return语句的作用范围在此语句的大括号内
getIndex需要返回int类型,而除了for循环就没有return语句
所以当然是使用 return -1;   这里-1的常量可以随意定,但在java中经常这样定义错误返回的常量
作者: 王晓新    时间: 2012-6-12 23:40
return -1表示你查找的元素不在数组中{:soso_e100:}
作者: 赵兵锋    时间: 2012-6-12 23:41
  1.           for(int x=0;x<arr.length;x++)                                                                                                   
  2.           {                           
  3.               if(arr[x]==key)         
  4.                       arr[x]=key;//这样没有意义,这里应该是break。
  5.           }                           
  6.           return x;//即使上面改成break了,这里也有问题,x是在for里定义的,在这里是访问不到的。还有这里必须要用return是因为这个方法定义里返回int型数据。
  7.           可以这样改一下。
  8.           int x = 0;
  9.           for(;x<arr.length;x++)                                                                                                   
  10.           {                           
  11.               if(arr[x]==key)         
  12.                       break;
  13.           }                           
  14.           return x;//这里的x有两种情况,一是数组中有key,这里x为其下标,二是数组中没有key,这里x为arr.length。
复制代码

作者: 刘焘    时间: 2012-6-12 23:45
王晓新 发表于 2012-6-12 23:40
return -1表示你查找的元素不在数组中

嗯 我知道呀。但是我想问的是假如我要查找的数一定在此数组中的时候呢。他就不会运行return -1撒。哎哟,我脑袋都搅浑了~~~
作者: 黑马张扬    时间: 2012-6-12 23:46
因为变量x是在for循环里定义的 作用域只在for循环内
你在for循环外面是返回不了它的
作者: 乐峰    时间: 2012-6-12 23:48
public static void main(String[] args)
    {
                int[] arr={3,2,4,1,5,6,8,2};
        int index=getIndex(arr,8);
        System.out.println("index="+index);
    }
         public static int getIndex(int[] arr,int key)
     {
           for(int x=0;x<arr.length;x++)                                                                                                   
           {                                                                                                                                         
               if(arr[x]==key){
                       arr[x]=key;
               }                                                                                                                       
               //return x;                                                                                                                                   
           }                                                                                                                                                
           return -1;  
     }
按照你的理解的话,这个方法返回值永远都是-1,因为方法里面只有一个return语句。
如果:
public static void main(String[] args)
    {
                int[] arr={3,2,4,1,5,6,8,2};
        int index=getIndex(arr,8);
        System.out.println("index="+index);
    }
         public static int getIndex(int[] arr,int key)
     {
           for(int x=0;x<arr.length;x++)                                                                                                   
           {                                                                                                                                         
               if(arr[x]==key){
                       //arr[x]=key;
                     return x;  
               }                                                                                                                       
                                                                                                                                                
           }                                                                                                                                                
           return -1;  
     }
因为第一个return语句在for循环的if语句里面,如果不满足条件将不走if语句里面的return语句,这样方法就没有int类型的返回值,所以必须在for循环外面方法里面在写一个return语句,这样方法不论在那种情况下都有返回值。
作者: 葛奎    时间: 2012-6-12 23:58
class Test14
{
               public static void main (String[] args)
               {
                  int[] arr={3,2,4,1,5,6,8,2};
                  int index=getIndex(arr,8);
                  System.out.println("index="+index);
               }
               public static int getIndex(int[] arr,int key)
               {
                     for(int x=0;x<arr.length;x++)                                                                                                   
                     {                                       
                         if(arr[x]==key)//从第一个位置开始到最后位置结束.判断要搜索的数是不是在数组里                       
                         return x;// 如果在的话,那么就返回它在数组中的位置 ,这个函数就结束了                          
                     }                                            
                     return -1;  //如果循环结束仍没找到的话,那么就返回-1标识一下,说明数组里面没有要找的数
                           }           //      为什么这里必须要加return,如果我要输入的值一定在数组里的话 。            
}
//  这样理解为什么不行。
// if(arr[x]==key)
//  arr[x]=key;//这样理解没有意义啊,找到了为什么还要把值给它呢 目的是为了找位置为什么要赋值啊.
                               
// return x;
作者: 刘焘    时间: 2012-6-12 23:59
赵兵锋 发表于 2012-6-12 23:41

哎呀,原来是这样,终于想明白了。谢谢啦
作者: 李元峰    时间: 2012-6-13 10:52
根据你的代码的意思 就是 返回 给定数字 在数组中的索引,
你的方法   public static int getIndex(int[] arr,int key){}
是有必须有返回值的,在for() 循环里面,你是找到给定数字在
数组中的索引 然后返回的,但是 for() 循环遍历了所有的数组后没找到
他也必须返回一个int ,因为这时候 for()里面的return x 没有执行,但是函数必须返回
这时就返回一个 没找到的标志 -1.
作者: 李元峰    时间: 2012-6-13 10:58
刘焘 发表于 2012-6-12 23:45
嗯 我知道呀。但是我想问的是假如我要查找的数一定在此数组中的时候呢。他就不会运行return -1撒。哎哟, ...

程序 没有编译之前 是不知道你给定的数组的,也不知道 给定的需要查找的数值是是什么,你说“假如我要查找的数一定在此数组中的时候呢” 但是java 虚拟机,编译器他不知道啊,在没有运行前 他对的给的数组和数字 一无所知,所以他要必须要检测到,不存在时,程序也要能返回int




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