使用ArrayList超出界限错误

时间:2016-03-02 13:34:14

标签: java arraylist

我一直在尝试将JavaScript函数转换为Java方法,其中一个数字通过参数传递,如果两个并发数字甚至是一个破折号" - "会放在他们之间。

只要最后一个数字不均匀,这个工作正常,如果它甚至我得到一个越界错误,我假设是使用arr2.get(i + 1)的第一个if语句条件的一部分是true但是由于到达列表的末尾而无法满足第二个条件。有没有一种简单的方法来纠正这里的逻辑?

我对Java很陌生,并且遇到了一些我可以在JavaScript中轻松解决的问题,因为一些数据结构的行为方式不同。

public void dash(int someNumber) {
    int num = someNumber;
    String str = String.valueOf(num);
    String arr1[] = str.split("");
    String result = "";
    ArrayList<Integer> arr2 = new ArrayList<Integer>();
    for (int i = 0; i < arr1.length; i++) {
        int temp = Integer.parseInt(arr1[i]);
        arr2.add(temp); 
    }

    for(int i = 0; i < arr2.size(); i++) {

         if (arr2.get(i) % 2 == 0 && arr2.get(i + 1) % 2 == 0) {

            result = result + arr2.get(i) + "-";

        }

        else{
            result = result + arr2.get(i);
        }


    }
    System.out.println(result);
    }

}

main

public class mainController {

    public static void main(String[] args) {
        DashSort ds = new DashSort();
        ds.dash(245461);

    }

}

如果对此进行了修改,并且似乎工作正常。

    if (i + 1 == arr2.size()) {

result = result + arr2.get(i);  
}
else if (arr2.get(i) % 2 == 0 && i < arr2.size() && arr2.get(i + 1) % 2 ==0) {


        result = result + arr2.get(i) + "-";
    }

    else{
        result = result + arr2.get(i);
    }

2 个答案:

答案 0 :(得分:4)

将其更改为:

for(int i = 0; i < arr2.size()-1; i++) {

或者如果i+1

,请不要查看i ==arr2.size()

答案 1 :(得分:0)

如果您只使用输出字符串并使用整数逐位数字工作,则不必String.valueOf(num)str.split("")Integer.parseInt(arr1[i])

public static void dash(int someNumber) {
    int lastDigit = 1;
    StringBuilder sb = new StringBuilder();

    while (someNumber > 0)
    {
        int currentDigit = someNumber % 10;
        someNumber /= 10;
        if (lastDigit % 2==0 && currentDigit % 2==0)
          sb.append('-');
        sb.append(currentDigit);
        lastDigit = currentDigit;
    }

    String result = sb.reverse().toString(); //reverse because we processed the digits in reverse order

    System.out.println(result);
}