我想在 JUnit 中运行一些测试,但是没有一个完成,我不得不终止测试,因为它没有自行退出。我在下面添加了所有必要的类:
测试是这样的:
import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import org.junit.Test;
public class AnagramTest {
Anagram an;
@Test
public void testSpecialCharacters() {
an = new Anagram("@#$%^&!@");
for (int i=0;i<an.generate().size();i++)
assertEquals("Special Characters ", isAnagram("@#$%^&!@",String.valueOf(an.generate().get(i))), true);
}
@Test
public void testDoubleLetter() {
an = new Anagram("bc");
String[] expected = {"bc","cb"};
for (int i=0;i<expected.length;i++)
assertEquals("Double letter", expected[i], an.generate().get(i));
}
public static boolean isAnagram(String str1, String str2){
if(str1.length() != str2.length()) {return false;}
char[] a, b;
Arrays.sort(a = str1.toCharArray());
Arrays.sort(b = str2.toCharArray());
return Arrays.equals(a,b);
}...
和Anagram课程:
import java.util.ArrayList;
import java.util.List;
public class Anagram {
private char[] input;
private StringBuffer sb = new StringBuffer();
private List output;
public Anagram(String input){
this.input = input.toCharArray();
}
public List generate(){
output = new ArrayList();
doAnagram(input.length);
return output;
}
private void doAnagram(int rsize){
if (rsize==1){ return; }
for (int i=0; i < rsize ; i++){
doAnagram(rsize-1);
if (rsize==2){
for (int j=0; j < input.length; j++){
sb.append(input[j]);
}
output.add(sb.toString());
sb.delete(0,input.length+1);
}
rotate(rsize);
}
}
private void rotate(int rsize){
int i;
int pos = input.length - rsize;
char tmp = input[pos];
for (i=pos + 1; i < input.length ; i++){
input[i-1] = input[i];
}
input[i-1] = tmp;
}
}
我做错了什么?
答案 0 :(得分:1)
在您的测试中,在for循环中,an.generate().size()
40320 - 可能需要一段时间才能循环播放!这个值也会在循环的每次迭代中重建,这是糟糕的设计。