¿Como usar el while con arrays?

Tengo que hacer un programa en el que debo ingresar nombres y notas, dentro de un ciclo while y este termina cuando ingreso una nota igual -1. Pero cuando voy a ejecutar el programa me salta :

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException : 0 

at NotasYNombres.main(NotasYNombres.java:12)

esta parte es el renglón 12 while(notas[i]!=-1) , no se como poner la condicion en el while para que no me salte ese mensaje.

import java.util.Scanner;
public class NotasYNombres{
 public static void main(String [] args){
     Scanner teclado = new Scanner (System.in);
     int i =0;
     int contadorParaFor=0;
     int notas[]=new int [i];
     String nombres[] =new String [i];
         while(notas[i]!=-1){
        i++;
        contadorParaFor++;
         System.out.println(i+".Ingrese nombre : ");
         nombres[i]= teclado.next();
         System.out.println(i+".Ingrese nota : ");
         notas[i]=teclado.nextInt();
    }
    for( i= 0 ; i<=contadorParaFor ; i++){
        if(notas[i]>7){
                 System.out.println("-"+nombres[i]);
                   }
    }
     }
               }

1 respuesta

Respuesta

Piensa que si estas poniendo que i = 0, estas creando los arrays de longitud 0, por lo tanto no tienen ninguna longitud. Un array debe tener una longitud determinada, si no tienes una longitud determinada debes usar un truco, que es redefinir el array. Para crear un bucle while condicionado a una entrada debes hacerlo revisando la entrada del teclado. Te pongo un pequeño ejemplo :

        String[] nombres = new String[1];
        String[] nombres_aux;
        int[] notas = new int[1];
        int[] notas_aux;
        boolean continuar = true;
        Scanner in = new Scanner(System.in);
        while (continuar) {
            String nombre;
            int nota;
            System.out.print("Introduce nombre: ");
            nombre = in.next();
            if (nombre.equals("-1")) {
                continuar = false;
                break;
            }
            System.out.print("Introduce nota: ");
            nota = Integer.parseInt(in.next());
            if (nota == -1) {
                continuar = false;
                break;
            }
            // Rellenamos array
            nombres[nombres.length - 1] = nombre;
            notas[notas.length - 1] = nota;
            // Construimos un nuevo array de longitud + 1
            nombres_aux = new String[nombres.length + 1];
            notas_aux = new int[notas.length + 1];
            // Rellenamos los arrais auxiliares
            for (int i = 0; i < notas.length; i++) {
                notas_aux[i] = notas[i];
                nombres_aux[i] = nombres[i];
            }
            notas = notas_aux;
            nombres = nombres_aux;
        }
        System.out.println("Contenido de las listas: ");
        for (int i = 0; i < notas.length; i++) {
            if (nombres[i] != null) {
                System.out.print(nombres[i] + "-");
                System.out.println(notas[i]);
            }
        }

Para que sirven los arrais auxiliares @stanimir? 

Como te comente más arriba, un array no se comporta como un list, es decir no tiene un tamaño variable, por lo tanto para redefinir el array ampliando su tamaño necesitas volcar sus datos en otro para no perderlos. Por eso si te fijas lo que se hace es crear un array auxiliar un espacio más largo que el original, volcar los datos del array original dentro, y luego asignar a la referencia del array original el nuevo array auxiliar. De esta manera a cada ciclo del bucle while ampliamos el array en 1.

Si te queda alguna duda con gusto te responderé.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas