Copiar Constructor para una matriz de cadenas en Java

Frances Brown:

Así que estoy actualmente trabajando en un proyecto que está recreando métodos para listas de cadenas de matrices y listas de cadenas enlazadas. Hay una interfaz StringList, que tanto ArrayStringList y LinkedStringList implementan. No se nos permite ver el código fuente de la interfaz - solamente la documentación del API. Para cada clase, tenemos que crear un constructor por defecto y el constructor de copia para ambas clases. Tengo pruebas ejecutadas, y los constructores por defecto tanto pase pero el constructor de copia ArrayStringList no funciona y ha estado lanzando el mensaje de error de "nulo" o "-1". Soy bastante nuevo en la herencia e interfaces, y creo que los parámetros del objeto frente a los tipos de datos matriz de cadena me están tirando un poco.

Aquí está el código que tengo hasta ahora, y los métodos utilizados en el constructor:

Mi constructor de copia:

private String[] stringArray;
private int size;

public ArrayStringList(StringList sl) {
    size = sl.size();
    ArrayStringList asl = new ArrayStringList();
    for(int i = 0; i < size-1; i++) {
        if(sl.get(i) != null) {
            asl.set(i,sl.get(i).toString());
        } //if
    } // for
} // copy constructor

Tamaño Método:

public int size() {
    return stringArray.length;
} // size

Obtener Método:

public String get(int index) {
    if(index < 0 || index >= size) {
        throw new IndexOutOfBoundsException("out of bounds");
} else {
        return stringArray[index];
    }
} //get

Conjunto Método:

public String set(int index, String s) {
    String old = stringArray[index];
stringArray[index] = s;
    return old;
} // set

En el proyecto, la descripción del constructor de copia era la siguiente:

La clase de aplicación debe definir explícitamente un constructor de copia. El constructor de copia debe tener exactamente un parámetro de la StringList tipo de interfaz. Se debe hacer el objeto de lista de nueva construcción, una copia profunda de la lista mencionada en el parámetro del constructor. Por lo tanto, los elementos iniciales de tamaño y de cadena del nuevo objeto de lista será el mismo que la otra lista. Para que quede claro, la otra lista puede ser un objeto de cualquier implementación de la interfaz StringList. no deben hacerse otras hipótesis sobre el tipo de objeto.

Rostyslav Barmakov:
public class ArrayStringList implements StringList {

  private static final int INITIAL_CAPACITY = 10;

  private String[] stringArray;
  private int size;

  public ArrayStringList(StringList sl) {
    stringArray = sl.toArray();
    size = stringArray.length;
  }


  public ArrayStringList() {
    stringArray = new String[INITIAL_CAPACITY];
    size = 0;
  }

  // TODO: Extract 'if-cascade' to an validate(..) method 
  @Override
  public String set(int index, String s) {
    if (index >= size) {
      throw new IndexOutOfBoundsException("")
    } else if (s == null) {
      throw new NullPointerException("the specified string is null");
    } else if (s.isEmpty()) {
      throw new IllegalArgumentException("specified string is empty");
    }
    String old = stringArray[index];
    stringArray[index] = s;
    return old;
  }

  // TODO: Check if posible to extend the stringArray
  @Override
  public boolean add(String s) {
    if (s == null) {
      throw new NullPointerException("the specified string is null");
    } else if (s.isEmpty()) {
      throw new IllegalArgumentException("specified string is empty");
    }

    if (size == stringArray.length) {
      int newListCapacity = stringArray.length * 2;
      stringArray = Arrays.copyOf(stringArray, newListCapacity);
    }
    stringArray[++size] = s;
    return true;
  }

  // TODO: implement other methods ...
}

Tenga en cuenta que esta aplicación es aún con errores, pero que se puede utilizar como punto de partida

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=316302&siteId=1
Recomendado
Clasificación