2
\$\begingroup\$

Write a method mirror that doubles the size of a list of integers by appending the mirror image of the original sequence to the end of the list. The mirror image is the same sequence of values in reverse order. For example, if a variable called list stores this sequence of values:

[1, 3, 2, 7]

and we make the following call:

list.mirror();

then it should store the following values after the call:

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

Notice that it has been doubled in size by having the original sequence appearing in reverse order at the end of the list. You may not make assumptions about how many elements are in the list. Because adding these elements might overrun the capacity of the underlying array, you may need to call ensureCapacity to enlarge this array.

Assume you are adding to the ArrayIntList class with following fields:

public class ArrayIntList {
 private int[] elementData;
 private int size;
 public void add(int value) { ... }
 public void add(int index, int value) { ... }
 public void ensureCapacity(int capacity) { ... }
 ...
 // your code goes here
}

What improvements can I make to help on my future coding? Interested in knowing if there are other ways to tackle this question, and if the way I solved the problem is safe? This code interacts with the ArrayIntList.java class.

public void mirror() {
  if (size != 0) {
    int limit = size * 2;
 this.ensureCapacity(limit);
    size = limit;
    for (int i = 0; i < size; i++) {
      elementData[(limit - 1) - i] = elementData[i];
    }
  }
}
200_success
146k22 gold badges190 silver badges479 bronze badges
asked Nov 12, 2017 at 18:04
\$\endgroup\$

1 Answer 1

2
\$\begingroup\$

This is good code, because it does what it says on the tin. I do have two remarks:

The this. in this.ensureCapacity(limit) isn't necessary. Some people swear by adding it anyway, so it's a matter of style.

The other remark is that you loop over twice as many elements as needed because you set size to limit before looping. You can hold off until after:

public void mirror() {
 if (size != 0) {
 int limit = size * 2;
 this.ensureCapacity(limit);
 //size = limit; // [!] moved to below >>>
 for (int i = 0; i < size; i++) {
 elementData[(limit - 1) - i] = elementData[i];
 }
 size = limit; // [!] <<< moved from above
 }
}

That's all. Good code.

answered Nov 12, 2017 at 18:45
\$\endgroup\$

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.