我的方法无法通过单元测试.我盯着它看了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 – 家谱祖先查找算法相关推荐

  1. java 祖先_java – 家谱祖先查找算法

    我的方法无法通过单元测试.我盯着它看了5个小时是徒劳的.有人可以帮我看看它有什么问题吗? PS:我的代码中的getAllRelations()方法是将格式化的输入分离为字符串ArrayList的arr ...

  2. 数据结构与算法【Java】06---七大查找算法总结

    文章目录 数据结构与算法[Java]06---查找算法总结 1.查找算法简介 1.1.查找的定义 1.2.查找算法分类 1.3.常用查找算法 2.线性查找算法 2.1.线性查找简介 2.2.线性查找代 ...

  3. java 二分_java二分查找算法

    算法:当数据量很大适宜采用该方法.采用二分法查找时,数据需是有序不重复的. 基本思想:假设数据是按升序排序的,对于给定值 x,从序列的中间位置开始比较,如果当前位置值等于 x,则查找成功:若 x 小于 ...

  4. java快速查找算法_Java实现的快速查找算法示例

    本文实例讲述了Java实现的快速查找算法.分享给大家供大家参考,具体如下: 快速查找算法,可以根据想要找的是第几个大的数,每次循环都能固定下来一个数在数组完整排完序之后的位置,每次循环都能定一个数的位 ...

  5. java 用折半查找,java折半查找算法

    //当 low>high 时表示查找区间为空,查找失败 } Java 代码: /** * 二分查找算法 * * @param srcArray 有序数组 * @param target 被查找的 ...

  6. java 实现快速筛选_Java实现的快速查找算法示例

    本文实例讲述了Java实现的快速查找算法.分享给大家供大家参考,具体如下: 快速查找算法,可以根据想要找的是第几个大的数,每次循环都能固定下来一个数在数组完整排完序之后的位置,每次循环都能定一个数的位 ...

  7. 数据结构: 插值查找算法

    import java.util.Arrays;// 插值查找算法,也要求数组是有序的 public class InsertValueSearch {public static void main( ...

  8. Java实现插值查找算法 Insert search

    下面带来Java版本插值查找算法的实现,本篇一些概念沿用上一篇博客,如数组左索引为left,右索引为right.先说明一下,插值查找算法要求待查找的数组为有序的. 插值查找原理: 1.插值查找算法类似 ...

  9. java斐波那契查找_详解Java Fibonacci Search斐波那契搜索算法代码实现

    一, 斐波那契搜索算法简述 斐波那契搜索(Fibonacci search) ,又称斐波那契查找,是区间中单峰函数的搜索技术. 斐波那契搜索采用分而治之的方法,其中我们按照斐波那契数列对元素进行不均等 ...

最新文章

  1. 排序算法 Java实现
  2. Spring Boot Dubbo 应用启停源码分析
  3. 【一分钟了解】1em等于多少px,由什么决定?
  4. 数据结构与算法 / B- Tree 和 B+ Tree
  5. Spring-IOC XML 配置多个相同 ID 的 bean 加载分析
  6. 1046 划拳 PAT乙级(C++)
  7. 图像处理中的通信原理——冈萨雷斯读书笔记(二)
  8. 1-判断数字所在区间
  9. SELinux系列(十二)安全上下文的修改和设置(chcon和restorecon命令)
  10. hdu 1561(树形DP+背包)
  11. TempData[a]多个Action方法之前共享数据
  12. 通知!7月SCI/SSCI/EI目录已更新,大批中科院1-4区好刊,请查收!
  13. matlab单元刚度矩阵整合成整刚,空间四面体单元刚度矩阵的Matlab向量化集成.pdf...
  14. 简单的五险一金计算器
  15. 自己拥有一台服务器可以做哪些很酷的事情
  16. UE4 更改工程文件名字的方法
  17. 东芝发布全系列消费级硬盘
  18. Jetpack Compose中的手势操作
  19. AUTOCAD二次开发-----删除一个图层里面的所有对象
  20. r语言 tunerf函数_R语言 | 一网打尽高质量统计分析与机器学习包

热门文章

  1. python如何使用字典中的值并进行比较_python – 如何比较字典中的值?
  2. python怎么把程序封装成函数_PYTHON中如何把固定格式代码,封装成一个函数?
  3. Python编程基础:第三十八节 问答游戏Quiz Game
  4. 【机器学习PAI实践八】用机器学习算法评估学生考试成绩
  5. Docker run 命令【转】
  6. 平安容器云平台 Padis--传统金融企业的 Docker 实践
  7. 现代前端开发路线图:从零开始,一步步成为前端工程师
  8. Linux shell的和||--转载
  9. weblogic查看内存情况
  10. 【项目实战】基于python的申请评分卡模型