java 为什么我的数组在创建时不填充null?

hec6srdp  于 2022-12-21  发布在  Java
关注(0)|答案(3)|浏览(137)

我是一个AP cs的学生,我们正在做一个实验来帮助我们练习使用数组。然而,我有一个问题与我的方法之一的特定测试。该方法应该采取一个数组中的名称列表,并把他们变成他们的初始形式。例如:肯特,克拉克会变成KC。我有这部分下来,但其中一个测试似乎不工作。这是我的代码:

public String[] initialsArray() {
    String[] initials = new String[numberActive];
    for (int i = 0; i < initials.length; i++) {
        initials[i] = "" + names[i].charAt(names[i].indexOf(",") + 2) +
                names[i].charAt(0);
    }
    return initials;
}

numberActive表示数组中已填充空格的个数。
本方法的检测为:

@Test
public void testInitialsArray()
{
    WaitingList w1 = new WaitingList();
    assertEquals(null,w1.initialsArray());
    w1.addName("Bushell, Greg");
    w1.addName("Kent, Clark");
    w1.addName("Crunch, Captain");
    w1.addName("Fields, Justin");
    w1.addName("Kent, Clark");
    w1.addName("Wayne, Bruce");
    w1.addName("Jordan, Michael");
    String[] actualInitials = w1.initialsArray();
    String[] expectedArrays = {"GB","CK","CC","JF","CK","BW","MJ"};
    for(int i = 0; i < actualInitials.length; i++)
    {
        assertEquals(expectedArrays[i],actualInitials[i]);
    }

}

我的问题是测试的第2行,除了这个,其他一切都正常,老实说,我不确定这是什么,甚至要测试。
谢谢你的帮助。
我还没有尝试过任何东西,好像我甚至不知道第2行测试的是什么。

7rtdyuoh

7rtdyuoh1#

因为你在initialsArray方法中初始化了你的数组,所以你的数组不会是空的。2如果你正在测试一个空数组,你应该检查一下数组的长度是否等于0。

iyzzxitl

iyzzxitl2#

initialsArray()方法定义并返回一个数组。

public String[] initialsArray() {
  String[] initials = new String[numberActive];
  ... fill array ...
  }
  return initials;
}

所以这个方法永远不会返回null,这意味着Assert总是失败。

assertEquals(null , w1.initialsArray());

另外,假设这是一个JUnit测试,您应该使用assertNull(w1.initialsArray());

az31mfrm

az31mfrm3#

你的initialsArray方法返回一个数组的 reference,你可以把一个reference看作是一个地址,用来找到某个东西,这个地址是对象所在内存的第一个八位字节。
你的代码示例化一个数组,捕获一个对该数组的引用,并将该引用返回给调用方法。数组不是返回的,而是返回一个对该数组的引用。
在你的代码中,这个引用永远不会为空,你的代码总是示例化一个新的数组,数组的内容(数组中的元素)是否为空是另一个问题。

相关问题