public class LocalVarTest { public static void main(String[] args) {
LocalVar var = new LocalVar();
var.doNext();
}}class LocalVar{
private Scorer[] scorers;
private boolean more;
private int lastDoc;

public boolean doNext(){
    int first=0;
    Scorer lastScorer = scorers[scorers.length-1];
    Scorer firstScorer;
    while (A.isTrue(more && (firstScorer=scorers[first]).doc() < (lastDoc=lastScorer.doc()), 1, 2)) {
      more = firstScorer.skipTo(lastDoc);
      lastScorer = firstScorer;
      first = (first == (scorers.length-1)) ? 0 : first+1;
    }
    return more;
}
}class A{
private static int[] a = new int[100];

public static boolean isTrue(boolean isA, int i, int j){
a[i] = j; 
return isA;
}
}class Scorer{ public int doc() {

return 0;
} public boolean skipTo(int lastDoc) {

return false;
}
}
一直报 The local variable firstScorer may not have been initialized 错误,如果把 firstScorer 赋个初值,如:
firstScorer = null 
就没有问题了,现在问题是代码是动态的,不方便赋值,不知有什么方法解决?谢谢!

解决方案 »

  1.   

    java中,类对象声明是不会产生对象实例的,  需要new出来后,才可以使用对象方法.
      

  2.   

    scorers没看到有初始化啊,这个数组是空的吧。
      

  3.   

    java对象先创建实例才可以调用其方法
      

  4.   

    不用管scorers,假设scores以及赋过值了。
      

  5.   

    调用前已经赋值了。
    firstScorer=scorers[first]
      

  6.   

    修改了下代码,scorers 值不为空的。public class LocalVarTest { public static void main(String[] args) {
    Scorer scorer1 = new Scorer();
    Scorer scorer2 = new Scorer();
    Scorer[] scorers = {scorer1, scorer2};
    LocalVar var = new LocalVar(scorers);
    var.doNext();
    }}class LocalVar{
    private Scorer[] scorers;
    private boolean more;
    private int lastDoc;

    public LocalVar(Scorer[] scorers){
    this.scorers = scorers;
    }

    public boolean doNext(){
        int first=0;
        Scorer lastScorer = scorers[scorers.length-1];
        Scorer firstScorer = null;
        while (A.isTrue(more && (firstScorer=scorers[first]).doc() < (lastDoc=lastScorer.doc()), 1, 2)) {
          more = firstScorer.skipTo(lastDoc);
          lastScorer = firstScorer;
          first = (first == (scorers.length-1)) ? 0 : first+1;
        }
        return more;
    }
    }class A{
    private static int[] a = new int[100];

    public static boolean isTrue(boolean isA, int i, int j){
    a[i] = j; 
    return isA;
    }
    }class Scorer{ public int doc() {

    return 0;
    } public boolean skipTo(int lastDoc) {

    return false;
    }
    }
      

  7.   

    不知道你哪段代码是自动生成的,如果是doNext方法自动生成的话,那就用AOP,看是不是你想要的。//定义接口
    public interface LocalVarInterface{
      public boolean doNext();
    }//实现接口
    public class LocalVar implements LocalVarInterface{
        private Scorer[] scorers;
        private boolean more;
        private int lastDoc;
         
        public boolean doNext(){
          //里面没办法了,编译期错误,又不想给变量赋值,干脆清空了
          return true;
        }
    }//代理
    public class ProxyFactory implements InvocationHandler{ private Object lvar;

    public Object createLocalValProxy(Object obj){
    this.lvar = obj;
    return Proxy.newProxyInstance(this.lvar.getClass().getClassLoader(), this.lvar.getClass().getInterfaces(), this);
    }

    public Object invoke(Object proxy, Method method, Object[] args)
    throws Throwable {
     LocalVar var = (LocalVar)this.lvar;
     
                    
                   Boolean bl = new Boolean(false);
                   //里面去处理,返回true或者false
    return bl;
    }
    }
    //main
    LocalVar   lv    =new   LocalVar();
    ProxyFactory factory = new ProxyFactory();
    LocalVarInterface  lviface = (LocalVar)factory.createStudentProxy(lv);
    lviface.doNext();
      

  8.   

    搞成静态的
    http://www.iteye.com/problems/8679