如果语句没有触发

时间:2014-09-02 08:50:45

标签: java

我有一个问题,我的if条件没有正确触发,我不知道为什么。 这是调用ModelField的函数:

public void squareMaker(){
    for (int i = 0; i<=_model.getSizeofgame()-1; i++){
        _squares.add(new JButton());
        _model.Modelfield(i, 'u');
        _squares.elementAt(i).setBorder(_border);
        _squares.elementAt(i).setActionCommand("" +i);
        _squares.elementAt(i).addActionListener(_controller);
        this.add(_squares.get(i));
        System.out.println("Square in gamepanel " + i);
    }
}

模型中的实际功能:

public void Modelfield(int pos, char symb){
    int position=pos+1;
    System.out.println("Adding square in model "+position +" boardsize "+boardsize);

    if((position%boardsize)==0){
        System.out.println("Right edge "+position);
        if(position<=Boardwidth){
            modelVector.elementAt(position).redge=true;
            System.out.println("Top and Right edge ");
        }
        else{
            System.out.println("Not top edge");
        }
    }
    else {
    }
    modelVector.addElement(new Fieldpiece(position,symb));
}

所以应该发生的事情是,当我从squareMaker调用Modelfield时,它永远不会超过 if((position%boardsize)==0)

有没有人知道为什么?

2 个答案:

答案 0 :(得分:1)

一般来说,如果声明:

if((position%boardsize)==0){

不会触发,因为position % boardsize不等于零。

找出为什么是基本调试101:如果代码没有按您认为的那样行事,则输出影响代码的所有信息。< / p>

例如,在if语句之前插入以下行:

System.out.println ("=====");
System.out.println ("position  = " + position);
System.out.println ("boardsize = " + boardsize);
System.out.println ("modulo    = " + position % boardsize);
System.out.println ("=====");

然后检查输出,这应该有希望告诉你完全问题是什么(如果你不想检查生成的输出,你也可以通过调试器运行/步骤代码通过这种方法)。

如果您已经拥有代码,您认为输出足够的信息进行调试,则应检查 (如果您需要我们的帮助,请向我们显示输出)。在这种情况下,它包含以:

开头的输出行
Adding square in model

答案 1 :(得分:0)

我不是专家,但我的猜测是,当position%boardsize执行时,它不会== 0。我会检查以确保positionboardsize的值反映您的期望并从那里排除故障。