Foros del Web » Programación para mayores de 30 ;) » Java »

Duda con Arrays de enteros

Estas en el tema de Duda con Arrays de enteros en el foro de Java en Foros del Web. hola amigos aca yo denuevo les cuento estoy estudiando ejercicios de java y no comprendo el resultado q me imprime esta clase Código PHP: //ejercicios ...
  #1 (permalink)  
Antiguo 12/11/2010, 14:00
 
Fecha de Ingreso: diciembre-2007
Mensajes: 385
Antigüedad: 16 años, 11 meses
Puntos: 0
Duda con Arrays de enteros

hola amigos aca yo denuevo les cuento estoy estudiando ejercicios de java y no comprendo el resultado q me imprime esta clase

Código PHP:
//ejercicios

class {
static 
int x[ ] = {12};
int y[ ];
void f (int z[ ]) { z[1]+=2; }
void g ( ) {
A a = new ( );
a.x[0]++;
}

public static 
void main (String args[ ]) {
A b = new ( );
b.b.x;
b.(b.y);
b.( );
System.out.println (b.x[0] + " " b.x[1]); 
al imprimir al ultimo en el System.out.println (b.x[0] + " " + b.x[1]);
no logro comprender realmente pq la posicion 1 del array x me da 4, ya q en ningun momento en el codigo la posicion x[1] es aumentada/incrementada, pero al ejecutarlo esta posicion me imprime 4 y no logro entender pq, ya q en el codigo q aqui muestro esta posicion x[1] en ningun momento es incrementada como para aumentar de 2 a 4... porfavor amigos alguien me podria explicar el pq esta posicion del arreglo x se aumenta en dos y en q momento??? ya q al ver el codigo no logro entender ni encontrar el lugar en q dicha posicion aumenta en 2, porfavor agradeceria mucho la explicacion del pq ocurre esto ya q no logro entender y encontrar en q momento la posicion x[1] de este arreglo aumenta en 2 unidades mas agradeceria si me explicaran el pq ya q soy totalmente novato en java.... de antemano gracias.... bye.
  #2 (permalink)  
Antiguo 12/11/2010, 14:50
 
Fecha de Ingreso: enero-2008
Mensajes: 614
Antigüedad: 16 años, 10 meses
Puntos: 57
Respuesta: Duda con Arrays de enteros

En java, las variables que son de algun tipo objeto (en este caso un arreglo), contienen un apuntador a sus datos y no con tienen los datos en si.

Ejecuta este codigo:

Código Java:
Ver original
  1. int arreglo1[] = {1,2};
  2. int arreglo2[];
  3. arreglo2 = arreglo1;
  4. System.out.println("arreglo1[1] = " + arreglo1[1]); //arreglo1[1] = 2
  5. arreglo2[1] = 3;
  6. System.out.println("arreglo1[1] = " + arreglo1[1]); //arreglo1[1] = 3

Cuando asignas arreglo1 a arreglo2 en realidad estas diciendo que arreglo2 apunte a los mismos datos que arreglo1. Es por eso que al modificar arreglo2 tambien modificas los datos de arreglo1. Es lo que esta pasando con tu Clase A
  #3 (permalink)  
Antiguo 12/11/2010, 15:04
 
Fecha de Ingreso: diciembre-2007
Mensajes: 385
Antigüedad: 16 años, 11 meses
Puntos: 0
Respuesta: Duda con Arrays de enteros

Hola posman gracias por responder, perom porfavor podrias explicarme un pokito mas claro lo q significa y el pq x[1] toma el valor 4??? te lo agradeceria muchisimo de antemano graacias... bye
  #4 (permalink)  
Antiguo 13/11/2010, 06:33
 
Fecha de Ingreso: octubre-2010
Mensajes: 9
Antigüedad: 14 años, 1 mes
Puntos: 1
Respuesta: Duda con Arrays de enteros

Primero necesito tu código un pelín bonito que si no no lo entiendo:
Código:
//ejercicios

class A {
    static int x[] = {1, 2};
    int y[];

    void f (int z[]) {
        z[1]+=2;
    }

    void g ( ) {
        A a = new A ( );
        a.x[0]++;
    }

    public static void main (String args[ ]) {
        A b = new A ( );
        b.y = b.x;
        b.f(b.y);
        b.g ( );
        System.out.println (b.x[0] + " " + b.x[1])
    }
}
estudiemos el progreso de la aplicación:
- Creamos un nuevo objeto A y guardamos una referencia a él en b
- Asignamos en b.y el valor de A.x (aunque en el código se accede usando b.x, no debería, puesto que x es ESTÁTICO). Esta asignación significa que los dos campos contienen una referencia AL MISMO ARRAY, y no a arrays iguales (cambios en el uno afectan al otro, etc)
- Llamamos al método b.f(int[]) con el array b.y, el cual incrementa en 2 unidades la posicion 1 de b.y y, por tanto, de la posición 1 de A.x
- Llamamos al método b.g() que crea un nuevo objeto A (todavía no sé para qué) y lo utiliza para incrementar la posición 0 del array A.x en una unidad (de nuevo usando una instancia para acceder a un campo ESTÁTICO)
- Imprimimos las posiciones 0 y 1 del vector A.x (de nuevo usando una instancia, que ya está empezando a dolerme), que en este punto contiene los valores 1 y 2 respectivamente

El único punto con posible dificultad es la asignación. En toda la ejecución sólo existe un array, al que nos podemos referir tanto con A.x como con b.y, debido a la asignación de la segunda línea del main.

Y cuidadito con usar instancias para acceder a campos o llamar a métodos que sean estáticos. Java nos deja hacerlo pero está muy desaconsejado puesto que puede llevar a confusiones como la del método g() de este código, que crea un objeto A completamente innecesario que lo único que hace es gastar tiempo y memoria. También desde Java se aconseja declarar los arrays con los corchetes en el tipo y no en el nombre de la variable:
Código:
int[] x; // Good
int x[]; // Not so good

Etiquetas: arrays, enteros
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:26.