最外面的if如果不符合不就max不就没有赋值了???

解决方案 »

  1.   

    系统不会给局部变量默认初始化,所以此时max只是一个形参,必须赋予初始值以后才能使用
      

  2.   

    这个问题你只需要明白变量的作用域即可,你这个代码写的本身就有问题,如果a<b是不是直接不进if(a>b)的大括号,建议你用eclipse工具,边写代码,有问题的代码会直接显示出来,不要嵌套很多的if-else,这不是很好的编码习惯哦!
      

  3.   

    由于楼主在最后打印时调用了max所以会提示必须赋予初值,因为程序只知道你调用了该变量,并不知道你是否会修改该变量,如果为赋初值,这块内存就是一个未知的内存,如果此时改变该内存的值,会产生意向不到的结果,因此编译器提示你初始化。
      

  4.   


    因为这里根本就没有使用max呀,你在打印的时候用的都是abc
      

  5.   

    这是lint静态语法检查 这个功能算是编译器的子功能  因为检查出这个if一定不会执行 所以给你报错了
      

  6.   

    因为编译器会检查你所有的业务逻辑分支,如果没走if(a<b) 的话,你最终直接打印,而没有赋初值
    所以检查不过,编译不过。
      

  7.   

    哥 你在骗你自己吗? max必须声明赋值,下面那个声明了max if里面有和max有关的赋值吗? 不都是输出的abc值  并没有让max=a什么的赋值操作啊
      

  8.   

    局部变量必须赋初始值,不然会出现错误。全局变量可以不赋,不赋值的话在初始化时会自动赋值(引用类型为Null,int基本数据类型为0,double/flaot数据类型为0.0,布尔类型为false,char类型为空(什么都没有不是Null))。
      

  9.   

    max本事是形参,如果给形参赋值,形参是必须有初始值的,
      

  10.   

    你要分清楚局部变量和全局变量,在main方法中的变量成为局部变量,要使用的话必须要赋值,在main方法之外的变量不需要赋值,调用的时候默认赋初始值
      

  11.   

    首先局部变量是要进行赋值的,如果你的编译器可以预编译的话,你的代码是无法通过的;
    其次,不知道你的max变量有啥作用,反正在贴出来的代码中,max根本没用;
      

  12.   

    public static void main(String[] args) {

    int a=10;
    int b=20;
    int c=30;
    int max;
    if(a>b){
    if(a>c){
    max=a;
    }else {
    max=c;
    }
    if(b>c){
    max=b;
    }else{
    max=c;
    }
    }else{
    max=0;
    }
    System.out.println("max:"+max);
    }你只要加个第一层if的else块给max赋值就不会报错了,楼上也有很多人说了,当你的第一层if条件不满足的时候,程序会直接打印max,而max没有初值就会报错