usar codigo java input java.util.scanner

codigo - Java leyendo múltiples entradas desde una sola línea



textarea java netbeans (14)

Estoy trabajando en un programa y quiero permitir que un usuario ingrese múltiples enteros cuando se le solicite. Intenté usar un escáner, pero descubrí que solo almacena el primer entero introducido por el usuario. Por ejemplo:

Introduzca múltiples enteros: 1 3 5

El escáner solo obtendrá el primer entero 1. ¿Es posible obtener los 3 enteros diferentes de una línea y poder usarlos más adelante? Estos enteros son las posiciones de los datos en una lista vinculada que necesito manipular en función de la entrada de los usuarios. No puedo publicar mi código fuente, pero quería saber si esto es posible.


Aquí es cómo usaría el escáner para procesar tantos enteros como el usuario quisiera ingresar y poner todos los valores en una matriz. Sin embargo, solo debe usar esto si no sabe cuántos enteros ingresará el usuario. Si lo sabe, simplemente debe usar Scanner.nextInt() el número de veces que le gustaría obtener un número entero.

import java.util.Scanner; // imports class so we can use Scanner object public class Test { public static void main( String[] args ) { Scanner keyboard = new Scanner( System.in ); System.out.print("Enter numbers: "); // This inputs the numbers and stores as one whole string value // (e.g. if user entered 1 2 3, input = "1 2 3"). String input = keyboard.nextLine(); // This splits up the string every at every space and stores these // values in an array called numbersStr. (e.g. if the input variable is // "1 2 3", numbersStr would be {"1", "2", "3"} ) String[] numbersStr = input.split(" "); // This makes an int[] array the same length as our string array // called numbers. This is how we will store each number as an integer // instead of a string when we have the values. int[] numbers = new int[ numbersStr.length ]; // Starts a for loop which iterates through the whole array of the // numbers as strings. for ( int i = 0; i < numbersStr.length; i++ ) { // Turns every value in the numbersStr array into an integer // and puts it into the numbers array. numbers[i] = Integer.parseInt( numbersStr[i] ); // OPTIONAL: Prints out each value in the numbers array. System.out.print( numbers[i] + ", " ); } System.out.println(); } }


Creé este código especialmente para el examen Hacker Earth.

{ Scanner values = new Scanner(System.in); //initialize scanner int[] arr = new int[6]; //initialize array for (int i = 0; i < arr.length; i++) { arr[i] = (values.hasNext() == true ? values.nextInt():null); // it will read the next input value /* user enter = 1 2 3 4 5 arr[1]= 1 arr[2]= 2 and soo on */ ''}


Cuando queremos tomar Integer como entradas.
Por solo 3 entradas como en tu caso:

import java.util.Scanner; Scanner scan = new Scanner(System.in); int a,b,c; a = scan.nextInt(); b = scan.nextInt(); c = scan.nextInt();

Para más cantidad de entradas podemos usar un bucle:

import java.util.Scanner; Scanner scan = new Scanner(System.in); int a[] = new int[n]; //where n is the number of inputs for(int i=0;i<n;i++){ a[i] = scan.nextInt(); }


Desea tomar los números como una cadena y luego usar String.split(" ") para obtener los 3 números.

String input = scanner.nextLine(); // get the entire line after the prompt String[] numbers = input.split(" "); // split by spaces

Cada índice de la matriz contendrá una representación en cadena de los números que se pueden hacer para ser int s por Integer.parseInt()


El escáner tiene un método llamado hasNext ():

Scanner scanner = new Scanner(System.in); while(scanner.hasNext()) { System.out.println(scanner.nextInt()); }


Es mejor obtener la línea completa como una cadena y luego usar StringTokenizer para obtener los números (usando el espacio como delimitador) y luego analizarlos como enteros. Esto funcionará para n número de enteros en una línea.

Scanner sc = new Scanner(System.in); List<Integer> l = new LinkedList<>(); // use linkedlist to save order of insertion StringTokenizer st = new StringTokenizer(sc.nextLine(), " "); // whitespace is the delimiter to create tokens while(st.hasMoreTokens()) // iterate until no more tokens { l.add(Integer.parseInt(st.nextToken())); // parse each token to integer and add to linkedlist }


Esto funciona bien ...

int a = nextInt(); int b = nextInt(); int c = nextInt();

O puedes leerlos en un bucle


Lo uso todo el tiempo en hackerearth

BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String lines = br.readLine(); String[] strs = lines.trim().split("//s+"); for (int i = 0; i < strs.length; i++) { a[i] = Integer.parseInt(strs[i]); }


Probablemente estés buscando String.split (Regex de cadenas). Use "" para su expresión regular. Esto le dará una serie de cadenas que puede analizar individualmente en ints.


Prueba esto

public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNext()) { if (in.hasNextInt()) System.out.println(in.nextInt()); else in.next(); } }

De forma predeterminada, el Escáner usa el patrón delimitador "/ p {javaWhitespace} +" que coincide al menos con un espacio en blanco como delimitador. No tienes que hacer nada especial.

Si desea hacer coincidir un espacio en blanco (1 o más) o una coma, reemplace la invocación del escáner con este

Scanner in = new Scanner(System.in).useDelimiter("[,//s+]");


Sé que es viejo discutir :) He probado debajo del código que ha funcionado

`String day = ""; day = sc.next(); days[i] = Integer.parseInt(day);`


Si sabe cuántos enteros obtendrá, entonces puede usar el método nextInt()

Por ejemplo

Scanner sc = new Scanner(System.in); int[] integers = new int[3]; for(int i = 0; i < 3; i++) { integers[i] = sc.nextInt(); }


Usando esto en muchos sitios de codificación:

  • CASO 1: CUANDO SE DA EL NÚMERO DE INTEGRADORES EN CADA LÍNEA

Supongamos que le dan 3 casos de prueba con cada línea de 4 entradas enteras separadas por espacios 1 2 3 4 , 5 6 7 8 , 1 1 2 2

int t=3,i; int a[]=new int[4]; Scanner scanner = new Scanner(System.in); while(t>0) { for(i=0; i<4; i++){ a[i]=scanner.nextInt(); System.out.println(a[i]); } //USE THIS ARRAY A[] OF 4 Separated Integers Values for solving your problem t--; }

  • CASO 2: CUANDO NO SE DA EL NÚMERO DE INTEGRADORES en cada línea

    Scanner scanner = new Scanner(System.in); String lines=scanner.nextLine(); String[] strs = lines.trim().split("//s+");

    Tenga en cuenta que necesita recortar () primero: trim().split("//s+") - de lo contrario, por ejemplo, dividir abc emitirá primero dos cadenas vacías

    int n=strs.length; //Calculating length gives number of integers int a[]=new int[n]; for (int i=0; i<n; i++) { a[i] = Integer.parseInt(strs[i]); //Converting String_Integer to Integer System.out.println(a[i]); }


Utilizando BufferedReader -

StringTokenizer st = new StringTokenizer(buf.readLine()); while(st.hasMoreTokens()) { arr[i++] = Integer.parseInt(st.nextToken()); }