繁体   English   中英

成为测试链表的主要方法

[英]Making a main method to test linked lists

我需要帮助来建立一个主要方法来测试我为此作业编写的程序。写一个方法来合并两个按降序排列的整数链接列表。 结果应该是第三个链接列表,它是原始列表的排序组合。 不要破坏原始列表。

import java.util.Iterator;
import java.util.LinkedList;
public class Exercise6
{
    public static LinkedList<Integer> merge(LinkedList<Integer> a,LinkedList<Integer> b)
    {
    //Initialize variables
    LinkedList<Integer> result = new LinkedList<Integer>();
    Iterator<Integer> aI = a.iterator();
    Iterator<Integer> bI = b.iterator();
    int aTemp = 0;
    int bTemp = 0;

    //Get the  first values from both lists using the next method
    aTemp = aI.next();
    bTemp = bI.next();

    while(aI.hasNext() && bI.hasNext())
    {
        //Comparing the two elements
        if(aTemp > bTemp)
        {
            result.add(bTemp);
            bTemp = bI.next();
        }
    }

    if(!aI.hasNext())
    {
        result.add(aTemp);
    }

    while(aI.hasNext())
    {
        result.add(aTemp);
        aTemp = aI.next();
    }

    while(bI.hasNext())
    {
        result.add(bTemp);
        bTemp = bI.next();
    }

    if(!aI.hasNext())
    {
        result.add(aTemp);
    }
    else
    {
        result.add(bTemp);
    }
    return result;
}
}

我想这就是您要的:

LinkedList<Integer> list1 = new LinkedList<Integer>();
list1.add(9);
list1.add(7);
list1.add(3);
LinkedList<Integer> list2 = new LinkedList<Integer>();
list1.add(8);
list1.add(5);
list1.add(1);
Exercise6 test = new Exercise6();
test.merge(list1,list2)

首先, if您在while(aI.hasNext() && bI.hasNext())中丢失了else 接下来,我强烈建议您编程到List接口(而不是具体的LinkedList类型)。 另外,我将merge方法在某些可比较的类型T通用 就像是,

public static <T extends Comparable<? super T>> List<T> merge(List<T> a, List<T> b) {
    // Initialize variables
    List<T> result = new LinkedList<>();
    Iterator<T> aI = a.iterator();
    Iterator<T> bI = b.iterator();
    // Get the first values from both lists using the next method
    T aTemp = aI.hasNext() ? aI.next() : null;
    T bTemp = bI.hasNext() ? bI.next() : null;
    while (aI.hasNext() && bI.hasNext()) {
        // Comparing the two elements
        if (aTemp.compareTo(bTemp) < 0) {
            result.add(bTemp); // <-- add the right-hand side
            bTemp = bI.next();
        } else {
            result.add(aTemp); // <-- add the left-hand side
            aTemp = aI.next();
        }
    }
    // Add the final two values from the loop.
    if (aTemp.compareTo(bTemp) < 0) {
        result.add(bTemp);
        result.add(aTemp);
    } else {
        result.add(aTemp);
        result.add(bTemp);
    }
    while (aI.hasNext()) { // Add any remaining values from a
        result.add(aI.next());
    }
    while (bI.hasNext()) { // Add any remaining values from b
        result.add(bI.next());
    }
    return result;
}

然后您可以像这样测试merge

public static void main(String[] args) {
    System.out.println(merge(Arrays.asList(6, 4, 2), Arrays.asList(5, 3, 1)));
    System.out.println(merge(Arrays.asList("bat", "ant"), 
            Arrays.asList("dog", "cat")));
}

我懂了

[6, 5, 4, 3, 2, 1]
[dog, cat, bat, ant]

那么,您是否编写代码而不进行测试? 我建议您熟悉编写驱动程序类,因为随着代码的增加,您将需要在整个过程中对其进行测试。

  1. 在您的Exercise类的同一包中创建另一个类:您可以将其命名为ExerciseDriver。 根据需要导入类。

  2. 声明初始化并填充两个链接列表。 声明丢失的第三个链接以存储结果。

  3. 调用Exercise6类的静态方法

  4. 打印结果进行验证

您可以执行以下操作:

import java.util.LinkedList;
public Class ExcerciseDriver{

    public static void main (String[] args){

        LinkedList<Integer> list1 = new LinkedList<>();
        LinkedList<Integer> list2 = new LinkedList<>();
        LinkedList<Integer> resultList;

        list1.add(77);
        list1.add(7);
        list1.add(6);

        list2.add(100);
        list2.add(43);
        list2.add(8);

        resultList = Excercise6.merge(list1, list2);

        System.out.println(resultList);
   }
}

现在您所要做的就是运行main方法并验证算法的正确性

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM