java 局部变量的作用域问题

tang_123_ 2016-08-20 05:17:20

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
就没有问题了,现在问题是代码是动态的,不方便赋值,不知有什么方法解决?谢谢!
...全文
499 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
codingjav 2016-08-21
  • 打赏
  • 举报
回复
搞成静态的 http://www.iteye.com/problems/8679
qq_31900971 2016-08-20
  • 打赏
  • 举报
回复
不知道你哪段代码是自动生成的,如果是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();
tang_123_ 2016-08-20
  • 打赏
  • 举报
回复
修改了下代码,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;
	}
}
tang_123_ 2016-08-20
  • 打赏
  • 举报
回复
引用 4 楼 jinwufeiyang 的回复:
java对象先创建实例才可以调用其方法
调用前已经赋值了。 firstScorer=scorers[first]
tang_123_ 2016-08-20
  • 打赏
  • 举报
回复
引用 3 楼 gf0515 的回复:
scorers没看到有初始化啊,这个数组是空的吧。
不用管scorers,假设scores以及赋过值了。
codingjav 2016-08-20
  • 打赏
  • 举报
回复
java对象先创建实例才可以调用其方法
Fatal Error 2016-08-20
  • 打赏
  • 举报
回复
scorers没看到有初始化啊,这个数组是空的吧。
baidu_28053655 2016-08-20
  • 打赏
  • 举报
回复
还是蒙,我是新手,好蒙
ctrlzhang 2016-08-20
  • 打赏
  • 举报
回复
java中,类对象声明是不会产生对象实例的, 需要new出来后,才可以使用对象方法.

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧