任务是将数组中的元素从一个等于或大于int i的索引开始,向右一步。对不起,通常这很容易谷歌,但我有一个Junit测试,我需要满足。
它应该符合JUnittest的要求:
@Test
public void testShiftElements() {
String[] a = { "a", "b", "c", "d", "e" };
String[] b = a.clone();
int i = 1;
Arrays.shiftElements(a, i);
for (int j = 0; j < i; j++) {
assertEquals(b[j], a[j]);
}
for (int j = i; j < a.length - 1; j++) {
assertEquals(b[j], a[j + 1]);
}
}
JUnistest是否正常工作,因为测试似乎要求例如 &#34;&#34;应该等于&#34; b&#34;,&#34; b&#34;应该等于&#34; c&#34; 。这是不可能的。 这是我的代码,它会改变。
public static String[] shiftElements(String a[], int i) {
String[] b = new String[a.length + i];
for (int j = 0; j < a.length; j++) {
b[j] = a[j];
}
for (int d = i; d < b.length - 1; d++) {
for (int c = i; c < b.length - 1; c++) {
String temp = b[c + 1];
b[c + 1] = b[c];
b[c] = temp;
}
}
return b;
}
答案 0 :(得分:0)
测试是正确的,必须这样做。只是没有回报,但有无效。
public static void shiftElements(String[] a, int i) {
for (int j = a.length -1; j > i; j--) {
if (j >= i) {
a[j] = a[j - i];
}
}
}
或者像这样,如果我不想删除最后一个字符串。
public static void shiftElements(String a[], int i) {
for (int d = i; d < a.length - 1; d++) {
for (int c = i; c < a.length - 1; c++) {
String temp = a[c + 1];
a[c + 1] = a[c];
a[c] = temp;
}
}
}