4

私はしばらくこの問題に直面しており、イライラし始めています。コードは、val に最も近い a の k 個の要素を返す必要があります。このメソッドは、k が負の場合は IllegalArgumentException をスローし、k == 0 または k > a.length の場合は長さゼロの配列を返します。このメソッドに対してテスト ケースを実行すると、次のように報告されます。

There was 1 failure:
1) nearestKTest(SelectorTest)
java.lang.AssertionError: expected:<[I@12c5431> but was:<[I@14b6bed>
       at SelectorTest.nearestKTest(SelectorTest.java:21)

FAILURES!!!
Tests run: 1,  Failures: 1

これは、予想が実際と一致しなかったことを意味します。私はそれを理解できませんでした。:(

public static int[] nearestK(int[] a, int val, int k) {
  int[] b = new int[10];
  for (int i = 0; i < b.length; i++){
     b[i] = Math.abs(a[i] - val);
  }
  Arrays.sort(b);      
  int[] c = new int [k];
  for (int i = 0; i < k; i++){
     if (k < 0){
        throw new IllegalArgumentException("k is not invalid!");
     }
     else if (k == 0 || k > a.length){
     return new int[0];}
     else{
     c[i] = b[i];}   
  }
  return c;   
}


Test case:

import org.junit.Assert;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;


public class SelectorTest {


   /** Fixture initialization (common initialization
    *  for all tests). **/
   @Before public void setUp() {
   }


   /** A test that always fails. **/
   @Test public void nearestKTest() {
    int[] a = {2, 4, 6, 7, 8, 10, 13, 14, 15, 32};
    int[] expected = {6, 7};
    int[] actual = Selector.nearestK(a, 6, 2);
    Assert.assertEquals(expected,actual);
   }
}
4

2 に答える 2

8

参照を比較しObjectています。Arrays.equals配列の内容を比較するために使用します

Assert.assertTrue(Arrays.equals(expected, actual));

またはJUnitassertArrayEquals

Assert.assertArrayEquals(expected, actual);

@Stewart の提案どおり。明らかに後者の方が簡単です。

于 2013-09-02T17:17:19.200 に答える
3

使用する

Assert.assertArrayEquals(expected, actual);
于 2013-09-02T17:18:08.293 に答える