java definida por el usuario de la matriz (definida por el usuario y el tamaño de un array) devuelve [null, null, null, …]

Esta es mi primera pregunta en este sitio, me estoy quedando este en NetBeans 8.0.2 y tratando de imprimir mis definido por el usuario de la matriz, pero que mantiene regresando valores null. Por ejemplo, si usted dice que hay 2 empleados y entrar tanto de sus nombres, devolverá [null, null]

De cómo corregir este error? Yo soy un novato.

import java.util.Scanner;
import java.text.DecimalFormat;
import java.util.Arrays;

class Tips_Calculation2 
{
public static void main(String[] args)
{
    Scanner scan = new Scanner(System.in);

    System.out.print("How many employees for the week?: ");
    int numberOfEmps = scan.nextInt();

    //counter for the if statement that should return all employees from the array
    int counter = numberOfEmps;

    int[] nOEarray = new int[numberOfEmps];


    System.out.println("\nEnter names of workers up to the entered amount (" + numberOfEmps + "):");


    for(int i = 1; i <= numberOfEmps; i++)
    {
        String nameCycler = scan.next();
        String[] namesArray = new String[i];

        if(counter == i)
        {
            System.out.println(Arrays.toString(namesArray));
        }
    }
}
}

Caso omiso de importar java.texto.DecimalFormat como voy a utilizar esto de importación más tarde en mi código. Gracias de antemano a todo el que es tipo/lo suficientemente inteligente como para responder.

  • ¿Cuál es el punto de counter como una variable independiente? Sólo uso numberOfEmps, o mejor aún, nOEarray.length.
  • Él dijo: «yo soy un novato», él encontrará que es inútil en el futuro 😉
InformationsquelleAutor Ryan Horner | 2015-08-25

7 Kommentare

  1. 1

    Primero que todo, usted nunca ponga su nameCycler a la matriz. Segundo de todo lo que usted cree su namesArray cada iteración que creo que está mal.

  2. 1

    Está creando una nueva marca (lleno de null) de la matriz de namesArray en cada paso a través del bucle, y luego nunca la asignación de nada. Creo que usted está buscando algo como este lugar. Tenga en cuenta que Java índices de cero, no una sola.

    String[] names = new String[numberOfEmps]
    
    for(int i = 0; i < names.length; i++) {
        names[i] = scanner.next();
    }
    
    System.out.println(Arrays.toString(names));
  3. 1

    Primero de todo, hay que inicializar la matriz fuera de su bucle. En segundo lugar, olvidó poner el nombre a la matriz de valor(s).

    Intente esto:

    import java.util.Scanner;
    import java.text.DecimalFormat;
    import java.util.Arrays;
    
    class Tips_Calculation2 {
        public static void main(String[] args) {
            Scanner scan = new Scanner(System.in);
    
            System.out.print("How many employees for the week?: ");
            int numberOfEmps = scan.nextInt();
    
            int[] nOEarray = new int[numberOfEmps];
    
            System.out.println("\nEnter names of workers up to the entered amount (" + numberOfEmps + "):");
    
            String[] namesArray = new String[numberOfEmps];
    
            for (int i = 0; i < numberOfEmps; i++) {
                namesArray[i] = scan.next();
            }
            System.out.println(Arrays.toString(namesArray));
        }
    }
  4. 0

    Reemplazar

    for(int i = 1; i <= numberOfEmps; i++)
    {
        String nameCycler = scan.next();
        String[] namesArray = new String[i];
    
        if(counter == i)
        {
            System.out.println(Arrays.toString(namesArray));
        }
    }

    Con

    String[] namesArray = new String[numberOfEmps];
    for(int i = 0; i < numberOfEmps; i++)
    {
        namesArray[i] = scan.next();
    }
    System.out.println(Arrays.toString(namesArray));

    Y ver si funciona.

  5. 0

    Nunca asignar el nombre a la matriz y en cada iteración se define la matriz de nuevo:

     String[] namesArray = new String[numberOfEmps];
     for(int i = 1; i <= numberOfEmps; i++)
        {
            String nameCycler = scan.next();
            namesArray [i] = nameCycler ;
            if(counter == i)
            {
                System.out.println(Arrays.toString(namesArray));
            }
        }
    • Lo siento, por error editado tu respuesta.
  6. 0

    Añadido comentarios en el código para señalar los cambios.

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
    
        System.out.print("How many employees for the week?: ");
        int numberOfEmps = scan.nextInt();
    
        //removed 'nOEarray' and 'counter'
    
        if (numberOfEmps > 0) {
            System.out.println("\nEnter names of workers up to the entered amount (" + numberOfEmps + "):");
    
            //initializing 'namesArray' outside for loop.
            String[] namesArray = new String[numberOfEmps];
            for(int i = 0; i < numberOfEmps; i++) { //initialized with 0 and updated condition with '<'
                namesArray[i] = scan.next(); //assigning value to 'i'th position of namesArray
            }
            System.out.println(Arrays.toString(namesArray)); //Printing array outside for loop
        }
    }
    • Garantizado IndexOutOfBoundsException.
    • Volvió a viejo código.
  7. -1

    «De cómo corregir este error» no. Esto no es un error.

     String[] namesArray = new String[i]; //step one, you declare an array of Strings
      //which you don't initialize
    
            if(counter == i)
            {
                System.out.println(Arrays.toString(namesArray));
    //you print all the (non-initialized) elements of namesArray
    //since you didn't initialize the elements, it takes the default value, which is null
            }

    llenar los elementos de la matriz de Cadenas antes de intentar imprimir.

Kommentieren Sie den Artikel

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

Pruebas en línea