class getstring
{
public static void main(String[] args)
{ System.out.println("input");
int b=0;
char c[]=new char[100];
     int a=0;
    char d ;
while(true)
{    
 try
      {
 a=System.in.read();
      }
     catch(Exception e)
      {
      e.printStackTrace();
      }
     d=(char)a;
     c[b++]=d;
     if(d=='\n')
      {
      for(int i=0;i<b;i++)
      System.out.print(c[i]); 
      b=0;
      }
     if(c[0]=='b'&&c[1]=='o'&&c[2]=='y')
     break;
 }
}
}象这个程序怎么如果不给a付0值,就通不过编译?
或是d='';也不通不过,
还有那个break能用return(0)代替吗?return(0)是干什么的,经常见
请大家指点指点我

解决方案 »

  1.   

    如果不初始化,那么这个变量的默认值为null
    有些函数要求参数不能为null
      

  2.   

    首先你要弄清楚 
    局部变量和对象成员成员区别
    局部变量通俗一点就是方法里面定义的变量
    如 你的main方法里面的 int b=0;
    局部变量在Java里面使用前要显式的赋值,不然会编译错误
    对象成员通俗讲就是方法外定义的变量,如果你不赋值 默认会有一个值 对象为null,
                   基本类型为相应的默认值      看看下面的类 class Test {
       int ii ; //对象成员
       public void hhh() {
          int b ; //局部变量
          System.out.println(ii);//ok,不需要显示赋值 就有默认值
          //b = 0 ;              如果这句注释掉,编译错误  
          System.out.println(b); //wrong  
       }
    }
    体会一下所以你要份情局部变量和对象成员
      

  3.   

    不行啊,如果把  
    int a;
    放在main外面就付值,不付值都编译不了啊
    那你说那个char d怎么就不用付值呢?
      

  4.   

    int a 放在mian外面 因为main是 static的方法而 a是对象的成员属性,所以不能在static里面直接引用a
    而要通过一个对象 new getstring().a 引用或者 static int a ;这样定义a就可以了
      

  5.   

    char d ;
       d=(char)a;你这里已经对d赋值了 ,所以可以啊你试试下面的语句 肯定不可以  char d ;
      d++;  //没有赋值就调用
      d=(char)a;   
      

  6.   

    关键还是弄清楚局部变量和对象成员的问题。局部变量在使用前是要赋值的,而对象成员在不赋值的情况下是默认为null。
      

  7.   

    懂了,可以编译拉,就是那个return 还是不怎么清楚,return(0)干什么,结束循环?
      

  8.   

    break 是终止while循环的
    用return是让函数返回的在你的程序里可以替代区别在于用return的话 该函数下面的语句就不能执行了
    你的类里面while{} 后面没有语句了 所以效果一样