这是情况。 顶部的方法应合并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));
}
}
答案 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;
}