日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java ancestor_java – 家谱祖先查找算法

發布時間:2025/3/21 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java ancestor_java – 家谱祖先查找算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我的方法無法通過單元測試.我盯著它看了5個小時是徒勞的.有人可以幫我看看它有什么問題嗎?

PS:我的代碼中的getAllRelations()方法是將格式化的輸入分離為字符串ArrayList的arraylists,例如,如果我有這樣的格式化輸入(我在我的測試用例中使用它無法通過)

String format = "John Doe , Mary Smith" + "\n" + "Brian William , John Doe" + "\n" + "Brian William ,Robert Andrew" + "\n" + "Mary Smith , Max Jackson";

在每一行中,第一個人是第二個人的父母.

getAllRelations()方法將這個格式化的字符串拆分為arraylists,每個列表只包含每行中的兩個名稱字符串(在名稱之前或之后沒有空格)作為其元素.例如arraylist1將是一個包含“John”和“Mary Smith”的列表.

這是我的方法,我無法弄清楚什么是錯的,我想用這種方法來檢查兩個人是否共享同一個祖先.

private boolean hasSameAncestor(String person1, String person2){

ArrayList> allRelations = allRelations();

int i = 0;

int j = 0;

String name1 = person1;

String name2 = person2;

String parent1;

String parent2;

for(i = 0, parent1 = ""; i < allRelations.size(); i++){

if(name1.equals(allRelations.get(i).get(1))){

parent1 = allRelations.get(i).get(0);

for(j = 0, name2 = person2, parent2 = ""; j < allRelations.size(); j++){

if(name2.equals(allRelations.get(j).get(1))){

parent2 = allRelations.get(j).get(0);

if(parent2.equals(parent1)){

return true;

}

else{

name2 = parent2;

j = 0;

}

}

}

name1 = parent1;

i = 0;

}

}

return false;

}

我無法通過的測試用例就是這樣.

@Test

public void testHasSameAncestor()

FamilyTree familyTree4 = new FamilyTree("John Doe , Mary Smith" + "\n" + "Brian William , John Doe" + "\n" + "Brian William ,Robert Andrew" + "\n" + "Mary Smith , Max Jackson");

assertEquals(true, format.hasSameAncestor("Max Jackson", "Robert Andrew"));

}

我無法弄清楚我的功能有什么問題,有人可以幫幫我嗎?非常感謝你.

可以粘貼到eclipse以獲得調試幫助的代碼

package test;

import java.util.ArrayList;

import java.util.Arrays;

public class Test1 {

String test;

public Test1(String test){

this.test = test;

}

private ArrayList lineRelations(){

int i;

ArrayList lineRelations = new ArrayList();

String[] lines = test.split("\n");

for(i = 0; i < lines.length; i++){

lineRelations.add(lines[i]);

}

return lineRelations;

}

private ArrayList> allRelations(){

int i;

ArrayList> allRelations = new ArrayList>();

ArrayList lineRelations = lineRelations();

for(i = 0; i < lineRelations.size(); i++){

ArrayList eachLine = new ArrayList(Arrays.asList(lineRelations.get(i).split("\\s*,\\s*")));

allRelations.add(eachLine);

}

return allRelations;

}

public boolean hasSameAncestor(String person1, String person2){

ArrayList> allRelations = allRelations();

int i = 0;

int j = 0;

String name1 = person1;

String name2 = person2;

String parent1;

String parent2;

for(i = 0, parent1 = ""; i < allRelations.size(); i++){

if(name1.equals(allRelations.get(i).get(1))){

parent1 = allRelations.get(i).get(0);

for(j = 0, name2 = person2, parent2 = ""; j < allRelations.size(); j++){

if(name2.equals(allRelations.get(j).get(1))){

parent2 = allRelations.get(j).get(0);

if(parent2.equals(parent1)){

return true;

}

else{

name2 = parent2;

j = 0;

}

}

}

name1 = parent1;

i = 0;

}

}

return false;

}

}

測試用例

package test;

import static org.junit.Assert.*;

import test.Test1;

import org.junit.Test;

public class Test1Test {

@Test

public void testHasSameAncestor(){

Test1 test1 = new Test1("John Doe , Mary Smith" + "\n" + "Brian William , John Doe" + "\n" + "Brian William ,Robert Andrew" + "\n" + "Mary Smith , Max Jackson");

assertEquals(true, test1.hasSameAncestor("Max Jackson", "Robert Andrew"));

}

}

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的java ancestor_java – 家谱祖先查找算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。