Java – ArrayList – .Método size()

Actualmente estoy en el proceso de aprendizaje del lenguaje de programación Java, y necesito ayuda para entender el tamaño del método de la clase ArrayList. Antes de hacer la pregunta, permítanme explicar el programa.

Este programa busca el promedio de las calificaciones de la clase.

Mi pregunta sería sobre el tamaño del método de la clase ArrayList. En la For-Loop, el relacional expresión, «< grados.size()», se ejecutará la «i» hasta que sea menor que el tamaño de la matriz. Se me dijo que el tamaño de la matriz es siempre uno más que el número de elementos de la matriz, así que en mi caso, dado que tengo 3 elementos (grados) en mi matriz, de hecho tengo una matriz de tamaño de 4 (similar a cómo una cadena de obras). Observe que después de que me fuera de la For-Loop, soy capaz adecuadamente para calcular el promedio con el tamaño del método. Estoy confundido porque si el tamaño de la matriz sería uno más que el número de elementos, entonces que no se acaba de dividir por 4 en vez de 3? ¿Por qué las reglas funcionan de forma diferente en un Bucle? Gracias por cualquier persona dispuesta a arrojar luz sobre esto.

    import java.util.ArrayList; 


public class Chap11Part1 

    public static void main(String[] args)
    {
        double average;
        int total = 0;
        ArrayList<Integer> grades = new ArrayList<Integer>();
        grades.add(78);
        grades.add(84);
        grades.add(90);
        for(int i = 0; i < grades.size(); ++i) 
            total += grades.get(i); 
        average = total / grades.size();
        System.out.println("The average is " + average);
  • el tamaño es exactamente el mismo número de elementos. Tenga en cuenta que en contados a partir de 0, no 1.
  • Sin frenos (su bucle for) = posibles problemas en el futuro
  • no necesitan apoyos
  • No se comprende el «tamaño de la matriz es siempre uno más que el número de elementos.» Es en realidad uno más que el índice más grande. Si usted tiene 3 elementos, tiene un índice máximo de 2 (0, 1 y 2), que es de 3 elementos por separado. Si usted llama .size() en una lista a la que te gustaría conseguir 3 de la espalda.
  • Para explicar RC respuesta. Para el bucle sólo mediante la siguiente instrucción si no se establecen los apoyos a capsulate el ámbito de aplicación del bucle.
  • ¿Qué RC probablemente significaba que podría convertirse en un problema más adelante. Obviamente no es un problema ahora, pero el lenguaje de la cruz aceptados de buenas prácticas para siempre incluyen refuerzos como nos priva de simples errores en el largo plazo y claramente denota bloques.
  • RC, agradezco la respuesta, sin embargo, no creo que hubiera afectado a mi código. Recuerde, cuando codificación en Java, de una sola declaración de bucles puede ser escrito sin paréntesis.
  • En el costo de encender una pequeña llama, se considera una buena práctica (y exigió en varias guías de estilo) para que siempre se incluyen los apoyos en la no-one-liner for, while y if/then/else bloques de… EDITAR – one-liner interpretado como «no termina en la misma línea que contiene la apertura for«, y no como en «una sola instrucción»
  • aclaró mi comentario, y @JeffSours viniendo de alguien preguntando sobre size(), creo que se debe ceñirse a «utilizar siempre llaves» (NB: es un consejo)
  • Hizo usted comete un error en un comentario? Excluyendo los apoyos en la no-one-liner es un error de lógica. Así, las guías de estilo a un lado es un requisito de nivel de idioma.
  • es tu duda claro ahora? índice de empezar desde 0 por lo que el primer elemento tiene el índice 0 y así sucesivamente, de manera que si usted tiene 4 elementos que han 0-3 índices
  • aclaró anterior comentario
  • También, no use ++i a menos que hagan una diferencia. Porque es más común ver a los i++, que hará que otros programadores busque por qué utilizó la anterior, a continuación, se quedarán confundidos cuando no pueden encontrar la razón de hacer una diferencia. Para aprender más sobre él, echa un vistazo a este post: stackoverflow.com/questions/484462/…
  • Que realmente no suena como una buena razón. Usted debe ser capaz de ver de inmediato lo que ++i ¿ y i++ hace de inmediato si usted tiene alguna comprensión de los lenguajes que soportan. Y, sin hablar sobre el potencial (y menor) mejoras en la velocidad, yo recomiendo siempre el uso de pre-revisión (++i) cuando usted no desea que el pre-incremento de valor, o cuando es una sola expresión y sólo el uso de post-fix (i++) cuando usted necesita el valor de la corriente antes de incremento.
  • Yo veo lo que estás diciendo ahora. Tiene más sentido.

InformationsquelleAutor Jeff Sours | 2015-06-01

3 Kommentare

  1. 3

    tamaño de la matriz es igual al número de elementos. Única cosa a recordar es índice comienza con 0; Así, el pasado del índice de tamaño de 1:

    import java.util.ArrayList;
    
    public class Chap11Part1 {
    
        public static void main(String[] args) {
            double average;
            int total = 0;
            ArrayList<Integer> grades = new ArrayList<Integer>();
            grades.add(78);
            grades.add(84);
            grades.add(90);
            for (int i = 0; i < grades.size(); ++i)
                total += grades.get(i);
            average = total / grades.size();
            System.out.println("The average is " + average);
        }
    }
    • Me gustaría añadir una println antes de que el bucle for para mostrar claramente el tamaño de la matriz. Que ayudaría a aclarar la OMI.
    • Creo que entiendo ahora. Estoy empezando el «yo» en cero en la For-Loop. Como estado por Rajesh, el tamaño de los grados será devuelto por el mismo número de elementos. El primer elemento comienza en cero, y quiero que el bucle para detener antes de las 3 porque no tengo un elemento en el tercer compartimiento, así que no podía conseguir cualquier cosa, desde ese compartimiento para agregar a mi total. En ese momento, mi bucle debe detenerse. Es aceptable para el uso en mi cálculo de promedio, porque devuelve el número de elementos. Gracias a todos por ayudarme, y la comprensión de los estilos de programación!
  2. 0

    Como se ha señalado, tiene una confusión que se inicia aquí:

    Se me dijo que el tamaño de la matriz es siempre uno más que el número de elementos de la matriz, así que en mi caso, dado que tengo 3 elementos (grados) en mi matriz, de hecho tengo una matriz de tamaño de 4 (similar a cómo una cadena de obras).

    Si este malentendido por parte del instructor de explicar las cosas o malinterpretando el significado es irrelevante. Esta comprensión es la fuente de su confusión y en última instancia el problema.

    Estás en lo correcto. Y ArrayList‘s size función devolverá 1 más de algo, de forma similar a Strings funcionan tan bien. Que algo es el índice máximo. Matrices (y en última instancia ArrayLists, el cual es una Estructura de Datos implementado en la parte superior de una matriz subyacente) tiene un valor de índice que comienza en 0 (no 1 como se haría normalmente cuando el recuento). Eso significa que, si usted tuvo tres números, que terminaría con algo como esto:

    numbers[0] = 10
    numbers[1] = 108
    numbers[2] = 309

    (Ignorar el pseudo-código de la sintaxis, prestar atención a los valores entre paréntesis aquí)

    Si me fuera a llegar la size (o length con ciertos tipos) me gustaría conseguir 3. Claramente se puede ver que sólo hay 3 números que se muestran. El «uno más que» aspecto es uno más que el índice máximo. El índice máximo aquí es 2, dado que empezamos a contar (índice de sabios) en 0.

    Este problema es uno de los más comunes que he visto de nuevo a los desarrolladores y es a menudo referido como un «off-by-one error» o OBO de Error como desea que el primer elemento de una lista que usted puede tratar de list.get(1) cuando que la realidad es la segundo elemento de la lista, .get(0) sería el primero.

    Así que ahora…

    Tiene 3 elementos en su ArrayList, una llamada a .size daría (como debe de esperar) el número 3 en volver. El bucle comparaciones como esto:

    Iteration 1: i = 0; 0 < 3 == true; execute body
    Iteration 2: i = 1; 1 < 3 == true; execute body
    Iteration 3: i = 2; 2 < 3 == true; execute body
    Iteration 4: i = 3; 3 < 3 == false; jump over body

    Como se puede ver, su condición es marcado como «uno más que el número de elementos» veces (en este caso, 4), pero sólo 3 veces, o el número real de elementos, es el cuerpo del bucle ejecutado o ejecute. Si usted accidentalmente había utilizado <= en su lugar, usted conseguiría un OBO de Error al acceder a «uno más de la lista que contiene.» Es por eso que tener una comprensión de este conjunto de «empezar en 0» sistema de conteo, va a ser clave, así como la comprensión de que las tallas o lugares tienden a ser mayores que los valores del índice.

    Si cualquier parte de este es más confuso de lo que debe ser, hágamelo saber y voy a tratar de solucionarlo.

  3. 0

    Los elementos de la matriz (78, 84, 90) son tomados en cuenta para dar el tamaño/longitud de la matriz, que es de 3 (uno más que el mayor subíndice) Lo que usted debe saber es que el índice (posición de cada elemento) comienza desde 0. Así que en su lista, 78 es en el índice 0, 84 en la 1 y 90 en 2.

    Creo que deberías leer más sobre los diferentes métodos de Arrays y Lists y también la diferencia entre ++i y i++

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea