Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Mirror method using arraylist

Tags:

java

arraylist

I am writing a "Mirror" method which duplicate the message backward, and add to the original ArrayList if the size is even.

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;
}

This one does not give 1 though.
e.g.

[1,2,3,4]->[1,2,3,4,4,3,2]

If i>0 is changed to i>=0, then

[1,2,3,4]-> [1, 2, 3, 4, 4, 3, 2, 1, 1, 2, 3, 4, 4, 3, 2, 1]
like image 767
bslqy Avatar asked Mar 20 '26 22:03

bslqy


2 Answers

How are you calling mirror?

When I changed i > 0 to i >= 0 I get the results you're expecting.

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;
}

Results:

[1, 2, 3, 4, 4, 3, 2, 1]

Update

Actually why check if it's an even sized list? Just mirror any size.

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;
}

Results:

[1, 2, 3, 3, 2, 1]

like image 188
Shar1er80 Avatar answered Mar 22 '26 11:03

Shar1er80


You just need to do this:

  • Check if list size is even
  • Make a copy of the original list
  • Reverse the copy
  • Add the reversed copy to the original list

Code:

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 + " ");
        }
    }
}

Output:

1 2 3 4 4 3 2 1 
like image 28
almightyGOSU Avatar answered Mar 22 '26 12:03

almightyGOSU