Java - Ayuda, tengo una pequeñita duda en un programa en java

 
Vista:
sin imagen de perfil
Val: 8
Ha disminuido su posición en 21 puestos en Java (en relación al último mes)
Gráfica de Java

Ayuda, tengo una pequeñita duda en un programa en java

Publicado por Flor (3 intervenciones) el 25/10/2017 05:20:32
Entiendo todo lo demás, excepto en esta parte del código, el código completo lo pongo más abajo.

for( int j=len-1; j>=i; j-- )
{

datos[j+1]=datos[j]; //Luego desplazamos los elementos del array entre la última

} //y la i-ésima posición para poder asignar

datos[i]=elm; // en esta el elemento que se pretende insertar.
len++;
}
Mi duda es, por que en el for, se pone j=len-1, eso no daría un valor de -1? ya que len creo que vale 0. Es decir sólo en esa parte dudo. Ayuda.

Este es el programa completo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
public class MiColeccion {
 
    //La clase MiColeccion tendrá dos variable de instancia
    //Un Object, para contener la colección de objetos
    //y un int que indicará la cant de elementos que actualmente
    //tiene la colección.
 
    private Object datos[] = null;
private int len=0 ;
 
// en el constructor se especifica la capacidad inicial
public MiColeccion(int capacidadInicial)
{
datos = new Object[capacidadInicial];
}
 
//En el fragmento de código anterior, definimos 
//las variables de instancia datos y len
//y un constructor a través del cual el usuario debe especificar 
//la capacidad inicial que le quiera dar al array.
 
// retorna el i-esimo elemento de la coleccion
public Object obtener(int i)
{
return datos[i];
}
// indica cuantos elementos tiene la coleccion
public int cantidad()
{
return len;
 
}
 
 
 
 
//A continuación, analizaremos el método insertar cuyo objetivo es insertar un elemento
//en la i-ésima posición del array.
 
 
// al array anterior para que el Garbage Collector libere la memoria que ocupa.
 
//Al final incrementamos el valor de la variable len.
 
public void insertar(Object elm, int i)
{
if( len==datos.length ) //En este método primero verificamos si la capacidad 
{                       //del array está colmada.
Object aux[] = datos; //Si esto es así entonces creamos un nuevo array 
datos = new Object[datos.length*2]; //con el doble de la capacidad del anterior.
for(int j=0; j<len; j++)
{
datos[j]=aux[j]; //copiamos en este los elementos de la colección y asignamos null 
}
aux=null;
}
 
for( int j=len-1; j>=i; j-- )
{
  System.out.println(j);
datos[j+1]=datos[j]; //Luego desplazamos los elementos del array entre la última
 
}                      //y la i-ésima posición para poder asignar 
 
datos[i]=elm; // en esta el elemento que se pretende insertar. 
len++;
}
//Veamos ahora el método buscar que recorre el array mientras no encuentre 
//el elemento que busca.
 
public int buscar(Object elm)
{
int i=0;
// mientras no me pase del tope y mientras no encuentre...
for( ;i<len && !datos[i].equals(elm); i++ );
// si no me pase entonces encontre, si no... no encontre
return i<len ? i : -1;
}
 
//El método agregar cuyo objetivo es el de agregar un elemento al final del array se
//resuelve fácilmente invocando al método insertar para insertar el elemento en la
//posición len.
public void agregar(Object elm)
{
insertar(elm,len);
}
 
 
 
//Por último, veremos el código del método eliminar
//que elimina el i-esimo elemento del array desplazando hacia arriba
//los elementos ubicados a partir de la posición i+1.
//Luego decrementa el valor de la variable len
//y retorna el elemento eliminado de la colección.
 
// elimina un elemento desplazando los demas hacia arriba
public Object eliminar(int i)
{
Object aux = datos[i];
for( int j=i; j<len-1; j++ )
{
datos[j]=datos[j+1];
}
len--;
return aux;
}
 
 
 
}
Y aquí se muestran los datos en la clase principal:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public static void main(String[] args) {
 
//Ejemplo: muestra una lista de nombres en orden inverso. En el siguiente 
//programa, pedimos al usuario que ingrese nombres de personas. Cuando
//finaliza el ingreso de datos mostramos los nombres ingresados en orden inverso al original
//y además, por cada nombre, mostramos la cantidad de letras que tiene.
 
Scanner scanner = new Scanner(System.in);
// creo una coleccion con capacidad inicial = 5
MiColeccion mc = new MiColeccion(5);
// leo el primer nombre
System.out.println("Ingrese Nombre: ");
String nom=scanner.next();
while( !nom.equals("FIN") )
{
// inserto siempre en la posicion 0
mc.insertar(nom,0);
// leo el siguiente nombre
nom=scanner.next();
}
String aux;
 
// recorro la coleccion y tomo cada uno de sus elementos
for(int i=0; i<mc.cantidad(); i++ )
{
// el metodo obtener retorna un Object entonces
// entonces tengo que castear a String
aux = (String) mc.obtener(i);
System.out.println(aux +" - "+aux.length()+" caracteres");
}
}
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Ayuda, tengo una pequeñita duda en un programa en java

Publicado por Tom (1569 intervenciones) el 25/10/2017 09:32:21
Aparentemente len indica el número de elementos del array (cuyos índices irían de 0 a len-1).
No puedes borrar nada si la lista está vacía, así que sí, en tu caso len podría valer -1.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Jose
Val: 130
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda, tengo una pequeñita duda en un programa en java

Publicado por Jose (46 intervenciones) el 25/10/2017 17:24:16
Ampliando a lo que ya comento tom,
pongamos un ejemplo:
es el primer insert:
1
2
3
4
5
6
7
8
9
len=0;
 insertar(new Object(), 1);
//en esta parte del codigo, 
for( int j=len-1; j>=i; j-- )
{
  System.out.println(j);
datos[j+1]=datos[j]; //Luego desplazamos los elementos del array entre la última
 
}

sustituyendo los parametros conocidos len e i, quedaria asi:

1
2
3
4
5
6
for( int j=-1; j>=1; j-- )//como la condición de j>=1 no se cumple no entra al for.
{
  System.out.println(j);
datos[j+1]=datos[j]; //Luego desplazamos los elementos del array entre la última
 
}

seguiria en la siguiente linea
datos[i]=elm; // en esta el elemento que se pretende insertar.
len++;


//como ves el for, si funciona, si len es 0 no entra y si es mayor a 0 entonces ya realiza su funcionamiento que es desplazar los elementos a una posición mayor, el algoritmo en si, tiene un fallo y es el parametro i, si yo coloco un i más
grande que el vector datos, este se va lanzar un exception de que no existe la posición que se desea acceder en el vector ..

bueno y eso es todo, si tienes más preguntas no dudes en escribirlo aqui
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 8
Ha disminuido su posición en 21 puestos en Java (en relación al último mes)
Gráfica de Java

Ayuda, tengo una pequeñita duda en un programa en java

Publicado por Flor (3 intervenciones) el 10/11/2017 07:49:17
En verdad, estoy muy pero muy agradecida con tu respuesta. No había entrado antes, porque había perdido el acceso a la cuenta. Entendí muy bien. Te diste el tiempo para explicar, y aportar en el foro :) Mil gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 8
Ha disminuido su posición en 21 puestos en Java (en relación al último mes)
Gráfica de Java

Ayuda, tengo una pequeñita duda en un programa en java

Publicado por Flor (3 intervenciones) el 10/11/2017 07:50:02
Muchisimas gracias, en verdad, me quedó muy clara la respuesta. Muy amable.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar