2016-03-02 29 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