2013-10-08 123 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]