循环我的列表,以便贯穿并组合整个列表

时间:2012-10-06 21:20:47

标签: java list loops while-loop

我在编程的初级课程中,尝试将2个列表组合成一个列表,将新列表按数字顺序排列。我遇到问题的部分是,允许代码循环,重复这些步骤,使其遍历整个原始循环,以完成最终列表,该列表是原始列表中所有数字的组合。任何关于循环的指导将不胜感激。谢谢。

import inClass.list.EmptyListException;
import inClass.list.List;

public class InitialLists {

    public static void main(String[] args) {

    List<Integer> intObject1 = new List<Integer>();{

        intObject1.insertAtFront(25);

        intObject1.insertAtFront(19);

        intObject1.insertAtFront(3);

        intObject1.print();}

    List<Integer> intObject2 = new List<Integer>();{

        intObject2.insertAtFront(120);

        intObject2.insertAtFront(1);

        intObject2.print();}

    List<Integer> combinedList = new List<Integer>();

    int object1 = intObject1.removeFromBack();
    int object2 = intObject2.removeFromBack();

        while(intObject1.removeFromBack() != null && intObject2.removeFromBack() != null){

    try {


        {
            if (intObject1.removeFromBack() > intObject2.removeFromBack()) {
                combinedList.insertAtFront(object2);
                intObject1.insertAtBack(object1);
            }           
            else if (intObject2.removeFromBack() < intObject1.removeFromBack()) {
                combinedList.insertAtFront(object1);
                intObject2.insertAtBack(object2);
            }   
            else if (intObject1.removeFromBack() == intObject2.removeFromBack()) {
                combinedList.insertAtFront(object1);
            }
        }   
            combinedList.print();

            object1 = intObject1.removeFromBack();
            object2 = intObject2.removeFromBack();

        } // end try

        catch (EmptyListException emptyListException) {
            emptyListException.printStackTrace();
        } // end catch
        } //end while
    } // end main

}// end class

3 个答案:

答案 0 :(得分:1)

怎么样:

List<Integer> combinedList = new ArrayList<Integer>();
combinedList.addAll(intObject1);
combinedList.addAll(intObject2);
Collections.sort(combinedList);

或者我错过了什么?

答案 1 :(得分:0)

要合并两个文件/列表/流,您需要一个看起来有点像这样的循环

WHILE NOT FINISHED
    GET SMALLEST VALUE FROM INPUTS
    APPEND SMALLEST VALUE TO OUTPUT

那么你怎么知道你已经完成了?

如何获得每个列表中下一个项目中最小的项目?

我上面写的代码叫伪代码;它是一种描述算法步骤的方法。继续扩展每个步骤,直到您拥有可以用您选择的语言实现的伪代码,在本例中为Java。

希望有帮助...

答案 2 :(得分:0)

我猜您的问题是因为两个列表的大小可能不均匀。尝试将while条件设置如下:

Integer object1 = intObject1.removeFromBack();
Integer object2 = intObject2.removeFromBack();
while(object1 != null || object2!= null){
   if(object1 ==null){
       //safe to assume object2 is not null as both not null together (that is the termination condition)
       combinedList.insertAtFront(object2);
   }else if(object2 ==null){
       //safe to assume object1 is not null as both not null together (that is the termination condition)
       combinedList.insertAtFront(object1);
   }else{
       //put you normal condition of handling object1 and object2 being not null
        if (object1.intValue() > object2.removeFromBack()) {
            combinedList.insertAtFront(object2);
            intObject1.insertAtBack(object1);
        }           
        else if (object2.intValue() < object1.intValue()) {
            combinedList.insertAtFront(object1);
            intObject2.insertAtBack(object2);
        }   
        else if (object1.intValue() == object2.intValue()) {
            combinedList.insertAtFront(object1);
        }
   }
   object1 = null;
   object2 = null;
   try{
        object1 = intObject1.removeFromBack();
   }catch (EmptyListException emptyListException) {
       //do nothing
    } // end catch
   try{
        object2 = intObject2.removeFromBack();
   }catch (EmptyListException emptyListException) {
       //do nothing
    } // end catch
}

另请注意:有更好的方法来执行两个排序列表元素的merge根据您鲜为人知的自定义List课程建议使用此方法。