2016-03-02 136 views
0

我一直在尝试将JavaScript函数转换为Java方法,从而通过参数传递一个数字,如果两个并发数字甚至是一个破折号“ - ”将放置在它们之间。使用ArrayList出界错误

这工作正常,只要最后一位数字不是偶数,如果它甚至我得到一个越界误差,我假设是使用if语句使用arr2.get(i + 1)其中第一部分条件是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

因此,您尝试获取不存在的元素。它令你感到惊讶,导致问题?如果我是最大可能的指数,不要尝试获取元素(i + 1) – Stultuske

+0

你试图跟踪你的代码一步一步吗? (使用Eclipse \ Idea调试器) –

回答

4

要么将​​其更改为:

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

或者不检查i+1如果i ==arr2.size()

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); 
} 
+0

@Doto这对你有帮助吗?请注意或接受有用的建议。 – weston