日期:2014-05-20  浏览次数:21040 次

Java程序问题,帮忙找出问题!谢谢
这有两个简单代码,代码(一)显示两个错误找不到符号,但是我把代码改成(二)之后就能正常运行了,请帮我解释一下为什么???
(一)import java.util.*;
class Bo
{ public static void main(String agrs[])
  { int i,x,n;
  for(x=0;x<2;x++)
  { if(x==0)
  { String s[]=new String[4];
  for(i=0,n=1;i<4;i++)
  { s[i]=String.valueOf(n);n++;
  }
  }
  else
  { String s[]=new String[4];
  for(i=0,n=5;i<4;i++)
  { s[i]=String.valueOf(n);n++;
  }
  }
  for(i=0;i<s.length;i++)
  System.out.println(s[i]);
  }

  }
}
-------------------
(二)import java.util.*;
class Bo
{ public static void main(String agrs[])
  { int i,x,n;
  for(x=0;x<2;x++)
  { if(x==0)
  { String s[]=new String[4];
  for(i=0,n=1;i<4;i++)
  { s[i]=String.valueOf(n);n++;
  }
  for(i=0;i<s.length;i++)
  System.out.println(s[i]);
  }
  else
  { String s[]=new String[4];
  for(i=0,n=5;i<4;i++)
  { s[i]=String.valueOf(n);n++;
  }
  for(i=0;i<s.length;i++)
  System.out.println(s[i]);
 
  }
  }

  }
}

------解决方案--------------------
作用域的问题
------解决方案--------------------
探讨
这有两个简单代码,代码(一)显示两个错误找不到符号,但是我把代码改成(二)之后就能正常运行了,请帮我解释一下为什么???
(一)import java.util.*;
class Bo
{ public static void main(String agrs[])
{ int i,x,n;
for(x=0;x<2;x++)
{ if(x==0)
……

------解决方案--------------------
变量s,在使用for (i = 0; i < s.length; i++)
System.out.println(s[i]);
这里的时候,编译通不过,是因为编译器根本不认识s这个变量,也就是说在用到S之前,你没有创建它,你创建的那个s的作用域只有if (x == 0) {
String s[] = new String[4];
for (i = 0, n = 1; i < 4; i++) {
s[i] = String.valueOf(n);
n++;
}
}这个大括号里面能用,所以到for循环哪里,s的生命周期已经结束了,而你的第二份中,s的生命周期
String s[] = new String[4];
for (i = 0, n = 5; i < 4; i++) {
s[i] = String.valueOf(n);
n++;
}
for (i = 0; i < s.length; i++)
System.out.println(s[i]);
是这些,在你for循环体重用到的时候,s已经定义过了,且在它的生命周期内,所以在编译期不会报错