0

int i 似乎没有增加,while 或 for 循环似乎在数组中不起作用。这是什么原因?每当我单击时,行都会改变,我试图在数组列表中获取行#。

public static ArrayList<Integer> XCordPasted(int Row, int Column){

    ArrayList<Integer> XCord = new ArrayList<Integer>();

    int row = Row * (int)NumWidthTextures;
    int statRow = row;
    int i = 0;
    int g = i;

    if(XCord.isEmpty()){
        XCord.add(i,statRow);
        i=1;
    }else{
        XCord.add(i,statRow);
        i++;
    }
    if(XCord.size()>1){
        if(XCord.get(g-1)==XCord.get(g)){
            XCord.remove(g);
            i=XCord.size();
        }
    }
    return XCord;
}
4

2 回答 2

1

也许发布该程序的更多细节将有助于澄清整体逻辑。:-)

直到那时,根据贴出的代码,每次XCordPasted()调用该方法时,都会将XCord值初始化为一个 new ArrayList,所以条件语句

if (XCord.isEmpty())
{
    ...
}

始终是true,因此返回的ArrayList始终只有 1 个成员,并且int i参数将始终设置为1.

此外,该int g参数仅设置一次i(= 0),因此它的值始终为0. 如果条件(XCord.size()>1)为真,就会有一个ArrayIndexOutOfBoundsException因为XCord.get(g-1)调用。

于 2013-10-25T21:43:00.547 回答
1

我对您的代码有一些想法(不知道其目的):

public static ArrayList<Integer> XCordPasted(int Row, int Column){

行和列不应该大写。

int statRow = row;

创建一个statrow与 相同的新变量有什么意义rowrow另外,当它已经是方法的参数之一的名称时,为什么还要使用该名称?

if(XCord.isEmpty()){
    XCord.add(i,statRow);
        i=1;
} else{
    XCord.add(i,statRow);
    i++;
}

此时代码中的 XCord 必须为空。没有理由拥有ifelse声明。也许你打算在这里有一个循环?

if(XCord.size()>1){
    if(XCord.get(g-1)==XCord.get(g)){
        XCord.remove(g);
        i=XCord.size();
    }
}

此时代码中,XCord 的大小必须为 1。if语句中的条件必须为 false,因此它不会执行代码块中的内容。

因此,return 只返回XCord一个元素:statrow

请更新您的问题以说明该方法的用途。我注意到其中一个参数甚至没有被使用(int Column顺便说一句,它也应该是小写的)。

于 2013-10-25T21:40:44.587 回答