Java – Cómo leer enteros separados por un espacio en una matriz

Estoy teniendo problemas con mi proyecto porque no puedo obtener el comienzo correcto, que es leer una línea de enteros separados por un espacio del usuario y colocar los valores en una matriz.

System.out.println("Enter the elements separated by spaces: "); String input = sc.next(); StringTokenizer strToken = new StringTokenizer(input); int count = strToken.countTokens(); //Reads in the numbers to the array System.out.println("Count: " + count); int[] arr = new int[count]; for(int x = 0;x < count;x++){ arr[x] = Integer.parseInt((String)strToken.nextElement()); } 

Esto es lo que tengo, y solo parece leer el primer elemento de la matriz porque cuando se inicializa el conteo, se establece en 1 por alguna razón.

¿Alguien puede ayudarme? ¿Sería mejor hacerlo de otra manera?

Solo se necesita un pequeño cambio para que su código funcione. El error está en esta línea:

 String input = sc.next(); 

Como se señaló en mi comentario en la pregunta, solo lee el siguiente token de entrada. Consulte la documentación .

Si lo reemplazas con

 String input = sc.nextLine(); 

hará lo que usted quiere que haga, porque nextLine() consume toda la línea de entrada.

 String integers = "54 65 74"; List list = new ArrayList(); for (String s : integers.split("\\s")) { list.add(Integer.parseInt(s)); } list.toArray(); 

Hay formas alternativas para lograr lo mismo. pero cuando probé tu código, parece funcionar correctamente.

 StringTokenizer strToken = new StringTokenizer("abc"); int count = strToken.countTokens(); System.out.println(count); 

Las impresiones cuentan como 3. el demilitro predeterminado es “”

No sé cómo está obteniendo su campo de entrada. Puede que no esté devolviendo la entrada completa en formato de cadena.

Creo que estás usando java.util.Scanner para leer tu entrada

Java Document desde el escáner.

Un escáner divide su entrada en tokens usando un patrón delimitador, que por defecto coincide con el espacio en blanco. Los tokens resultantes pueden luego convertirse en valores de diferentes tipos usando los siguientes métodos.

Por lo tanto, la entrada devuelve solo un entero y deja el rest sin supervisión.

Lee esto. Scanner # next () , debe usar Scanner # nextLine () en su lugar

Esta sería una manera más fácil de hacer lo mismo.

 System.out.println("Enter the elements seperated by spaces: "); String input = sc.nextLine(); String[] split = input.split("\\s+"); int[] desiredOP = new int[split.length]; int i=0; for (String string : split) { desiredOP[i++] = Integer.parseInt(string); } 
 import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); . . . StringTokenizer st = new StringTokenizer(br.readLine()); int K = Integer.parseInt(st.nextToken()); int N= Integer.parseInt(st.nextToken());