2013-10-08 165 views
0
int [] f = {1,2,3,4,5,5,4,3,2,1}; 
int [] b = {6,1}; 
System.out.println(Arrays.toString(hide(f,b))); 

public static int [] hide(int [] front, int [] back) { 
    int temp; 
    int extraTemp; 
    int nextTemp = 0; 

    int [] hiddenAt = new int[front.length]; 
    //int [] shownAt = new int[front.length]; 

    for(int x = 0; x < front.length; x++){ 
     for(int y = 0; y <= back.length; y++){ 
      temp = x; 
      if ((back.length > front.length) || (front[x] < 0 || back[y] < 0) || (front.length < 1 || back.length < 1)) { 
       System.exit(0); 
      } 

      if (y < back.length - 1){ 
      nextTemp = Math.abs(back[y + 1] - front[x + 1]); 
      } 
      else { 
       nextTemp = 0; 
      } 

      if (front[x] > back[y]) { 
       System.out.println(temp); 
      } 
      else if (front[x] < back[y] && y >= back.length - 1) { 
       extraTemp = back[y] - front[x]; 

       if (extraTemp > nextTemp){ 
        extraTemp = nextTemp; 
       } 
       System.out.println(extraTemp); 
      } 
      else if (front[x] < back[y]) { 
       extraTemp = back[y] - front[x]; 

       if (extraTemp > nextTemp){ 
        extraTemp = nextTemp; 
       } 
       System.out.println(extraTemp); 
      } 
     } 
    } 
    return hiddenAt; 
} 

println正在被替換以查看正在生成的值。當我確定這些值是正確的時候,他們將是hiddenAt[z] = temp;不循環的循環和陣列

我需要用它來back[0]然後front[1]back[1]等比較front[0]之後,它會變爲一個:front[1]back[1]然後用back[2]直到front[]結束front[2]。我想找出最低的區別在哪裏。 (在這種情況下,當[]的數字是4和5.)

我得到兩個錯誤,一個說39行 if((back.length> front.length)||(front [x ] < 0 || back [y] < 0)||(front.length < 1 || back.length < 1)){ System.exit(0); }

是錯誤的,並且第9行也是錯誤的。 公共類2 { 公共靜態無效的主要(字串[] args){

int [] f = {1,2,3,4,5,5,4,3,2,1}; 
    int [] b = {6,1}; 
    System.out.println(Arrays.toString(hide(f,b))); 
} 

確切的錯誤是:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 
at hw2.hide(hw2.java:39) 
at hw2.main(hw2.java:9) 
+2

不太確定你的問題是什麼!你的帖子中應該有一個問號:P – Calpis

+0

你得到的輸出是什麼,你期待什麼? –

+0

我得到一個錯誤,但我想要一個{-4,-5}的打印數組(數字對應於前面數組中兩個索引之間的差異最小化的索引號)負號僅僅意味着差異不存在0. – user2449907

回答

0

你的問題是,數組索引越界,所以你嘗試的訪問不存在的元素。

在線路

如果((back.length> front.length)||(前[X] < 0 ||回[Y] < 0)||(front.length < 1 || back.length < 1)){ ,你說你的back[y] < 0 for語句去<= back.length

for(int y = 0; y <= back.length; y++){ 

所以後面有2個(有2種元素),但是你會做這三個筋斗上倍0,1,2的長度第三個循環沒有back[2]back[0] = 6back[1] = 1

因此更改for(int y = 0; y <= back.length; y++){for(int y = 0; y < back.length; y++){將修復此特定錯誤

記住,長度從1開始(如果它有元素)的索引從0開始。

+0

這在行創建一個不同的錯誤(\t \t \t \t \t nextTemp = Math.abs(背[Y + 1] - 前[X + 1]);) – user2449907

+0

@ user2449907 - 此** **揭示另一個錯誤。它一直在那裏。 –

+0

我可以問,爲什麼當我進行修改時......它不再同時增加x和y,所以它不會比較正確的元素? – user2449907

0

這是您的第二陣列問題:

 if (y < back.length - 1){ 
     nextTemp = Math.abs(back[y + 1] - front[x + 1]); 
     } 
     else { 
      nextTemp = 0; 
     } 

雖然你檢查y < back.length - 1你做做同樣的x

所以,你需要if (y < back.lenth-1 && x < front.length-1)假設你想引用front[x+1]