我不确定我是否理解代码,但据我所知,您发布的内容有效。
我对这一切进行了重构,使其更易于消化 - 更好的命名,提取到方法的许多部分,消除了对扫描仪的需求,因此我可以针对“旋转”方法运行一堆我自己的测试用例来检查输入与预期输出。
import java.util.Arrays;
public class Application {
public void run(int testCases, int arraySize, int rotations, String[] arrayElements) {
for (int i = 0; i < testCases; i++) {
getRotatedArray(arraySize, rotations, arrayElements);
}
}
public int[] getRotatedArray(int arraySize, int rotationXTimes, String[] arrayElements) {
int[] a = new int[arraySize];
populateIntArray(arrayElements, a);
rotateArray(rotationXTimes, a);
Arrays.toString(a);
return a;
}
private void rotateArray(int rotations, int[] array) {
for (int m = 1; m <= rotations; m++) {
// get last item of array...
int length = array.length;
int temp = array[length - 1];
// shift elements 1 position right
for (int p = 1; p < length; p++) {
array[length - p] = array[length - (p + 1)];
}
// first element becomes last.
array[0] = temp;
}
}
private int[] populateIntArray(String[] arrayElements, int[] array) {
for (int j = 0; j < arrayElements.length; j++) {
array[j] = Integer.parseInt(arrayElements[j]);
}
return array;
}
}
一些测试:
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
public class ApplicationTest {
private Application app;
@Before
public void setUp() {
app = new Application();
}
@Test
public void test1() {
int[] result = app.getRotatedArray(0 , 0, new String[]{});
assertEquals(0, result.length);
}
@Test
public void test2() {
int[] result = app.getRotatedArray(1 , 0, new String[]{"0"});
assertEquals(1, result.length);
assertArrayEquals(new int[]{0}, result);
}
@Test
public void test3() {
int[] result = app.getRotatedArray(1 , 1, new String[]{"0"});
assertEquals(1, result.length);
assertArrayEquals(new int[]{0}, result);
}
@Test
public void test4() {
int[] result = app.getRotatedArray(1 , 2, new String[]{"0"});
assertEquals(1, result.length);
assertArrayEquals(new int[]{0}, result);
}
@Test
public void test5() {
int[] result = app.getRotatedArray(2 , 0, new String[]{"0","1"});
assertEquals(2, result.length);
assertArrayEquals(new int[]{0,1}, result);
}
@Test
public void test6() {
int[] result = app.getRotatedArray(2 , 1, new String[]{"0","1"});
assertEquals(2, result.length);
assertArrayEquals(new int[]{1,0}, result);
}
@Test
public void test7() {
int[] result = app.getRotatedArray(2 , 2, new String[]{"0","1"});
assertEquals(2, result.length);
assertArrayEquals(new int[]{0,1}, result);
}
@Test
public void test8() {
int[] result = app.getRotatedArray(3 , 0, new String[]{"0","1","2"});
assertEquals(3, result.length);
assertArrayEquals(new int[]{0,1,2}, result);
}
@Test
public void test9() {
int[] result = app.getRotatedArray(3 , 1, new String[]{"0","1","2"});
assertEquals(3, result.length);
assertArrayEquals(new int[]{2,0,1}, result);
}
@Test
public void test10() {
int[] result = app.getRotatedArray(3 , 2, new String[]{"0","1","2"});
assertEquals(3, result.length);
assertArrayEquals(new int[]{1,2,0}, result);
}
@Test
public void test11() {
int[] result = app.getRotatedArray(3 , 3, new String[]{"0","1","2"});
assertEquals(3, result.length);
assertArrayEquals(new int[]{0,1,2}, result);
}
@Test
public void test12() {
int[] result = app.getRotatedArray(4 , 0, new String[]{"0","1","2","3"});
assertEquals(4, result.length);
assertArrayEquals(new int[]{0,1,2,3}, result);
}
@Test
public void test13() {
int[] result = app.getRotatedArray(4 , 4, new String[]{"0","1","2","3"});
assertEquals(4, result.length);
assertArrayEquals(new int[]{0,1,2,3}, result);
}
}
所有测试都通过了。
如果您阅读了测试,您应该能够看到我正在提供一些 输入,执行特定方法(执行一些 过程),并检查 >输出与我的预期相反。
即我正在测试 getRotatedArray 是否符合预期。确实如此。
当您说它中断并且您不知道在哪里时,我建议添加一些 System.out.println 语句,以便您可以验证应用程序正在执行您认为它正在执行的操作。