Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

instruction: Consider a member method keepEven for the List ADT. This method modifies the current list and only keeps the elements in the even positions

instruction: Consider a member method keepEven for the List ADT. This method modifies the current list and only keeps the elements in the even positions (i.e., 0, 2, 4, ...). The method returns the number of elements in odd positions that were discarded. Implement this method for the ArrayList class. For example, if L = {Jim, Ned, Ron, Bob, Kim}, then L.keepEven() sets L = {Jim, Ron, Kim} and returns 2 because it removed Ned and Bob.

import java.util.Iterator; import java.util.NoSuchElementException; public class Quiz3bWrapper { public static interface List extends Iterable { public int size(); public boolean isEmpty(); public boolean isMember(E e); public int firstIndexOf(E e); public int lastIndexOf(E e); public void add(E e); public void add(E e, int position); public E get(int position); public E remove(int position); public E replace(int position, E newElement); public void clear(); public Object[] toArray(); public int keepEven(); } @SuppressWarnings("unchecked") public static class ArrayList implements List { @SuppressWarnings("hiding") private class ArrayListIterator implements Iterator { private int currentPosition; public ArrayListIterator() { super(); this.currentPosition = 0; } @Override public boolean hasNext() { return this.currentPosition < currentSize; } @Override public E next() { if (this.hasNext()) { E result = (E) elements[this.currentPosition++]; // elements is array in enclosing class return result; } else { throw new NoSuchElementException(); } } } private E[] elements; private int currentSize; private static final int DEFAULT_SIZE = 10; public ArrayList(int initialSize) { if (initialSize < 1) { throw new IllegalArgumentException("Size must be at least 1."); } this.elements = (E[]) new Object[initialSize]; this.currentSize = 0; } public ArrayList() { this(DEFAULT_SIZE); } @Override public int size() { return this.currentSize; } @Override public boolean isEmpty() { return this.size() == 0; } @Override public boolean isMember(E e) { return this.firstIndexOf(e) >= 0; } @Override public int firstIndexOf(E e) { for (int i=0; i < this.size(); ++i) { if (this.elements[i].equals(e)) { return i; } } return -1; } @Override public void add(E e) { if (this.size() == this.elements.length) { this.reAllocate(); } this.elements[this.currentSize++] = e; } private void reAllocate() { E[] temp = (E[]) new Object[2*this.size()]; for (int i=0; i < this.size(); ++i) { temp[i] = this.elements[i]; } this.elements = temp; } @Override public void add(E e, int position) { if ((position < 0) || (position > this.currentSize)){ throw new IndexOutOfBoundsException("Illegal position"); } if (position == this.currentSize) { this.add(e); } else { if (this.size() == this.elements.length) { this.reAllocate(); } for (int i=this.currentSize; i > position; --i) { this.elements[i] = this.elements[i-1]; } this.elements[position] = e; this.currentSize++; } } @Override public E get(int position) { if ((position < 0) || (position >= this.currentSize)) { throw new IndexOutOfBoundsException("Illegal position"); } return this.elements[position]; } @Override public E remove(int position) { if ((position < 0) || (position >= this.currentSize)) { throw new IndexOutOfBoundsException("Illegal position"); } E result = this.elements[position]; for (int i=position; i < this.size() - 1; ++i) { this.elements[i] = this.elements[i + 1]; } this.elements[this.currentSize-1] = null; this.currentSize--; return result; } @Override public E replace(int position, E newElement) { if ((position < 0) || (position >= this.currentSize)) { throw new IndexOutOfBoundsException("Illegal position"); } E result = this.elements[position]; this.elements[position] = newElement; return result; } @Override public void clear() { while(!this.isEmpty()) { this.remove(0); } } @Override public Object[] toArray() { Object[] result = (E[]) new Object[this.size()]; System.arraycopy(this.elements, 0, result, 0, this.size()); // for (int i=0; i < this.size(); ++i) { // result[i] = this.elements[i]; // } return result; } @Override public Iterator iterator() { return new ArrayListIterator(); } @Override public int lastIndexOf(E e) { for (int i=this.currentSize-1; i>= 0; --i) { if (this.elements[i].equals(e)) { return i; } } // not found return -1; } @Override public int keepEven() { // ADD YOUR CODE HERE } } }

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Introduction To Constraint Databases

Authors: Peter Revesz

1st Edition

1441931554, 978-1441931559

More Books

Students also viewed these Databases questions