可能重复:
Java code with tests - infinite loop?可能有的帮我看看为什么我的代码无法运行
这里是我的代码,我想人与人之间的关系,然而,当我运行单元测试,测试永远跑,不能得到的结果,我的CPU使用很高。 这是我的代码。有人可以看到它有什么问题吗? 字符串关系是串的多个线路输入用的格式“A,B” + \ n” + ‘C,d’,其中A为B和C的父D.
的父这是在代码和默认构造函数是字符串的输入格式,我们并不需要检查,如果格式正确
public SeeRelations(String relations){
this.relations = relations;
}
//辅助函数来得到字符串的每一行
private ArrayList<String> lineRelations(){
int i;
ArrayList<String> lineRelations = new ArrayList<String>();
String[] lines = relations.split("\n");
for(i = 0; i < lines.length; i++){
lineRelations.add(lines[i]);
}
return lineRelations;
}
//帮助功能把每个在的ArrayList关系
private ArrayList<ArrayList<String>> allRelations(){
int i;
ArrayList<ArrayList<String>> allRelations = new ArrayList<ArrayList<String>>();
ArrayList<String> lineRelations = lineRelations();
for(i = 0; i < lineRelations.size(); i++){
ArrayList<String> eachLine = new ArrayList<String>(Arrays.asList(lineRelations.get(i).split("\\s*,\\s*")));
allRelations.add(eachLine);
}
return allRelations;
}
这是检查输入的名字是存在 //辅助函数,看是否名seeRelations存在()
private boolean hasThisName(String name){
ArrayList<ArrayList<String>> allRelations = allRelations();
int i;
int j;
for(i = 0; i < allRelations.size(); i++){
for(j = 0; j < allRelations.get(i).size(); j++){
if(name.equals(allRelations.get(i).get(j))){
return true;
}
}
}
return false;
}
这是获得功能的方法两个人 //辅助函数之间的世代数得到seeRelations的世代号()
private int getGenerationNum(String person, String ancestor){
ArrayList<ArrayList<String>> allRelations = allRelations();
String name;
int i;
int j;
int generationNum = 0;
for(i = 0, j = 0, name = ancestor; i < allRelations.size(); i++){
if(name.equals(allRelations.get(i).get(0)) && !person.equals(allRelations.get(i).get(1))){
generationNum++;
ancestor = allRelations.get(i).get(1);
i = 0;
j = 1;
}
else if(ancestor.equals(allRelations.get(i).get(0)) && person.equals(allRelations.get(i).get(1))){
generationNum++;
j = 1;
break;
}
}
if(j == 0){
return 0;
}
else{
return generationNum;
}
}
这是满足霍德获得的“伟大”多为最终输出
private String great(int num){
int i;
String great = "";
for(i = 0; i < num; i++){
great += "great";
}
return great;
}
这是我检查两个人
public String seeRelations(String person, String ancestor){
int generationNum = getGenerationNum(person, ancestor);
String great = great(generationNum - 2);
if(!(hasThisName(person) && hasThisName(ancestor))){
return null;
}
else{
if(generationNum == 0){
return null;
}
else if(generationNum == 1){
return ancestor + " is the parent of " + person;
}
else if(generationNum == 2){
return ancestor + " is the grandparent of " + person;
}
else{
return ancestor + " is the" + " " + great +"grandparent of " + person;
}
}
}
for input string format is a multiple line string I made a typo in the explanation above – user1834274
correct format is“A,B”+“\ n”+“C,D”,其中A是B的父亲,C是d – user1834274
的父母,你可以添加一些'的System.out.println()'你的代码输出的方法名称和方法PARAMS和看控制台上看到你的代码是挂。或者,使用java调试器浏览代码以观察发生了什么。 –