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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邓斌 中级黑马   /  2012-4-9 17:18  /  2849 人查看  /  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 个回复

倒序浏览
应该是在函数中定义,作用范围是从定义它的大括号开始 到另一个大括号结束。
回复 使用道具 举报
定义在 for循环种   的就是 局部变量了
局部变量  随着循环结束 会被 消失释放 。

paixu和paixu_1方法内。没有定义temp        是调用其他函数 。
zhihuan(int arr[],int a,int b)
中的 temp 是成员变量
回复 使用道具 举报
翟友伟 发表于 2012-4-9 17:28
定义在 for循环种   的就是 局部变量了
局部变量  随着循环结束 会被 消失释放 。

恩。是调用的。这本是自己复习写的。。所以定义的方法。不过不定义方法。直接在paixu和paixu_1中定义temp也是没问题的。所以才求解的。
回复 使用道具 举报
编译通过没有错误啊。。。
回复 使用道具 举报
哥们,我发现呀,你这个没有错,我也试过了。 是正确的, 要自信。
回复 使用道具 举报
哦 你说注释的部分是吧,放在for循环内跟for循环外是不一样的,放在for内的变量只在for内有效,for循环结束,变量所占的内存也就释放了。所以你return会出错。
回复 使用道具 举报
liuhao411 发表于 2012-4-9 17:32
哥们,我发现呀,你这个没有错,我也试过了。 是正确的, 要自信。

恩。是编译通过了。我说了,在for外面定义变量可以通过。而在for内定义。编译错误。//注释的部分
而paixu_1和paixu中定义了temp是在for 中。而能编译通过。。而max和max_1在for中定义不能通过。
回复 使用道具 举报
耿世玉 发表于 2012-4-9 17:36
哦 你说注释的部分是吧,放在for循环内跟for循环外是不一样的,放在for内的变量只在for内有效,for循环结束 ...

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

在毕老师。选择和冒泡排序视频中。定义变量temp是在 for中。。
回复 使用道具 举报
邓斌 发表于 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这个变量 。。
回复 使用道具 举报
定义变量temp是在 for中。。
temp 作用在 for循环里头  
外界并没有用到 temp。。  temp的功能在 交换函数内完成。。。 并没有返回temp    temp只是临时定义的中间量
回复 使用道具 举报
翟友伟 发表于 2012-4-9 17:43
定义变量temp是在 for中。。
temp 作用在 for循环里头  
外界并没有用到 temp。。  temp的功能在 交换函数 ...

临时的。了解。谢谢
回复 使用道具 举报
邓斌 发表于 2012-4-9 17:37
恩。是编译通过了。我说了,在for外面定义变量可以通过。而在for内定义。编译错误。//注释的部分
而paixu ...

哦,我看明白了。首先return位置是不是固定的嘛,那么你要是定义到{}内部,那么是不是运行完了就释放了,当运行到return时,是不是就找不到max了;简单的说就是,你定义的这是只在它所在的{}中有效,{}以外都是没有效的。
回复 使用道具 举报
邓斌 发表于 2012-4-9 17:40
恩。是调用的。这本是自己复习写的。。所以定义的方法。不过不定义方法。直接在paixu和paixu_1中定义temp ...

temp定义在for中肯定没事啊。因为他就是一个中间变量用来切换数组中的数,他的值不需要返回。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马