我坚持使用这个简单的JUnit测试方法,因为我不知道如何传递这个有迭代器的方法。如果有人可以看看真的很有用。
这是主要课程:
public class Main {
public static void main(String[] args) {
final List<Integer> numbers = Arrays.asList(3, 4, 6, 1, 9);
final Integer x = Integer.valueOf(1);
System.out.println(findSame(numbers.iterator(), x, 0));
}
public static final int findSame(Iterator<Integer> iterator, Integer x, int idx) {
if (!iterator.hasNext()) {
return -1;
}
if (iterator.next().equals(x)) {
return idx;
} else {
return findSame(iterator, x, idx+1);
}
}
}
这是我的测试试用方法,它不起作用。 我主要遇到迭代器问题以及如何在这个测试方法中传递这些特定值:
@Test
public void searchNumReturnsIndex1(){
Main instance = new Main();
int x = 1;
Iterator<Integer> iterator;
int result = Main.findSame(null, x, 3);
assertEquals(2, instance.findSame(null,x, 3));
}
答案 0 :(得分:1)
假设你这样做是为了练习将迭代器作为参数传递,你应该做的是:
public class main {
public static void main(String[] args) {
// put whatever you want here, but if 'findSome' gets it's iterator as an argument,
// then you shouldn't be trying to define it's list here. It's list is being passed
// to it as an argument.
}
/* don't put final here unless you are working with subclasses and don't want them making their own versions of findSame */
public static int findSame(Iterator<Integer> iterator, Integer x, int idx) {
if(!iterator.hasNext()) {
return -1;
}
if(iterator.next().equals(x)) {
return idx;
} else {
return findSame(iterator, x, idx+1);
}
}
}
测试应该是这样的:
@Test
public void searchNumReturnsIndex1() {
Main instance = new Main();
List<Integer> numbers = Arrays.asList(3, 4, 6, 1, 9);
Iterator<Integer> iterator = numbers.iterator();
int result = instance.findSame(iterator, 1, 3);
assertEquals(2,result);
}
这应该编译并测试您的代码试图测试的内容。但是你的设计存在一些问题。
首先,你不应该让findSame接受第三个参数,除非由于某种原因你想要只能检查列表的一部分。像下面的内容会更有效,而且功能会更简单。
findSame(Iterator<Integer> iterator, Integer x) {
while(iterator.hasNext()) {
if(iterator.next().equals(x)) {
return iterator.previousIndex();
}
}
return -1;
}
您可以认为“findSome会检查此迭代器是否包含此元素”,而不是“findSome检查此迭代器是否在给定索引处包含此元素”。
其次,您应该始终如一地设计代码样式。你没有一致地缩进你的代码,findSame缩进的数量与public class main
相同,这让我觉得findSame与class main在同一级别,不包含在main中。
缩进应该一目了然地告诉你程序的结构,所以你不必阅读程序的每个细节来获得它的一般流程。
答案 1 :(得分:0)
如果我理解得很好......'searchNum'函数会在'numbers'列表中返回'x'的索引...在这种情况下,'6'位于第三个位置(index = 2)这就是你需要比较的价值:
assertEquals(2, instance.searchNum(x, 0));
答案 2 :(得分:0)
从
改变 assertEquals(1, instance.searchNum(x, 2));
到
assertEquals(2, instance.searchNum(x, 2));
然后看看它是否有效。如果您在上面的代码中提到的6是数字数组的第二个索引,那肯定会有效。