Java ввод чисел в одну строку

Возможно ли ввести несколько чисел через Scanner в одну строку? (java)

System.out.print(«Enter numbers: «);
Scanner scan = new Scanner(System.in);
String x = scan.next();
то есть
при надписи » Enter numbers: » я ввожу 45, а хотелось бы 45 65 100 .
И что бы эти данные были занесены в массив [0]=45; [1]=65; [2]=10;
Пока на моём уровне java что бы это сделать приходится повторять алгоритм Scanner и каждый раз присваивать новую переменную. В итоге программа получается весьма большой, думаю как бы оптимизировать
вот полный код (2 недели в java и до сих пор разбирал базовую теорию, так что всё не качественно)

«программа распределяет введённые 3 числа на чётные числа и нечётные.»

import java.util.ArrayList;
import java.util.Scanner;
import java.lang.Integer;
import java.util.Arrays;
public class Main public static void main(String[] args)

System.out.print(«Enter number 1: «);
Scanner scan = new Scanner(System.in);
String x = scan.next();
int q = Integer.parseInt(x);
System.out.print(«Enter number 2: «);
Scanner scan1 = new Scanner(System.in);
String c = scan1.next();
int w = Integer.parseInt(c);
System.out.print(«Enter number 3: «);
Scanner scan2 = new Scanner(System.in);
String i = scan2.next();
int e = Integer.parseInt(i);
if ((q <0) && (w<0) && (e<0))
System.out.print(«Incorrect enter. «);
var numb = new ArrayList();
numb.add(q);
numb.add(w);
numb.add(e);
int iop = numb.get(0) % 2;
int iop1 = numb.get(1) % 2;
int iop2 = numb.get(2) % 2;
var vendigo = new ArrayList();
var vendigo123 = new ArrayList();
if(iop==0) vendigo.add(numb.get(0)); >
else vendigo123.add(numb.get(0));
>
if(iop1==0) vendigo.add(numb.get(1)); >
else vendigo123.add(numb.get(1));
>
if(iop2==0) vendigo.add(numb.get(2)); >
else vendigo123.add(numb.get(2));
>

System.out.println(«Четные: «+Arrays.toString(new ArrayList[]));
System.out.println(«Нечетные: «+Arrays.toString(new ArrayList[]));
>
>

Scanner пересоздавать не нужно. Обернул им поток System.in и дальше пользуешься
Integer.parseInt тоже не нужен. У сканера можно напрямую запросить nextInt()

Источник

Как вводить пользовательские входы на одной строке в java [duplicate]

Вероятно, вы ищете String.split (регулярное выражение String). Используйте «» для вашего регулярного выражения. Это даст вам массив строк, которые можно разобрать индивидуально в ints.

Нет смысла использовать регулярное выражение здесь, просто прочитайте некоторые ints непосредственно из потока с помощью Scanner. Кроме того, использование » » в качестве регулярного выражения — плохая идея, так как это вызовет проблемы с вкладками и несколькими пробелами. Почти всегда, когда разделение пробелами использует «\\ s +», а не « & Quot ;. – amit 7 May 2014 в 00:56

Вы хотите взять числа в качестве строки, а затем использовать String.split(» «) , чтобы получить 3 числа.

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

Каждый индекс массива будет содержать строковое представление чисел, которое можно сделать int s на Integer.parseInt()

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(); >> 

По умолчанию Сканер использует шаблон разделителя «\ p +», который соответствует как минимум одному пробелу в качестве разделителя. вам не нужно ничего особенного делать.

Читайте также:  Драйвер java на телефон

Если вы хотите совместить пробелы (1 или более) или запятую, замените вызов Scanner этим

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

Используя это на многих сайтах кодирования:

Предположим, вам дано 3 тестовых примера с каждой строкой из 4 целых входов, разделенных пробелами 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//USE THIS ARRAY A[] OF 4 Separated Integers Values for solving your problem t--; > 
 Scanner scanner = new Scanner(System.in); String lines=scanner.nextLine(); String[] strs = lines.trim().split("\\s+"); 

Обратите внимание, что сначала необходимо обрезать (): trim().split(«\\s+») — в противном случае, например, расщепление a b c сначала испустит две пустые строки

 int n=strs.length; //Calculating length gives number of integers int a[]=new int[n]; for (int i=0; i 

Вот как вы могли бы использовать сканер для обработки целых чисел, которые пользователь хотел бы ввести и поместить все значения в массив. Однако вы должны использовать это, только если не знаете, сколько целых чисел вводит пользователь. Если вы знаете, вы должны просто использовать Scanner.nextInt() количество раз, когда вы хотели бы получить целое число.

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 ) 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(); > > 

Лучше получить всю строку в виде строки, а затем использовать StringTokenizer для получения чисел (используя пробел как разделитель), а затем проанализировать их как целые числа. Это будет работать для n числа целых чисел в строке.

 Scanner sc = new Scanner(System.in); List 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 >

Источник

Читайте также:  Php sql server syntax

Java: как иметь два или более ввода в одной строке консоли

Я новичок в java, и я написал программу базового ввода / вывода, и в этой программе я хочу, чтобы пользователь предоставил 3 разных ввода и сохранил их в 3 разных переменных, это два int и один char.

public static void ForTesting()

В консоле Что я получаю: Введите два числа: 4 5 Первый номер: 4 Второй номер: 5 Что я хочу: Введите два числа: 4 5. Первый номер: 4 Второй номер: 5 (Полужирные числа — вводимые пользователем)

Если я правильно понимаю, код уже должен работать? Только не enter после ввода числа, а введите два числа, разделенных пробелом, а затем enter . Или вы хотите заставить пользователя вводить только одну строку? — person TiiJ7 &nbsp schedule 31.07.2019

Я думаю, это сработало, поэтому пользователю не нужно нажимать ввод, чтобы показать, что он ввел первый ввод? — person Mk Berou &nbsp schedule 31.07.2019

Ответы (3)

nextLine() , как следует из названия, читает одну строку. Если оба числа содержатся в этой единственной строке, вы должны прочитать оба целых числа из этой строки. Например:

Scanner scanner = new Scanner(System.in); String line = scanner.nextLine(); // reads the single input line from the console String[] strings = line.split(" "); // splits the string wherever a space character is encountered, returns the result as a String[] int first = Integer.parseInt(strings[0]); int second = Integer.parseInt(strings[1]); System.out.println("First number = " + first + ", second number = " + second + "."); 

Спасибо за уделенное время. Будет ли это также работать, если мне также нужен символ посередине, например, пользовательский ввод 2 + 2, и все три ввода в одной строке. Я попробую твой путь и вернусь к тебе. Благодарность — person Mk Berou; 31.07.2019

Если вы точно знаете, какие символы будут между двумя числами, вы передаете их в качестве аргумента в line.split() . Если вход 2 + 2, тогда функция должна быть line.split(» + «); . Пространства по обе стороны важны. — person cameron1024; 31.07.2019

@ cameron1024 Какую версию Java вы используете? Есть ли у класса Scanner метод readLine ()? — person psi; 31.07.2019

Нет, я не знаю, что это будет за символ, пользователю нужно ввести три вещи — ›сначала int, затем char, а затем второй int -› firstInt (3), затем char (+ или — или * или /) затем secondInt (4) — person Mk Berou; 31.07.2019

Читайте также:  Как расшифровать javascript код

Моя ошибка, это nextLine() не readLine() , плохо отредактирую свой ответ — person cameron1024; 31.07.2019

@MK Berou Я думаю, вы можете попробовать подход, предложенный cameron1024, но я подозреваю, что даже nextLine () не будет работать. — person psi; 31.07.2019

@MK Berou Я опубликовал свой ответ ниже . вы можете взглянуть на него как на альтернативное решение. — person psi; 31.07.2019

public static void ForTesting()

Источник

Консольный ввод чисел через Scanner в одну строку

Добрый день, я ученик, учусь 3-ю неделю. Буду очень благодарен, если кто-то подскажет:
Язык Java.
Вот код:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
import java.util.Scanner; public class Draft_230312_zazadanie13_3_1 { /* 13. Мини-игра в слова. Первый игрок вводит слово. Потом второй игрок вводит два числа, с какого по какой символ можно найти слово внутри исходного, используя substring. Потом первый игрок вводит два числа. Побеждает тот, чье слово длиннее. Пример: 1: революционный 2: 0 3 (вывод: рев) 1: 7 13 (вывод: ионный) Победил игрок 1 */ public static void main(String[] args) { System.out.print("Игрок 1, введите исходное слово: "); Scanner inWordScan = new Scanner(System.in); //new InputStreamReader String inWord = inWordScan.next(); System.out.println("Игрок 2, введите два порядковых номера символов: "); Scanner scan1 = new Scanner(System.in); Scanner scan2 = new Scanner(System.in); int num1 = scan1.nextInt() - 1; int num2 = scan2.nextInt(); String fragmentWord2 = inWord.substring(num1, num2); System.out.println(fragmentWord2); System.out.println("Игрок 1, введите два порядковых номера символов: "); Scanner scan3 = new Scanner(System.in); Scanner scan4 = new Scanner(System.in); int num3 = scan3.nextInt() - 1; int num4 = scan4.nextInt(); String fragmentWord1 = inWord.substring(num3, num4); System.out.println(fragmentWord1); int len2 = fragmentWord2.length(); int len1 = fragmentWord1.length(); if (len2 > len1) { System.out.println("Победил игрок 2."); } else { if (len1 > len2) { System.out.println("Победил игрок 1."); } else { if (len1 == len2) { System.out.println("Длины слов равны. Ничья."); } } } } }
Scanner scan1 = new Scanner(System.in); Scanner scan2 = new Scanner(System.in);

Например:
2
6
То они на экран выводятся в разных стоках. А надо, чтобы выводились на одной строке, через пробел (или также можно через запятую). Хотелось бы спросить у специалистов, можно ли как-то это сделать? Спасибо.

Источник

Оцените статью