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

© 邓斌 中级黑马   /  2012-4-9 17:18  /  3242 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

准确说我也不清楚是for中定义变量还是函数中定义变量的问题。

代码中的方法max和max_1 中
在for中定义变量(//已注释部分)
编译错误。提示:

Shuzu4.java:42: 错误: 找不到符号
                                return max;
                                       ^
  符号:   变量 max
  位置: 类 Shuzu4
1 个错误

所以就只能在for外面定义变量了。编译才通过。

不过可以看到。paixu和paixu_1方法内。for中定义变量temp.编译而没问题。
  1. class Shuzu4//
  2. {
  3.                 public static void main(String[] args)
  4.                 {
  5.                         int []arr={2,1,4,3,6,5};
  6.                         print(arr);
  7.                         paixu_1(arr);
  8.                         print(arr);
  9.                         int max=max(arr);
  10.                         System.out.println(max);
  11.                         int max_1=max_1(arr);
  12.                         System.out.println(max_1+"和"+max);
  13.                 }
  14.                 public static int max(int[] arr)
  15.                         {       
  16.                                 int max=0;
  17.                                 for (int x=1;x<arr.length ;x++ )
  18.                                 {
  19.                                         //int max=0;
  20.                                         if (arr[max]<arr[x])
  21.                                         {
  22.                                                 max=x;
  23.                                                
  24.                                         }
  25.                                 }
  26.                                 return arr[max];
  27.                
  28.                         }
  29.                        

  30.                         public static int max_1(int [] arr)
  31.                         {       
  32.                                 int max=arr[0];
  33.                                 for (int x=1;x<arr.length ;x++ )
  34.                                 {
  35.                                         //int max=arr[0];
  36.                                         if (max<arr[x])
  37.                                         {
  38.                                                 max=arr[x];
  39.                                         }
  40.                                 }
  41.                                 return max;
  42.                        
  43.                        
  44.                         }
  45.                



  46.                 public static void paixu(int [] arr)
  47.                 {
  48.                 for (int x=0;x<arr.length-1 ;x++ )
  49.                 {
  50.                         for (int y=x+1;y<arr.length ;y++ )
  51.                         {
  52.                                 if (arr[x]>arr[y])
  53.                                 {
  54.                                         zhihuan(arr,x,y);
  55.                                 }
  56.                         }
  57.                 }
  58.                
  59.                
  60.                 }
  61.                 public static void paixu_1(int[] arr)
  62.                 {
  63.                         for (int x=0;x<arr.length ;x++ )
  64.                         {
  65.                                 for (int y=0;y<arr.length-x-1 ;y++ )
  66.                                 {
  67.                                         if(arr[y]>arr[y+1])
  68.                                                
  69.                                         {
  70.                                                
  71.                                                         zhihuan(arr,y,y+1);

  72.                                         }       
  73.                                 }
  74.                         }
  75.                
  76.                
  77.                
  78.                 }
  79.                
  80.                 public static void zhihuan(int arr[],int a,int b)
  81.                         {
  82.                                 int temp=arr[a];
  83.                                 arr[a]=arr[b];
  84.                                 arr[b]=temp;

  85.                
  86.                         }
  87.                 public static void print(int[] arr)
  88.                 {
  89.                 System.out.print("[");
  90.                 for (int x=0;x<arr.length ;x++ )
  91.                 {
  92.                         if (x!=arr.length-1)

  93.                         {
  94.                                 System.out.print(arr[x]+",");

  95.                         }
  96.                         else
  97.                                 System.out.println(arr[x]+"]");

  98.                 }
  99.                
  100.                
  101.                 }



  102. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

13 个回复

正序浏览
邓斌 发表于 2012-4-9 17:40
恩。是调用的。这本是自己复习写的。。所以定义的方法。不过不定义方法。直接在paixu和paixu_1中定义temp ...

temp定义在for中肯定没事啊。因为他就是一个中间变量用来切换数组中的数,他的值不需要返回。
回复 使用道具 举报
邓斌 发表于 2012-4-9 17:37
恩。是编译通过了。我说了,在for外面定义变量可以通过。而在for内定义。编译错误。//注释的部分
而paixu ...

哦,我看明白了。首先return位置是不是固定的嘛,那么你要是定义到{}内部,那么是不是运行完了就释放了,当运行到return时,是不是就找不到max了;简单的说就是,你定义的这是只在它所在的{}中有效,{}以外都是没有效的。
回复 使用道具 举报
翟友伟 发表于 2012-4-9 17:43
定义变量temp是在 for中。。
temp 作用在 for循环里头  
外界并没有用到 temp。。  temp的功能在 交换函数 ...

临时的。了解。谢谢
回复 使用道具 举报
定义变量temp是在 for中。。
temp 作用在 for循环里头  
外界并没有用到 temp。。  temp的功能在 交换函数内完成。。。 并没有返回temp    temp只是临时定义的中间量
回复 使用道具 举报
邓斌 发表于 2012-4-9 17:31
恩。是调用的。这本是自己复习写的。。所以定义的方法。不过不定义方法。直接在paixu和paixu_1中定义temp ...

还是 不太明白 你到底 问的是什么。。。。。
如果是问temp为什么在 paixu中可以定义,而同样在max中不可定义在for循环中的max的话??

temp作为交换用的 变量  在循环中作用完 消失 不影响,你交换完成了 有没有temp来说对arr[x] arr[y]没有影响  

max里头
你最后for外面 有句  retrun arr[max]     
如果max定义在里头的话  循环结束 int max这个就没有了 retrun返回找不到 max这个变量 。。
回复 使用道具 举报
耿世玉 发表于 2012-4-9 17:36
哦 你说注释的部分是吧,放在for循环内跟for循环外是不一样的,放在for内的变量只在for内有效,for循环结束 ...

恩。是调用的。这本是自己复习写的。。所以定义的方法。不过不定义方法。直接在paixu和paixu_1中定义temp也是没问题的。所以才求解的。

在毕老师。选择和冒泡排序视频中。定义变量temp是在 for中。。
回复 使用道具 举报
liuhao411 发表于 2012-4-9 17:32
哥们,我发现呀,你这个没有错,我也试过了。 是正确的, 要自信。

恩。是编译通过了。我说了,在for外面定义变量可以通过。而在for内定义。编译错误。//注释的部分
而paixu_1和paixu中定义了temp是在for 中。而能编译通过。。而max和max_1在for中定义不能通过。
回复 使用道具 举报
哦 你说注释的部分是吧,放在for循环内跟for循环外是不一样的,放在for内的变量只在for内有效,for循环结束,变量所占的内存也就释放了。所以你return会出错。
回复 使用道具 举报
哥们,我发现呀,你这个没有错,我也试过了。 是正确的, 要自信。
回复 使用道具 举报
编译通过没有错误啊。。。
回复 使用道具 举报
翟友伟 发表于 2012-4-9 17:28
定义在 for循环种   的就是 局部变量了
局部变量  随着循环结束 会被 消失释放 。

恩。是调用的。这本是自己复习写的。。所以定义的方法。不过不定义方法。直接在paixu和paixu_1中定义temp也是没问题的。所以才求解的。
回复 使用道具 举报
定义在 for循环种   的就是 局部变量了
局部变量  随着循环结束 会被 消失释放 。

paixu和paixu_1方法内。没有定义temp        是调用其他函数 。
zhihuan(int arr[],int a,int b)
中的 temp 是成员变量
回复 使用道具 举报
应该是在函数中定义,作用范围是从定义它的大括号开始 到另一个大括号结束。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马