Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 反转ArrayList的顺序并合并两个ArrayList_Java_Arrays_Arraylist_Merge - Fatal编程技术网

Java 反转ArrayList的顺序并合并两个ArrayList

Java 反转ArrayList的顺序并合并两个ArrayList,java,arrays,arraylist,merge,Java,Arrays,Arraylist,Merge,所以我要做的是将数组类中的一些方法从正则数组转换成ArrayList。然而,我遇到了两个截然不同的问题。首先,在颠倒我的ArrayList的顺序时,我注意到奇怪的是,它会打印出来,比如说,如果我有6个整数,并且我试图反转,它会打印出前3个的索引位置和最后3个的实际整数。例如,它将按相反顺序打印:5、4、3、96、87、24,顺序为:false。我希望打印出来的是94187410296 87 24,顺序是:false。关于合并我的两个数组列表,我不确定它是否会正确合并,因为我不确定如何将这行代码转

所以我要做的是将数组类中的一些方法从正则数组转换成ArrayList。然而,我遇到了两个截然不同的问题。首先,在颠倒我的ArrayList的顺序时,我注意到奇怪的是,它会打印出来,比如说,如果我有6个整数,并且我试图反转,它会打印出前3个的索引位置和最后3个的实际整数。例如,它将按相反顺序打印:5、4、3、96、87、24,顺序为:false。我希望打印出来的是94187410296 87 24,顺序是:false。关于合并我的两个数组列表,我不确定它是否会正确合并,因为我不确定如何将这行代码转换为打印ArrayList。我最初使用这两行代码打印合并的数组

int merged[] = merge(num3,num4);
print(merged);
下面是我用来反转arrayList的方法和合并这两个列表的方法:

  /***        <<< CODE NOT COMPLETE >>>
   * reverses the order of the elemets in the array 
   ***/
  public static void reverse(ArrayList <Integer> a)
   {
       for (int i = 0; i < a.size()/2; i++)
       {
           int reverseOrder = a.get(i);
           a.set(i, a.size() - 1 - i);
           a.set(a.size() - 1 - i, reverseOrder);
       }
   } 

   /***        <<< CODE NOT COMPLETE >>>
   * merges two sorted arrays into 1 new array, maintains the sorted order 
   ***/
   public static ArrayList <Integer> merge (ArrayList <Integer> a, ArrayList <Integer> b) 
   {
       ArrayList <Integer> merge = new ArrayList <Integer> (a.size() + b.size());
       int i = 0, j = 0, k = 0;

       while (i < a.size() && j < b.size())
       {
            if (a.get(i) < b.get(j))
            {
                merge.set(k++, a.get(i++));
            }

            else        
            {
                merge.set(k++, b.get(j++));
            }
       }

       while (i < a.size())
       {
           merge.set(k++, a.get(i++));
       }

       while (j < b.size())  
       {
           merge.set(k++, b.get(i++));
       }

       return merge;
   }
/***>
*反转数组中元素的顺序
***/
公共静态无效反向(ArrayList a)
{
对于(int i=0;i
*将两个已排序的数组合并为一个新数组,保持排序顺序
***/
公共静态ArrayList合并(ArrayList a、ArrayList b)
{
ArrayList merge=新的ArrayList(a.size()+b.size());
int i=0,j=0,k=0;
而(i
公共静态无效反转(ArrayList a)
中,此

a.set(i, a.size() - 1 - i); // <-- the index, not the value.
a.set(a.size() - 1 - i, reverseOrder);

谢谢成功了。现在,我将如何更改main中应该打印两个合并方法的代码行?
ArrayList merged=merge(num3,num4)中有一个输入错误,而(j
,您使用
j
循环,但使用
i
。请看编辑。谢谢你的帮助,我不会看到的!
a.set(i, a.get(a.size() - 1 - i)); // <-- the value.
a.set(a.size() - 1 - i, reverseOrder);
public static List<Integer> merge(List<Integer> a, List<Integer> b) {
    final int aLen = a.size(), bLen = b.size();
    List<Integer> al = new ArrayList<>(aLen + bLen);
    int i = 0, j = 0;
    while (i < aLen && j < bLen) {
        if (a.get(i) < b.get(j)) {
            al.add(a.get(i++));
        } else {
            al.add(b.get(j++));
        }
    }
    while (i < aLen) {
        al.add(a.get(i++));
    }
    while (j < b.size()) {
        al.add(b.get(j++));
    }
    return al;
}