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"));
}
}
java ancestor_java – 家谱祖先查找算法相关推荐
- java 祖先_java – 家谱祖先查找算法
我的方法无法通过单元测试.我盯着它看了5个小时是徒劳的.有人可以帮我看看它有什么问题吗? PS:我的代码中的getAllRelations()方法是将格式化的输入分离为字符串ArrayList的arr ...
- 数据结构与算法【Java】06---七大查找算法总结
文章目录 数据结构与算法[Java]06---查找算法总结 1.查找算法简介 1.1.查找的定义 1.2.查找算法分类 1.3.常用查找算法 2.线性查找算法 2.1.线性查找简介 2.2.线性查找代 ...
- java 二分_java二分查找算法
算法:当数据量很大适宜采用该方法.采用二分法查找时,数据需是有序不重复的. 基本思想:假设数据是按升序排序的,对于给定值 x,从序列的中间位置开始比较,如果当前位置值等于 x,则查找成功:若 x 小于 ...
- java快速查找算法_Java实现的快速查找算法示例
本文实例讲述了Java实现的快速查找算法.分享给大家供大家参考,具体如下: 快速查找算法,可以根据想要找的是第几个大的数,每次循环都能固定下来一个数在数组完整排完序之后的位置,每次循环都能定一个数的位 ...
- java 用折半查找,java折半查找算法
//当 low>high 时表示查找区间为空,查找失败 } Java 代码: /** * 二分查找算法 * * @param srcArray 有序数组 * @param target 被查找的 ...
- java 实现快速筛选_Java实现的快速查找算法示例
本文实例讲述了Java实现的快速查找算法.分享给大家供大家参考,具体如下: 快速查找算法,可以根据想要找的是第几个大的数,每次循环都能固定下来一个数在数组完整排完序之后的位置,每次循环都能定一个数的位 ...
- 数据结构: 插值查找算法
import java.util.Arrays;// 插值查找算法,也要求数组是有序的 public class InsertValueSearch {public static void main( ...
- Java实现插值查找算法 Insert search
下面带来Java版本插值查找算法的实现,本篇一些概念沿用上一篇博客,如数组左索引为left,右索引为right.先说明一下,插值查找算法要求待查找的数组为有序的. 插值查找原理: 1.插值查找算法类似 ...
- java斐波那契查找_详解Java Fibonacci Search斐波那契搜索算法代码实现
一, 斐波那契搜索算法简述 斐波那契搜索(Fibonacci search) ,又称斐波那契查找,是区间中单峰函数的搜索技术. 斐波那契搜索采用分而治之的方法,其中我们按照斐波那契数列对元素进行不均等 ...
最新文章
- 排序算法 Java实现
- Spring Boot Dubbo 应用启停源码分析
- 【一分钟了解】1em等于多少px,由什么决定?
- 数据结构与算法 / B- Tree 和 B+ Tree
- Spring-IOC XML 配置多个相同 ID 的 bean 加载分析
- 1046 划拳 PAT乙级(C++)
- 图像处理中的通信原理——冈萨雷斯读书笔记(二)
- 1-判断数字所在区间
- SELinux系列(十二)安全上下文的修改和设置(chcon和restorecon命令)
- hdu 1561(树形DP+背包)
- TempData[a]多个Action方法之前共享数据
- 通知!7月SCI/SSCI/EI目录已更新,大批中科院1-4区好刊,请查收!
- matlab单元刚度矩阵整合成整刚,空间四面体单元刚度矩阵的Matlab向量化集成.pdf...
- 简单的五险一金计算器
- 自己拥有一台服务器可以做哪些很酷的事情
- UE4 更改工程文件名字的方法
- 东芝发布全系列消费级硬盘
- Jetpack Compose中的手势操作
- AUTOCAD二次开发-----删除一个图层里面的所有对象
- r语言 tunerf函数_R语言 | 一网打尽高质量统计分析与机器学习包
热门文章
- python如何使用字典中的值并进行比较_python – 如何比较字典中的值?
- python怎么把程序封装成函数_PYTHON中如何把固定格式代码,封装成一个函数?
- Python编程基础:第三十八节 问答游戏Quiz Game
- 【机器学习PAI实践八】用机器学习算法评估学生考试成绩
- Docker run 命令【转】
- 平安容器云平台 Padis--传统金融企业的 Docker 实践
- 现代前端开发路线图:从零开始,一步步成为前端工程师
- Linux shell的和||--转载
- weblogic查看内存情况
- 【项目实战】基于python的申请评分卡模型