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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 二月的雨 中级黑马   /  2014-12-5 05:13  /  1302 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

有以下一个很基本的代码,变量max所处的位置不一样,eclipse中有一个会报错,这是为什么呢?
public class ArrayLearning
{
public static void main(String[] args)
{
  double[] myList = new double[10];  
  double max = 0;
  for(int i=0; i<myList.length; i++)
  {
   myList[i] = Math.random()*10;//随机获取10个初始化的值
   System.out.println(myList[i]+" ");//打印这10个值
//  double max = 0; //注意:若是变量放在这个地方声明及初始化,在for循环外会有注释里面的错误
   if(myList[i] > max)
   max = myList[i];
  }
  System.out.println("The max number is: "+max); //max cannot be resolved to a variable
}
}

4 个回复

倒序浏览
这个与C语言中的局部变量与全局变量,有关系吗?
回复 使用道具 举报
你在for循环里边声明是局部变量,只在for循环之内有效,输出是在循环结束之后,肯定会变量没有声明的错误
把变量在for循环之外声明就没问题了,作为全局变量,在整个函数中都可以使用

评分

参与人数 1技术分 +1 收起 理由
船长 + 1 很给力!

查看全部评分

回复 使用道具 举报
变量是有自己的作用范围的。成员变量:定义在类内部,方法体或语句块外部,作用在整个类。局部变量:定义在方法体或语句块内部,作用在方法体或语句块内,方法体或语句块执行完就消失了,外部无法访问到。
回复 使用道具 举报
本帖最后由 lwh316658735 于 2014-12-5 11:50 编辑

两变量重名了,会报错!
两个max都在main方法里,方法里的叫局部变量,在方法被加载时一起在栈空间,栈空间就会出现max变量,而max的生命周期是在该方法运行完后消失,但是方法并没有运行完在for循环中又像栈中开辟max变量空间,所以重复了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马