在Java中,如何解决XXXX无法解决的错误?

时间:2015-09-28 21:12:01

标签: java

在下面的拍摄方法中,对于for循环中的两个变量'hmm'和'sequence',它总是显示错误,它们无法作为变量求解,但显然我已经在'if'体中声明了它们在这个方法的上半部分。为什么不识别'嗯'和'序列'?

public Action shoot(GameState pState, Deadline pDue) {
        int totalBirdsOfThisRound=pState.getNumBirds();
        boolean HMMinitialized=false;
        if (!HMMinitialized){
            HMM[] hmm=new HMM[totalBirdsOfThisRound];
            initializeHMM(pState,hmm);
            HMMinitialized=true;
            Vector<Integer>[] sequences=(Vector<Integer>[]) new Object[totalBirdsOfThisRound];
        }
        for(int i=0;i<totalBirdsOfThisRound;i++){
            Bird aBird=pState.getBird(i);
            for(int j=sequences[i].getLength();j<aBird.getSeqLength();j++)
                sequences[i][j]=aBird.getObservation(j);
            hmm[i].estimateModel(sequences[i]);
            int lastMove=aBird.getLastObservation();
            double[] currentStateDistribution=new double[10];
            Arrays.fill(currentStateDistribution, 0);
            currentStateDistribution[lastMove]=1;
        }
        return cDontShoot;
    }

3 个答案:

答案 0 :(得分:1)

Java具有块范围。您只能访问声明它的块中的变量。通常,块以{开头,以}结尾。但是如果/ while / for没有括号和下面的行也可以组成一个块。因此,要使hmmfor循环中可用,您需要在包含for循环的块中声明它。

以下是代码中块的分层视图:

shoot
    hmm // Accessible in for-loop if it's declared here
    if-statement
        hmm // Not accessible if it's declared here
    for-loop i
        for-loop j

答案 1 :(得分:0)

您正在if条件中初始化HMM[] hmm,如果控件未到达内部,则不会初始化。所以如果条件如下,请把它放在外面。

HMM[] hmm = null;

答案 2 :(得分:0)

HMM阵列超出范围。在if块之外声明HMM数组或将for循环移动到if块以解决此问题。