我正在写一个" Mirror"向后复制消息的方法,如果大小是偶数,则添加到原始ArrayList。
public ArrayList<Integer> mirror(ArrayList<Integer> mr) {
if (mr.size() % 2 == 0) {
for (int i = mr.size() - 1; i > 0; i--) {
mr.add(mr.get(i));
}
}
return mr;
}
虽然这个不给1 e.g。
[1,2,3,4]->[1,2,3,4,4,3,2]
如果i&gt; 0更改为i&gt; = 0,则
[1,2,3,4]-> [1, 2, 3, 4, 4, 3, 2, 1, 1, 2, 3, 4, 4, 3, 2, 1]
答案 0 :(得分:2)
你怎么称镜子?
当我将i > 0
更改为i >= 0
时,我会得到您期待的结果。
public static void main(String[] args) throws Exception {
ArrayList<Integer> list = new ArrayList(Arrays.asList(1, 2, 3, 4));
System.out.println(mirror(list));
}
public static ArrayList<Integer> mirror(ArrayList<Integer> mr) {
if (mr.size() % 2 == 0) {
for (int i = mr.size() - 1; i >= 0; i--) {
mr.add(mr.get(i));
}
}
return mr;
}
结果:
[1,2,3,4,4,3,2,1]
实际上为什么检查它是否是一个大小合适的列表?只是镜像任何大小。
public static void main(String[] args) throws Exception {
ArrayList<Integer> list = new ArrayList(Arrays.asList(1, 2, 3));
System.out.println(mirror(list));
}
public static ArrayList<Integer> mirror(ArrayList<Integer> mr) {
for (int i = mr.size() - 1; i >= 0; i--) {
mr.add(mr.get(i));
}
return mr;
}
结果:
[1,2,3,3,2,1]
答案 1 :(得分:1)
你只需要这样做:
<强>代码:强>
import java.util.ArrayList;
import java.util.Collections;
public class Snippet {
public static ArrayList<Integer> mirror(ArrayList<Integer> mr) {
if (mr.size() % 2 == 0) {
ArrayList<Integer> copy = new ArrayList<>();
copy.addAll(mr); // Copy original list
Collections.reverse(copy); // Reverse copy
mr.addAll(copy); // Append reversed copy to original list
}
return mr;
}
public static void main(String [] args) {
ArrayList<Integer> lst = new ArrayList<Integer>();
lst.add(1);
lst.add(2);
lst.add(3);
lst.add(4);
lst = mirror(lst);
for(Integer n : lst) {
System.out.print(n + " ");
}
}
}
<强>输出:强>
1 2 3 4 4 3 2 1
答案 2 :(得分:0)
数组或任何集合都有0作为第一个元素的索引。当你说i>0
时,它实际上会跳过数组的第一个元素,即你的情况下为1。
答案 3 :(得分:0)
使用现有JDK方法的替代解决方案:
public static <E, T extends List<E>> T mirror(T mr) {
int size = mr.size();
mr.addAll(mr.subList(0, size));
Collections.reverse(mr.subList(size, size*2));
return mr;
}
请注意,现在该方法更通用:它可以使用任何可变列表类型(不仅是ArrayList
)和任何列表元素类型(不仅仅是Integer
)。