制作测试链表的主要方法

时间:2016-05-05 04:17:51

标签: java linked-list main

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

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;
}
}

3 个答案:

答案 0 :(得分:0)

我认为这就是你所要求的:

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)

答案 1 :(得分:0)

首先,else中的if遗漏了while(aI.hasNext() && bI.hasNext())。接下来,我强烈建议你编程到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]

答案 2 :(得分:0)

那么你是否在没有测试过的情况下编写代码?我建议你熟悉编写驱动程序类,因为随着代码越来越大,你需要在整个过程中对它进行测试。

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

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

  3. 调用Exercise6类的静态方法

  4. 打印结果以验证

  5. 您可以执行以下操作:

    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 方法并验证算法的正确性