- Возможно ли ввести несколько чисел через Scanner в одну строку? (java)
- Ввод чисел с одной строки java
- Вывод на консоль
- Ввод с консоли
- 🎅MnogoBlog
- ⛄как создать сайт на wordpress, настроить и оптимизировать wordpress
- Java Урок 4: Ввод чисел с клавиатуры, System.in
- читать несколько переменных со сканером в одной строке
- 4 ответа
Возможно ли ввести несколько чисел через 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
Наиболее простой способ взаимодействия с пользователем представляет консоль: мы можем выводить на консоль некоторую информацию или, наоборот, считывать с консоли некоторые данные. Для взаимодействия с консолью в Java применяется класс System , а его функциональность собственно обеспечивает консольный ввод и вывод.
Вывод на консоль
Для создания потока вывода в класс System определен объект out . В этом объекте определен метод println , который позволяет вывести на консоль некоторое значение с последующим переводом курсора консоли на следующую строку. Например:
В метод println передается любое значение, как правило, строка, которое надо вывести на консоль. И в данном случае мы получим следующий вывод:
При необходимости можно и не переводить курсор на следующую строку. В этом случае можно использовать метод System.out.print() , который аналогичен println за тем исключением, что не осуществляет перевода на следующую строку.
Консольный вывод данной программы:
Но с помощью метода System.out.print также можно осуществить перевод каретки на следующую строку. Для этого надо использовать escape-последовательность \n:
System.out.print("Hello world \n");
Нередко необходимо подставлять в строку какие-нибудь данные. Например, у нас есть два числа, и мы хотим вывести их значения на экран. В этом случае мы можем, например, написать так:
public class Program < public static void main(String[] args) < int x=5; int y=6; System.out.println("x=" + x + "; y console">x=5; y=6Но в Java есть также функция для форматированного вывода, унаследованная от языка С: System.out.printf() . С ее помощью мы можем переписать предыдущий пример следующим образом:
int x=5; int y=6; System.out.printf("x=%d; y=%d \n", x, y);В данном случае символы %d обозначают спецификатор, вместо которого подставляет один из аргументов. Спецификаторов и соответствующих им аргументов может быть множество. В данном случае у нас только два аргумента, поэтому вместо первого %d подставляет значение переменной x, а вместо второго - значение переменной y. Сама буква d означает, что данный спецификатор будет использоваться для вывода целочисленных значений.
Кроме спецификатора %d мы можем использовать еще ряд спецификаторов для других типов данных:
- %x : для вывода шестнадцатеричных чисел
- %f : для вывода чисел с плавающей точкой
- %e : для вывода чисел в экспоненциальной форме, например, 1.3e+01
- %c : для вывода одиночного символа
- %s : для вывода строковых значений
При выводе чисел с плавающей точкой мы можем указать количество знаков после запятой, для этого используем спецификатор на %.2f , где .2 указывает, что после запятой будет два знака. В итоге мы получим следующий вывод:
Name: Tom Age: 30 Height: 1,70
Ввод с консоли
Для получения ввода с консоли в классе System определен объект in . Однако непосредственно через объект System.in не очень удобно работать, поэтому, как правило, используют класс Scanner , который, в свою очередь использует System.in . Например, напишем маленькую программу, которая осуществляет ввод чисел:
import java.util.Scanner; public class Program < public static void main(String[] args) < Scanner in = new Scanner(System.in); System.out.print("Input a number: "); int num = in.nextInt(); System.out.printf("Your number: %d \n", num); in.close(); >>
Так как класс Scanner находится в пакете java.util , то мы вначале его импортируем с помощью инструкции import java.util.Scanner .
Для создания самого объекта Scanner в его конструктор передается объект System.in . После этого мы можем получать вводимые значения. Например, в данном случае вначале выводим приглашение к вводу и затем получаем вводимое число в переменную num.
Чтобы получить введенное число, используется метод in.nextInt(); , который возвращает введенное с клавиатуры целочисленное значение.
Input a number: 5 Your number: 5
Класс Scanner имеет еще ряд методов, которые позволяют получить введенные пользователем значения:
- next() : считывает введенную строку до первого пробела
- nextLine() : считывает всю введенную строку
- nextInt() : считывает введенное число int
- nextDouble() : считывает введенное число double
- nextBoolean() : считывает значение boolean
- nextByte() : считывает введенное число byte
- nextFloat() : считывает введенное число float
- nextShort() : считывает введенное число short
То есть для ввода значений каждого примитивного типа в классе Scanner определен свой метод.
Например, создадим программу для ввода информации о человеке:
import java.util.Scanner; public class Program < public static void main(String[] args) < Scanner in = new Scanner(System.in); System.out.print("Input name: "); String name = in.nextLine(); System.out.print("Input age: "); int age = in.nextInt(); System.out.print("Input height: "); float height = in.nextFloat(); System.out.printf("Name: %s Age: %d Height: %.2f \n", name, age, height); in.close(); >>
Здесь последовательно вводятся данные типов String, int, float и потом все введенные данные вместе выводятся на консоль. Пример работы программы:
Input name: Tom Input age: 34 Input height: 1,7 Name: Tom Age: 34 Height: 1,70
Обратите внимание, что для ввода значения типа float (то же самое относится к типу double) применяется число "1,7", где разделителем является запятая, а не "1.7", где разделителем является точка. В данном случае все зависит от текущей языковой локализации системы. В моем случае русскоязычная локализация, соответственно вводить необходимо числа, где разделителем является запятая. То же самое касается многих других локализаций, например, немецкой, французской и т.д., где применяется запятая.
🎅MnogoBlog
⛄как создать сайт на wordpress, настроить и оптимизировать wordpress
Java Урок 4: Ввод чисел с клавиатуры, System.in
Для получения консольного ввода в классе System определен объект System.in. Однако, непосредственно через объект System.in не очень удобно работать, поэтому, как правило, используют класс Scanner, который, в свою очередь использует System.in (Так сложилось).
Скачать исходники для статьи можно ниже
Итак, для ввода информации с консоли надо сделать:
1. предварительно импортировать класс Scanner
2. создать объект класс Scanner. При создании объекта класса Scanner используется объект in класса System
Scanner sc = new Scanner(System.in);
Если здесь не все понятно не огорчайтесь, все станет намного яснее позже, пока просто запомните
Scanner sc = new Scanner(System.in);
3. Переменной а, типа int присваивается значение. Значение получают при помощи метода nextInt(), который прописан в классе Scanner
4. Необходимо закрыть объект sc
Таким образом, общий код программы выглядит так:
import java.util.Scanner; public class Test < // объявляется класс Test public static void main(String[] args)/> >
Чтобы получить введенное число, используется метод sc.nextInt(), который возвращает введенное с клавиатуры целочисленное значение.
В классе Scanner имеются еще ряд методов, которые позволяют получать не только целочисленные значения для int переменных. Есть методы, которые позволяют получать значения для других типов переменных. Некоторые из них представлены ниже:
sc.next(); считывает введенную строку до первого пробела;
sc.nextLine(); считывает всю введенную строку;
sc.nextDouble(); считывает введенное число дробного типа.
читать несколько переменных со сканером в одной строке
Я пытаюсь прочитать несколько переменных из консоли со сканером только в одной строке (разделенных пробелом).
int hight = Integer.parseInt(reader.nextLine()); int width = Integer.parseInt(reader.nextLine()); int depth = Integer.parseInt(reader.nextLine());
Тогда он отображает мои цифры (например, 1,2,3), как это:
Но я бы хотел, чтобы мои числа отображались так: 1 2 3
Кто-нибудь может мне помочь?
4 ответа
Один из способов сделать это - использовать nextInt вместо nextLine :
int hight = reader.nextInt(); int width = reader.nextInt(); int depth = reader.nextInt();
Ваш вклад может быть таким:
Обратите внимание, что вам нужно ввести все три числа перед нажатием ENTER , иначе ваш ввод снова будет выглядеть так:
Другой способ сделать это - использовать регулярное выражение, чтобы указать точный формат, в котором вы хотите, чтобы ваш ввод находился, вызвать nextLine и сопоставить строку, которую пользователь ввел с шаблоном регулярного выражения:
Matcher matcher = Pattern.compile("(\\d+)\\s+(\\d+)\\s+(\\d+)").matcher(reader.nextLine()); if (matcher.matches()) < int height = Integer.parseInt(matcher.group(1)); int width = Integer.parseInt(matcher.group(2)); int depth = Integer.parseInt(matcher.group(3)); >else < // input was invalid! >
Для ввода в одну строку в формате, разделенном пробелами. Вы можете сделать это, используя Scanner и BufferReader в Java. 1. Класс сканера
Scanner sc = new Scanner(System.in); int[] integers; String input = sc.nextLine(); String[] strs= input().split(" "); for(int i=0;i
BufferReader br = new BufferReader(new InputStreamReader(System.in)); int[] integers; String input = br.readLine(); String[] strs= input().trim().split("\\s+"); for(int i=0;i
Для ввода всех 3 значений в одну строку вы можете использовать. . readInt() три раза вместо использования .readNextLine() . Таким образом, вы можете поместить свой ввод следующим образом 1 2 3 , и после нажатия Enter на клавиатуре (которая по умолчанию используется для завершения ввода) вы получите то, что просили.
Если вы намеревались получить вывод в одну строку вместо многострочного, вам следует использовать другую версию метода печати на консоли:
System.out.print(height + " " + weight + " " + depth)
System.out.println() печатает символ следующей строки после аргумента, System.out.print() - нет.
Согласно вашему комментарию вы можете просто читать числа в виде целых чисел, таких как:
Scanner br =new Scanner(System.in); int a=br.nextInt(); int b=br.nextInt(); int c=br.nextInt();