División de cadena y ponerlo en matriz int

Tengo que ingresar una cadena con números ex: 1,2,3,4,5. Esa es una muestra de la entrada, luego tengo que poner eso en una matriz de INT para poder ordenarlo pero no funciona de la manera que debería funcionar.

package array; import java.util.Scanner; public class Array { public static void main(String[] args) { String input; int length, count, size; Scanner keyboard = new Scanner(System.in); input = keyboard.next(); length = input.length(); size = length / 2; int intarray[] = new int[size]; String strarray[] = new String[size]; strarray = input.split(","); for (count = 0; count < intarray.length ; count++) { intarray[count] = Integer.parseInt(strarray[count]); } for (int s : intarray) { System.out.println(s); } } } 

Para la entrada 1,2,3,4,5 la entrada es de longitud 9. 9/2 = 4 en matemáticas enteras, por lo que solo está almacenando las primeras cuatro variables, no todas 5.

Incluso si arreglaras eso, rompería horriblemente si pasaras en una entrada de 10,11,12,13

Funcionaría (por casualidad) si 1,2,3,4,50 para una entrada, curiosamente 🙂

Estarías mucho mejor haciendo algo como esto

 String[] strArray = input.split(","); int[] intArray = new int[strArray.length]; for(int i = 0; i < strArray.length; i++) { intArray[i] = Integer.parseInt(strArray[i]); } 

Para referencia futura, cuando reciba un error, le recomiendo que lo publique con el código. ¡Es posible que no tenga a alguien con un jdk disponible para comstackr el código para depurarlo! 🙂

Java 8 ofrece una alternativa basada en flujos a la iteración manual:

 int[] intArray = Arrays.stream(input.split(",")) .mapToInt(Integer::parseInt) .toArray(); 

Prepárese para capturar NumberFormatException si es posible que la entrada contenga secuencias de caracteres que no se pueden convertir a un entero.

Consideremos que tiene entrada como “1,2,3,4”.

Eso significa que la longitud de la entrada es 7. Entonces, ahora escribe el tamaño = 7/2 = 3.5. Pero como el tamaño es un int , se redondeará a 3. En resumen, está perdiendo 1 valor.

Si reescribe el código como a continuación, debería funcionar:

 String input; int length, count, size; Scanner keyboard = new Scanner(System.in); input = keyboard.next(); length = input.length(); String strarray[] = input.split(","); int intarray[] = new int[strarray.length]; for (count = 0; count < intarray.length ; count++) { intarray[count] = Integer.parseInt(strarray[count]); } for (int s : intarray) { System.out.println(s); } 

Usted está haciendo una división entera, por lo que perderá la longitud correcta si el usuario ingresa un número impar de entradas; ese es un problema que noté. Debido a esto, cuando ejecuto el código con una entrada de ‘1,2,3,4,5,6,7’ mi último valor se ignora …

 String input = "2,1,3,4,5,10,100"; String[] strings = input.split(","); int[] numbers = new int[strings.length]; for (int i = 0; i < numbers.length; i++) { numbers[i] = Integer.parseInt(strings[i]); } Arrays.sort(numbers); System.out.println(Arrays.toString(numbers)); 

Cambia el orden en el que estás haciendo las cosas un poco. Pareces dividir por 2 sin ninguna razón en particular.

Si bien su aplicación no garantiza una cadena de entrada de variables delimitadas por dos puntos, puede hacerlo fácilmente:

 package com; import java.util.Scanner; public class Test { public static void main(String[] args) { // Good practice to initialize before use Scanner keyboard = new Scanner(System.in); String input = ""; // it's also a good idea to prompt the user as to what is going on keyboardScanner : for (;;) { input = keyboard.next(); if (input.indexOf(",") >= 0) { // Realistically we would want to use a regex to ensure [0-9],...etc groupings break keyboardScanner; // break out of the loop } else { keyboard = new Scanner(System.in); continue keyboardScanner; // recreate the scanner in the event we have to start over, just some cleanup } } String strarray[] = input.split(","); // move this up here int intarray[] = new int[strarray.length]; int count = 0; // Declare variables when they are needed not at the top of methods as there is no reason to allocate memory before it is ready to be used for (count = 0; count < intarray.length; count++) { intarray[count] = Integer.parseInt(strarray[count]); } for (int s : intarray) { System.out.println(s); } } } 

Algo como esto:

  public static void main(String[] args) { String N = "ABCD"; char[] array = N.toCharArray(); // and as you can see: System.out.println(array[0]); System.out.println(array[1]); System.out.println(array[2]); }