这有两个简单代码,代码(一)显示两个错误找不到符号,但是我把代码改成(二)之后就能正常运行了,请帮我解释一下为什么???
(一)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]);
 
          }
        }   }
}

解决方案 »

  1.   

    这两行(20,21行)出现问题:for (i = 0; i < s.length; i++)
    System.out.println(s[i]);原因:
    S变量没有定义,你在14行定义的S变量是一个局部变量
    你的代码二里,是将上面两行的代码放到和S变量一个块里,所以不报错,如果想代码一不报错,就将S变量提出来。
      

  2.   

    http://topic.csdn.net/u/20121022/19/39a6a743-41a2-4332-a65f-a0babfa0bd04.html?seed=1917906223&r=79972856#r_79972856
    看下这个关于UDP的发送图片的问题
      

  3.   

    第一个代码可以这样改:  import java.util.*;
    class Bo
    {
            public static void main(String agrs[])  
      {
      int i,x,n;
      for(x=0;x<2;x++)    //x的取值范围
      { 
      if(x==0)      //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++)     //这儿就是在程序1正确的前提下,在这儿再加上一个输出
     // System.out.println(s[i]);   //  输出的是 1,2,3,4
      }
      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]);
      }  }
    }
    }
    这样改后输出的结果是 5 6 7 8 ,主要是{}的问题;
    if 与else 是一个整体的结构, 
    在 for(x=0;x<2;x++)控制下:
    if 的结构是这样的:
    if(x==0)      //x=0的情况
      {
      String s[]=new String[4]; //初始化数组
      for(i=0,n=1;i<4;i++)    //遍历这个数组
      { 
      s[i]=String.valueOf(n);n++; 
      }
      }else 内部也应该由两个配套的两个{}控制的:
    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]);
      }所以第一个程序的错误就是大括弧的问题;
      

  4.   

    变量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已经定义过了,且在它的生命周期内,所以在编译期不会报错