IF条件和LOOP通过ArrayList

时间:2016-02-09 18:03:32

标签: java arraylist

这是情况。 顶部的方法应合并ArrayList中彼此并排的两个String元素。如果ArrayList的长度为Odd,则最后一个String元素应保持不变。

但问题是,这样程序会单独留下第一个String元素,而其他元素很好地合并。输出如下:

[1, 23, 45, 67, 89]

虽然看起来像这样:

[12, 34, 56, 78, 9]

如何解决问题?优选地,不使用迭代器。

import java.util.ArrayList;


public class Main {

    public static ArrayList<String> clump (ArrayList<String> list)
    {
for (int i =0; i< list.size(); i++)
//for (int i = list.size()-1; i >=0; i--)
{
   // if (i == 0)

   if ((list.size() + i) % 2 == 0) {
       System.out.println(list);
       System.out.println("list size is " + list.size());

        String newElement = list.get(i) + list.get(i+ 1);
        list.remove(i);
        list.remove(i);

        list.add(i, newElement);
       //System.out.println(list);
   }
   else {
       continue;
   }

}
        return list;
    }

    public static void main(String[] args) {

        ArrayList<String> list = new ArrayList<>();
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");
        list.add("5");
        list.add("6");
        list.add("7");
        list.add("8");
        list.add("9");

        System.out.println(clump(list));

    }
}

4 个答案:

答案 0 :(得分:1)

如果输入list具有偶数个元素,那么您的代码似乎工作正常。对于列表中包含奇数个元素的情况,从列表中删除最后一个元素并在运行代码之前将其临时保存。将最后一个元素添加回返回的输出。

这可以是一种解决方案(可能不是最佳解决方案):

import java.util.ArrayList;


public class Main {

    public static ArrayList<String> clump (ArrayList<String> list)
    {
        // BEGIN CHANGES MADE
        String temp = null; 
        int size = list.size();
        if ((size%2) != 0)
        {
            temp = list.remove(size-1);
        }
        // END CHANGES MADE
        for (int i =0; i< list.size(); i++)
        {
           if ((list.size() + i) % 2 == 0) {
               System.out.println(list);
               System.out.println("list size is " + list.size());

                String newElement = list.get(i) + list.get(i+ 1);
                list.remove(i);
                list.remove(i);

                list.add(i, newElement);
               //System.out.println(list);
           }
           else {
               continue;
           }

        }
        // BEGIN CHANGES MADE
        if (temp != null)
        {
            list.add(temp);
        }
        // END CHANGES MADE
        return list;
    }

    public static void main(String[] args) {

        ArrayList<String> list = new ArrayList<String>();
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");
        list.add("5");
        list.add("6");
        list.add("7");
        list.add("8");
        list.add("9");
        //list.add("0");
        System.out.println(clump(list));

    }
}

答案 1 :(得分:1)

您不需要查看 @GenericGenerator( name = "sequenceGenerator", strategy = "enhanced-sequence", parameters = { @org.hibernate.annotations.Parameter( name = "optimizer", value = "pooled" ), @org.hibernate.annotations.Parameter( name = "increment_size", value = "500" ) } ) @GeneratedValue( strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator" ) 。在每次迭代中,您都可以连接相邻的元素。

此外,您需要循环到if ((list.size() + i) % 2 == 0)而不是i < list.size()-1,因为当您删除第二个最后一个元素时,您已经在最后一个索引处。

请删除i < list.size()阻止if-else

并替换:

if ((list.size() + i) % 2 == 0)

with:

for (int i =0; i< list.size(); i++)

以下是您的计划的工作版本:

for (int i = 0; i < list.size() - 1; i++)

答案 2 :(得分:1)

我希望它可以帮到你。我用过你的代码。这是个好主意。一些变化有助于它正常工作。试试看! :d

<div class="modal-body">
    <div class="row">
        <div class="col-md-6 col-md-offset-3">
            <img src="http://placehold.it/260x340" alt="">
        </div>
    </div>
</div>

答案 3 :(得分:0)

private static ArrayList<String> clump(ArrayList<String> list) {
    ArrayList<String> res = new ArrayList<String>();
    Iterator<String> itr = list.iterator();
    while (itr.hasNext()) {
        res.add(itr.next() + (itr.hasNext() ? itr.next() : ""));
    }
    return res;
 }