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

 
Vista:
sin imagen de perfil
Val: 8
Ha aumentado su posición en 5 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 (1831 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 aumentado su posición en 2 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 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 aumentado su posición en 5 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 aumentado su posición en 5 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