Leer un arreglo sin tomar en cuenta sus valores por defecto

Iniciado por Beginner Web, 25 Abril 2019, 05:40 AM

0 Miembros y 3 Visitantes están viendo este tema.

Beginner Web

Hola tengo un arreglo de 10 posiciones donde solo coloque valores en las 4 primeras y quiero recorrer el arreglo pero sin leer los valores por defecto que son los 0, como hago o no se puede?

Código (java) [Seleccionar]
int arreglo[] = new int[10];

        arreglo[0] = 1;
        arreglo[1] = 2;
        arreglo[2] = 3;
        arreglo[3] = 4;

        for (int i = 0; i < arreglo.length; i++) {
            System.out.print(arreglo[i]);
        }
7w7

rub'n

Cita de: Beginner Web en 25 Abril 2019, 05:40 AM
Hola tengo un arreglo de 10 posiciones donde solo coloque valores en las 4 primeras y quiero recorrer el arreglo pero sin leer los valores por defecto que son los 0, como hago o no se puede?

Código (java) [Seleccionar]
int arreglo[] = new int[10];

       arreglo[0] = 1;
       arreglo[1] = 2;
       arreglo[2] = 3;
       arreglo[3] = 4;

       for (int i = 0; i < arreglo.length; i++) {
           System.out.print(arreglo[i]);
       }


No entendí muy bien, quieres recorrer las posiciones menos la posición cero, o no imprimir los valores que sean iguales a cero? , O sea, filtrar?


rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen

Beginner Web

Si, solo quiero leer las posiciones donde ingrese valores, las otras no  ;-)
7w7

rub'n

#3
Cita de: Beginner Web en 25 Abril 2019, 15:42 PM
Si, solo quiero leer las posiciones donde ingrese valores, las otras no  ;-)

Código (java) [Seleccionar]
for(int f=0; f<4; f++)

No tengas miedo a probar Chavalina  :D, desde 0 para incluir ese Index, y hasta menos 4 para no incluir la posición 5


rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen

WHK

En ese caso no sería mejor utilizar un objeto de tipo List<> en ves de un array nativo?, de esa manera puedes tener objetos nulos, donde el valor por defecto sea nulo y dentro del for dices que si el valor no es nulo entonces se procesará, de esa manera no dependerás de la cantidad de valores que llenes, esto funciona solo si usas los objetos de Java en ves de los primitivos, por ejemplo List<Integer> list; , incluso puedes utilizar lambda.

Saludos.

Beginner Web

#5
Claro, ahí si funcionaría  :laugh:
¿Así, verdad?

Código (java) [Seleccionar]
ArrayList<Integer> arreglo = new ArrayList<>();
       arreglo.add(1);
       arreglo.add(2);
       arreglo.add(3);

       for (int i : arreglo) {
           if (Objects.nonNull(i)) {
               System.out.println(i);
           }
       }


¿Por qué no funciona si coloco en el ArrayList<int> en lugar de ArrayList<Integer>???

Ya veo que no funcionará con el arreglo simple :xD
7w7

rub'n

#6
Cita de: Beginner Web en 25 Abril 2019, 18:51 PM
Claro, ahí si funcionaría  :laugh:
¿Así, verdad?
¿Por qué no funciona si coloco en el
Código (java) [Seleccionar]
ArrayList<int> en lugar de ArrayList<Integer>  ???

Código (java) [Seleccionar]
ArrayList<Integer> arreglo = new ArrayList<>();
       arreglo.add(1);
       arreglo.add(2);
       arreglo.add(3);

       for (int i : arreglo) {
           if (Objects.nonNull(i)) {
               System.out.println(i);
           }
       }


Y con lo del arreglo comun, ya veo que no funcionará  :xD

Lee un poco más detallado el mensaje de WHK , mejor dicho el gran WHK, porque las listas genéricas funcionan únicamente con Objetos,. El objeto que representa al primitivo int, es Interger, o sea, la clase envoltoria(wrapper) es Integer.

Ese for que usas en la línea 6 carece de índice, se llama for extendido

Usa el for normal que si tiene índice.

Código (java) [Seleccionar]
for(int f=0; f<arreglo.size(); f++)

Edito, ambos for sirven, pero cada uno para una cosa, todo depende lo que quieras hacer,

Con el arreglo normal puedes usar el for normal, Stream, IntStream, Arrays.stream

Recuerda también que las clases van en mayúsculas, o sea, Double, Integer, Boolean, Long etc... Nomenclatura camel case



rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen

Beginner Web

#7
Haaaaaaaaaaa!!!

Código (java) [Seleccionar]
ArrayList<Integer> lista = new ArrayList<>();
        lista.add(1);
        lista.add(2);
        lista.add(3);

        for (int i=0; i<lista.size(); i++) {
            if (Objects.nonNull(i)) {
                System.out.println(i);
            }
        }
7w7

rub'n



rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen

WHK

Con lamda no necesitas iteraciones:

lista.stream().filter(Objects::nonNull).reduce((k, v) -> v);

Esto retorna todos los valores no nulos, incluso puedes aplicar funciones de llamada syncrónica dentro de lambda para procesar cada valor sin iteraciones.

Claramente internamente la JVM realiza iteraciones, pero se hace a bajo nivel, el performance es mucho mejor.

De todas maneras por mas que lo pienso no encuentro sentido alguno tener un listado vacio de items y menos aun cuando la pila se vuelve muy grande.

Saludos.