Java - me sale un warning de "No se está usando la variable v"

 
Vista:
Imágen de perfil de Juan José
Val: 27
Ha disminuido su posición en 5 puestos en Java (en relación al último mes)
Gráfica de Java

me sale un warning de "No se está usando la variable v"

Publicado por Juan José (13 intervenciones) el 01/10/2020 16:25:54
¿Qué ocurre con los elementos del array? ¿A qué se debe el ​warning​?

1
2
3
4
int[] datos = { 0, 1, 2, 3, 4, 5, 6, -5, 7, 8, 9, 10 };
for (int v : datos) {
    v = 0;
}

Por lo que entiendo está cambiando todo el contenido del array a valor 0. Pero me sale un warning de "No se está usando la variable v". ¿Por qué se debe eso?

Encontré estas respuestas:
1.- Los bucles for-each no son apropiados cuando desea modificar la matriz.
2.- Los bucles for-each no realizan un seguimiento del índice. Entonces no podemos obtener un índice de matriz usando For-Each loop.
3.- For-each solo itera hacia adelante sobre la matriz en pasos únicos.
4.- For-each no puede procesar dos declaraciones de toma de decisiones a la vez.
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

me sale un warning de "No se está usando la variable v"

Publicado por Tom (1646 intervenciones) el 01/10/2020 18:16:44
La respuesta es mucho más sencilla, y además ya la tienes: "No se está usando la variable v".
Lo que te ocurre es que te has liado; No estás cambiando, para nada, el contenido del array.
Deberías repasar algún tutorial básico de java.
( Por ejemplo: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html )
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
Imágen de perfil de Juan José
Val: 27
Ha disminuido su posición en 5 puestos en Java (en relación al último mes)
Gráfica de Java

me sale un warning de "No se está usando la variable v"

Publicado por Juan José (13 intervenciones) el 01/10/2020 18:56:29
Lo que he visto que hace después de poner
1
v = 0
es que todos los valores que tiene datos los pone como valor 0. Te dejo una imagen de la ejecución

Captura-de-pantalla-2020-10-01-a-las-18.51.14
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

me sale un warning de "No se está usando la variable v"

Publicado por Tom (1646 intervenciones) el 01/10/2020 19:13:13
Prueba esto, que es lo mismo:

1
2
3
4
5
6
7
8
9
{
  int a = 10;
  int b = a;
 
  b = 0;
 
  System.out.printf("a => %d\n", a);
  System.out.printf("b => %d\n", b);
}

Si te digo que te repases algo básico ... por algo será :)
Ahora, tu nueva pregunta debería ser: ¿ Entonces por qué veo el array relleno a 0 ?
Y la respuesta sería: Porque no estás viendo el array, sino otra cosa.
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
Imágen de perfil de Billy Joel
Val: 2.361
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

me sale un warning de "No se está usando la variable v"

Publicado por Billy Joel (673 intervenciones) el 01/10/2020 19:10:13
Te voy a dar una respuesta un tanto larga y a mi modo.
En Java las variables y objetos se almacenan en memoria. A esos espacios en memoria se puede acceder por dos formas:
Por valor
Por referencia

En Java a las vaqriables se accede por valor; A los objetos se accede por referencia.

Cuando utilizas un foreach de un array con variables de tipo primitivo entonces se accede por valor. Si utilizas el foreach para acceder a un array de objetos entonces se accede por referencia. .

¿Qué implica eso de accesar por valor o referencia?
Acceder por valor quiere decir que vas a manejar una copia del valor al que accedes. Si modificas ese valor no le haces nada al objeto.
Acceder por referencia quiere decir que vas a manejar el valor del objeto en memoria. Si modificas el valor de un objeto ese cambio se reflejará en el futuro.

Hagamos la prueba de pase por referencia usando un objeto.
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
public class V {
 
    private Integer valor;
    public V(){
        valor = null;
    }
 
    public V(Integer valor){
        this.valor = valor;
    }
 
    /**
     * @return the valor
     */
    public int getValor() {
        return valor;
    }
 
    /**
     * @param valor the valor to set
     */
    public void setValor(int valor) {
        this.valor = valor;
    }
 
    @Override
    public String toString(){
        return valor != null ? valor.toString() : null;
    }
}

Entonces en tu main (o donde sea que se ejecute)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
V[] valores = {
    new V(0),
    new V(1),
    new V(2),
    new V(3),
    new V(4),
    new V(5),
    new V(6),
    new V(-5),
    new V(7),
    new V(8),
    new V(9),
    new V(10),
};
 
for(V v : valores){
    v.setValor(0);
}
for (int i = 0; i < valores.length; i++) {
    System.out.println(i + ": " + valores[i]);
}

Como puedes ver estoy usando el foreach para asignar el valor
1
2
3
for(V v : valores){
    v.setValor(0);
}

Cualquier duda solo escribe.

Saludos,
Billy Joel
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