Está en la página 1de 22

PROGRAMACIÓN I

Comentarios entrega lab8

Clara Benac Earle


cbenac@fi.upm.es
copiar
static int[] copiar(int[] col){
int[] copia = new int[col.length];
for (int i = 0; i < col.length ; i++)
copia[i] = col[i];
return copia;
}

Esta solución es correcta, eficiente y sigue las


convenciones de programación
copiar – código estudiante
static int[] copiar(int[] col){
int[] copia = new int[col.length];
if(col.length == 0)
return copia;
else{
for (int i = 0; i < col.length ; i++)
copia[i] = col[i];
}
return copia;
}

Esta solución es correcta pero el código en


negrita es innecesario
copiar – probar código
public static void main(String[] args){
int[] nums1 = {1,2,3};
int[] nums2 = {};

System.out.print(copiar(nums1);

Lo que devuelve copiar(nums1) es una posición de


memoria
mostrarElementos
En este laboratorio se os daba un
procedimento, mostrarElementos, para
poder visualizar los elementos de un
array
copiar – probar código
public static void main(String[] args){
int[] nums1 = {1,2,3};
int[] nums2 = {};

System.out.print("Test1 mostrar {1,2,3} -> ");


mostrarElementos(copiar(nums1));
copiar – código estudiante
static void copiar(int[] matrizCopiada){
int[] resultado = new int [matrizCopiada.length];
for(int i = 0; i<matrizCopiada.length; i++){
resultado[i] = matrizCopiada[i];
}
mostrarElementos(resultado);
}

Esta solución es incorrecta. La especificación


indica que copiar devuelve una colección de
enteros pero este código NO DEVUELVE NADA,
sólo muestra un resultado por pantalla.
copiar – especificación
/* copiar(coleccion de enteros col) ->
coleccion de enteros
* PRE: col no es null
* POST: el resultado es una nueva colección de
* enteros con los mismos elementos que col y en el
* mismo orden
* CASOS DE USO:
* copiar({1,2,3}) -> {1,2,3}
* copiar({}) -> {}
*/

La flecha en la cabecera indica que es una función


que devuelve una colección de enteros
Devolver / Mostrar
Las funciones siempre devuelven un
valor y lo hacen con la palabra reservada
return

x1
y = f(x1,x2) y
x2
Devolver / Mostrar
Los procedimientos nunca devuelven
nada. No tienen return y, en la
cabecera del procedimiento aparece la
palabra reservada void

x1
x2
p(x1,x2)
Devolver / Mostrar
System.out.println(...) es un
procedimiento.
System.out.println(…) no devuelve
nada, sólo muestra por pantalla lo
que aparezca entre paréntesis
copiar – código estudiante
static int[] copiar(int[] col){
int[] res = new int[col.length];
for(int i = 0; i<col.length; i++){
res[i] = col[i];
}
mostrarElementos(res);
return res;
}

Esta solución es correcta pero es “raro” que se


llame al procedimiento mostrarElementos dentro
de la función copiar. Lo habitual es que se llame a
mostrarElementos en el main que es donde se
hacen las pruebas.
invertirNuevo – solución 1
static int invertirNuevo(int[] col) {
int[] resultado = new int[col.length];
for(int i = 0, int j = col.length - 1; i < col.length;
i++, j--)
resultado[j] = col[i];
return resultado;
}

Esta solución usa dos índices, i y j. Ambos se


pueden poner en la cabecera del for.
invertirNuevo – solución 2
Nos damos i j j
cuenta de 0 4 col.length – 1 – 0
lo 1 3 col.length – 1 – 1
siguiente: 2 2 col.length – 1 – 2
3 1 col.length – 1 – 3
4 0 col.length – 1 – 4

static int invertirNuevo(int[] col) {


int[] resultado = new int[col.length];
for(int i = 0; i < col.length; i++)
resultado[col.length-1-i] = col[i];
return resultado;
}
invertirNuevo – código estudiante
static void invertirNuevo(int[] col) {
int col2[] = new int[col.length];
int apoyo = 0;
for(int i = col.length - 1; i >= 0; i--) {
col2[apoyo] = col[i];
apoyo = apoyo + 1;
}
System.out.println(Arrays.toString(col2));
}

Arrays.toString es para visualizar los elementos de


un array pero os hemos dado mostrarElementos
para que lo uséis en su lugar.

Este código es incorrecto porque NO DEVUELVE


NADA. No tiene return y pone void.
invertir
/* invertir(coleccion de enteros col)
* -> coleccion de enteros
* PRE: col no es null
* POST: el resultado es col con los elementos en
* orden invertido
* CASOS DE USO:
* invertir({1,2,3}) -> {3,2,1}
* invertir({}) -> {}
*/

En esta función se devuelve col con los elementos


modificados
invertir – código estudiante
static void invertir(int[] col){
if(col.length != 0){
System.out.print("{");
int i = 0;
while (i<col.length-1){
System.out.print(col[col.length-1-i] + ",");
i++;
}
System.out.println(col[col.length-1-i] + "}");
}
else
System.out.println("{}");
}
Esta solución es incorrecta. No devuelve nada,
sólo muestra cosas por pantalla.
invertir – código estudiante
static int[] invertir(int[] col){
int[] colInvertido = new int[col.length];
if(col.length == 0)
return col;
else{
for(int i = 0; i < col.length; i++)
colInvertido[i] = col[col.length-1-i];
}
return col = colInvertido;
}

Esta solución es incorrecta. No devuelve la


posición de memoria de col sino otra posición de
memoria diferente.
invertir

No hay que crear un array para el resultado


porque se devuelve el mismo array pero con
los elementos cambiados de orden

[0] [1] [2] [3] [4]


8 9 7 6 5
invertir

[0] [1] [2] [3] [4]


8 9 7 6 5

Hace falta una variable auxiliar para


hacer el intercambio de valores
invertir

[0] [1] [2] [3] [4]


8 9 7 6 5

Se intercambian los elementos de la primera


mitad con los de la segunda mitad, es decir,
sólo hay que recorrer hasta la mitad del array
invertir
static int[] invertir(int[] col){
int aux;
for(int i = 0; i < col.length/2; i++){
// intercambio de elementos
aux = col[i];
col[i] = col[col.length-i-1];
col[col.length-i-1] = aux;
}
return col;
}

Esta solución es correcta, eficiente y sigue las


convenciones o buenas prácticas de
programación.

También podría gustarte