Java fusionando dos conjuntos de matrices desde la entrada de un usuario: ¿cómo trato con nulls?

StackOverflow https://stackoverflow.com/questions/4801658

  •  22-10-2019
  •  | 
  •  

Pregunta

Estoy escribiendo un programa para la asignación de clase CS.

Básicamente es un método que lleva a los argumentos de línea de comando. Algo así como un CSV, por lo que para llamar la llamada, me fusiono, seguido de los CSV.

por ejemplo, fusionar 1,2,3,4 5,6,7,8

Esto hará dos cosas. 1) Toma cada lista como argumento de matriz y luego se fusiona en 1 matriz grande, 2) clasifica esa matriz.

Aquí está la captura, desde la línea de comando necesitamos lidiar con valores nulos. Para que un usuario pueda alimentar:

fusionar 1,2, 3,4 5,6

¿Cómo trato con esto?

Ejemplo de la salida de error:

Enter commands:
merge 12,,2 43
java.lang.NumberFormatException: For input string: ""
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:493)
    at java.lang.Integer.parseInt(Integer.java:514)
    at CmdInterpreter.strArrayToIntArray(CmdInterpreter.java:143)
    at CmdInterpreter.getIntArray(CmdInterpreter.java:130)
    at Assign1.processOneCommand(Assign1.java:99)
    at CmdInterpreter.processCommands(CmdInterpreter.java:198)
    at CmdInterpreter.processCommands(CmdInterpreter.java:230)
    at CmdInterpreter.ooMain(CmdInterpreter.java:243)
    at MyAssign1.main(MyAssign1.java:20)
¿Fue útil?

Solución 3

Descubrí que puede alimentar en List1 como NULL o LIST2 o ambos. Pero no elementos de esas matrices ... lo que significa que estaba intentando algo que no sería un problema para esta tarea.

Otros consejos

Cuando llame a Parseint, envuelva la llamada en un bloque de try/captación. Si atrapa una NumberFormateException, tire la cadena y disminuya el número de valores.

Editar: ¿Cómo haces eso? Algo como esto:

int[] extractValues(String arg) {
    String[] sValues = arg.split(",");
    int n = values.length;
    int[] values = new int[n];
    for (int i = 0; i < n; ++i) {
        try {
            values[i] = Integer.parseInt(sValues[i]);
        } catch (NumberFormatException e) {
            --n;
        }
    }
    // reallocate values array if there were problems
    if (n < values.length) {
        int[] tmp = new int[n];
        System.arraycopy(values, 0, tmp, 0, n);
        values = tmp;
    }
    return values;
}

Debe manejar el evento de que no haya entero allí. Parece que simplemente está en la entrada a través de la entrada sin verificar su integridad, por lo que está obteniendo una excepción.

La forma correcta de hacer esto sería establecer un mecanismo de verificación que garantice que los datos actuales que analices sean válidos (en este caso, lo que significa que es un entero).

Dejo mi respuesta muy vaga porque usted declaró explícitamente que esto es para una tarea escolar, por lo que debe tomar esta respuesta y usarla para experimentar y aprender a implementar una solución adecuada.

StringUtils.split Debería darle unas diez formas de hacer esto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top