Java, читающая несколько ints из одной строки
Я работаю над программой, и я хочу разрешить пользователю вводить несколько целых чисел при появлении запроса. Я попытался использовать сканер, но обнаружил, что он сохраняет только первое целое число, введенное пользователем. Например:
Введите несколько целых чисел: 1 3 5
Сканер получит только первое целое число 1. Можно ли получить все 3 разных целых числа из одной строки и использовать их позже? Эти целые числа - это позиции данных в связанном списке, которые мне нужно манипулировать на основе ввода пользователей. Я не могу опубликовать свой исходный код, но я хотел знать, возможно ли это.
Ответы
Ответ 1
Я использую его все время на хакере
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]);
}
Ответ 2
Вы хотите взять числа в виде строки, а затем используйте String.split(" ")
, чтобы получить 3 числа.
String input = scanner.nextLine(); // get the entire line after the prompt
String[] numbers = input.split(" "); // split by spaces
Каждый индекс массива будет содержать строковое представление чисел, которое можно сделать int
на Integer.parseInt()
Ответ 3
Попробуйте это
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 {javaWhitespace} +", который соответствует как минимум одному пробелу в качестве разделителя. вам не нужно ничего особенного делать.
Если вы хотите сопоставить либо пробелы (1 или более), либо запятую, замените вызов Scanner на это
Scanner in = new Scanner(System.in).useDelimiter("[,\\s+]");
Ответ 4
У сканера есть метод, называемый hasNext():
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext())
{
System.out.println(scanner.nextInt());
}
Ответ 5
Если вы знаете, сколько целых чисел вы получите, то вы можете использовать метод nextInt()
Например
Scanner sc = new Scanner(System.in);
int[] integers = new int[3];
for(int i = 0; i < 3; i++)
{
integers[i] = sc.nextInt();
}
Ответ 6
Вот как вы могли бы использовать сканер для обработки целого числа целых чисел, которые пользователь хотел бы ввести и поместить все значения в массив. Однако вы должны использовать это, только если не знаете, сколько целых чисел вводит пользователь. Если вы знаете, вы должны просто использовать 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 {"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();
}
}
Ответ 7
Java 8
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int arr[] = Arrays.stream(in.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
Ответ 8
Это прекрасно работает....
int a = nextInt();
int b = nextInt();
int c = nextInt();
Или вы можете прочитать их в цикле
Ответ 9
создал этот код специально для экзамена 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
*/
Ответ 10
Вероятно, вы ищете String.split(String regex). Используйте "" для вашего регулярного выражения. Это даст вам массив строк, которые можно разобрать индивидуально в ints.
Ответ 11
Лучше получить всю строку в виде строки, а затем использовать StringTokenizer для получения чисел (используя пробел как разделитель), а затем проанализировать их как целые числа. Это будет работать для n числа целых чисел в строке.
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
}
Ответ 12
Используя это на многих сайтах кодирования:
- CASE 1: КОГДА ЧИСЛО ИНТЕГРЕЙ В КАЖДОЙ ЛИНИИ ДАЛЕЕ
Предположим, вам дано 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<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--;
}
-
CASE 2: КОГДА ЧИСЛО ИНТЕГРЕЙ в каждой строке НЕ ДАЕТ
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<n; i++)
{
a[i] = Integer.parseInt(strs[i]); //Converting String_Integer to Integer
System.out.println(a[i]);
}
Ответ 13
Использование BufferedReader -
StringTokenizer st = new StringTokenizer(buf.readLine());
while(st.hasMoreTokens())
{
arr[i++] = Integer.parseInt(st.nextToken());
}
Ответ 14
я знаю это старый обсуждать :) Я тестировал ниже код, который работал
'String day = "";
day = sc.next();
days[i] = Integer.parseInt(day);'
Ответ 15
Когда мы хотим взять Integer в качестве входных данных
Всего 3 входа, как в вашем случае:
import java.util.Scanner;
Scanner scan = new Scanner(System.in);
int a,b,c;
a = scan.nextInt();
b = scan.nextInt();
c = scan.nextInt();
Для большего количества входов мы можем использовать цикл:
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();
}
Ответ 16
Есть несколько способов сделать это, но простой - это использовать String.split(" ")
это метод класса String, который разделяет слова с помощью пространственного символа (ов) типа "" (пробел)
Все, что нам нужно сделать, это сохранить это слово в массив строк.
Предупреждение: вы должны использовать scan.nextLine();
другие способы не будут работать (не используйте scan.next();
String user_input = scan.nextLine();
String[] stringsArray = user_input.split(" ");
Теперь нам нужно преобразовать эти строки в целые числа. создайте цикл for и преобразуйте каждый индекс stringArray:
for (int i = 0; i < stringsArray.length; i++) {
int x = Integer.parseInt(stringsArray[i]);
// Do what you want to do with these int value here
}
Лучший способ - преобразовать весь stringArray в intArray:
int[] intArray = new int[stringsArray.length];
for (int i = 0; i < stringsArray.length; i++) {
intArray[i] = Integer.parseInt(stringsArray[i]);
}
теперь делайте любые пробы, которые вы хотите, например, print или sum или... на intArray
Весь код будет таким:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String user_input = scan.nextLine();
String[] stringsArray = user_input.split(" ");
int[] intArray = new int[stringsArray.length];
for (int i = 0; i < stringsArray.length; i++) {
intArray[i] = Integer.parseInt(stringsArray[i]);
}
}
}
Ответ 17
Использовать потоки Java 8:
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
try{
int num_of_arrays=Integer.parseInt(br.readLine());
while(num_of_arrays>0){
int[] num = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
num_of_arrays--;
}
}
для ввода:
1
1 2 3
где num_of_arrays = 1 и элементы массива находятся на следующей строке.
Ответ 18
Это работает с этим кодом:
Scanner input = new Scanner(System.in);
System.out.println("Enter Name : ");
String name = input.next().toString();
System.out.println("Enter Phone # : ");
String phone = input.next().toString();