问题-
蒙克喜欢在数组上预制不同的操作,因此作为哈克地球学校的校长,他给他的新学生米什基布置了一个任务。Mishki将被提供一个大小为N的整数数组A和一个整数K,在这里她需要将数组向正确的方向旋转K步,然后打印结果数组。由于她是新来的,请帮助她完成任务。
输入:
第一行将由一个表示测试用例数的整数T组成。对于每个测试用例:
Scanner sc = new Scanner(System.in);
int t = sc.nextInt();
for (int i = 0; i < t; i++) {
int n = sc.nextInt();
int k = sc.nextInt();
int v[] = new int[n];
for (int j = 0; j < n; j++) {
v[j] = sc.nextInt();
}
for (int m = 1; m <= k; m++) {
int temp = v[n - 1];
for (int p = 1; p < n; p++) {
v[n - p] = v[n - (p + 1)];
}
v[0] = temp;
}
for (int a : v) {
System.out.print(a + " ");
}
}
我不确定我是否理解代码,但你发布的东西,据我所知是有效的。
我对它进行了重构,使其更易于消化--更好的命名,将大量部分提取到方法中,消除了对扫描器的需要,这样我就可以针对“Rotate”方法运行一堆我自己的测试用例,以检查输入与预期输出。
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
语句,这样您就可以验证应用程序正在执行您认为的操作。
我写了如下界面: 和以下类 您可以看到,中的my是一个,而接口是一个字符串类型。我本以为是编译器错误,但这是如何工作的呢?
我正试图减少gwt项目的编译时间,使用maven概要文件来设置是需要所有排列还是只需要其中的一部分。 我按照教程在这里:http://www.bonitasoft.org/blog/tutorial/speed-up-gwt-i18n-compilation-using-maven-profiles/ 但是,它没有说明如何创建这两个模块(生产和开发)。这些都是应用程序。gwt。xml文件,如果是,
null 有人能解释一下目标代码和机器代码这两个概念之间的区别吗?这些是在哪些情况下产生的?
我的问题与这一声明有关: 立即释放此语句对象的数据库和JDBC资源,而不是等到它自动关闭时才释放。http://docs.oracle.com/javase/6/docs/api/java/sql/Statement.html#close() 那么,在哪些情况下语句对象会自动关闭?
问题内容: 我知道AngularJS在ng-repeat上设置了一些监视。此时设置了哪种手表? 另外,有人可以解释在每种情况下会发生什么吗?我想知道我有很多物品,所以如果我用其他方式写的话,不会被那些本可以淘汰的手表所困扰。 之一 二 三 四个 问题答案: 每个人都会在上设置一个$ watch 。(如果您查看ng- repeat源代码 ,则其中大多数是$ watch方法的watchExpressi
远程类加载是指加载未在执行位置显示的类。 例如,JavaApplet需要将类从服务器加载到本地并在本地执行。 一些包含URLClassLoader的程序需要从网络加载类,并在本地执行。 RMI怎么样?我找到了一个名为RMIClassLoader的类?是远程类加载吗?