Консольный ввод чисел через 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
То они на экран выводятся в разных стоках. А надо, чтобы выводились на одной строке, через пробел (или также можно через запятую). Хотелось бы спросить у специалистов, можно ли как-то это сделать? Спасибо.
Ввести через консоль несколько переменных через пробел в одной строке
Всем привет. Я только учусь программировать, так что вопрос должен быть довольно несложным.
Мне нужно ввести через консоль несколько переменных через пробел в одной строке. Затем требуется сравнить их с ранее введенной переменной, посчитать сколько раз условие сравнения выполняются и вывести количество удачных исходов.
С вводом переменных я вроде как разобрался, а вот как переменные из массива сравнить с другой переменной не знаю. Для ввода переменных через консоль я использовал что-то вроде этого:
int []sl = new int[1000]; for (int i = 0; i sl.length; i++) { sl[i] = input.nextInt(); }
После каждого слова вставьте слово «Бум!» и выведите список на консоль в одну строку через пробел
Получается все, кроме последнего условия. хэлп%-) Задачка: Считывать с консоли слова, вводимые.
Как записывать числа через пробел, через scanner
Здравствуйте, подскажите пожалуйста как записывать числа через пробел, через scanner.
Как ввести несколько переменных через пробел (std::cin)?
Как ввести несколько переменных через пробел?
Как считать с консоли сразу несколько чисел через пробел в одной строке?
Есть два вопроса. 1)Как например считать число с консоли. Я пишу int a = Console.Read();.
Сообщение было отмечено BearStrikesBack как решение
Решение
и как результат? у тебя же по условию несколько переменных в одной строке через пробел, то есть типа 12 22 32 11 56. Тут надо читать Стринг строку и раскидывать ее на инт переменные, а потом уже сравнивать:
BufferedReader br=new BufferedReader (new InputStreamReader(System.in)); String vvod=br.readLine(); String[] tok=vvod.split(" "); for (int i=0; itok.length;i++) { // цикл перебора всех введенных переменных int x=Integer.parseInt(tok[i]); // тут сравниваем х с нужной переменной и делаем что нам нужно }
Спасибо. Понятно. Есть еще два небольших вопроса.
1) Можно ли как-то автоматически посчитать количество переменных, которые были введены? То есть при вводе 12 22 32 11 56, какой-то другой переменной будет присвоено значение 6 и т.д.
2) У меня есть какая-то введенная переменная. Мне нужно проверить условие «больше или равно 2Х». С наименьшего введенного в массив значения (могут идти как угодно, не ранжированы) начинается проверка условия, до удовлетворения условия или окончания массива. При удовлетворении условия, дальше переменные массива сравниваются с переменной, которая удовлетворила условию.
Пример. Предположим у меня есть переменая Х = 6. Массив переменных из: 12 22 32 11 56. Сначала берется значение 11, которое не удовлетворяет условию. Затем 12 — удовлетворяет. Теперь идет сравнение не с 6, а с 12, то есть первой наименьшей переменной из массива, которая удовлетворяет условию с Х. 22 — нет. 32 — да. 56 — нет. В итоге выводится количество исходов, когда есть успех. В данном случае — 2.
0) Ок, я дошел до следующего шага. Я выяснил примерно, как посчитать количество успехов.
Arrays.sort(x); int matches = 0; for(int i = 0; i x.length; i++) { if(x[i] >= 2*y) { matches++; y = x[i]; } System.out.println(matches);
В итоге выводится массив строк с количество успехов для каждого(i-го) теста:
0
1
1
2
2
Мне же нужно вывести только максимальное значение. Как это сделать? Есть две проблемы:
1) С помощью данного кода, данные, которые вводит пользователь через пробел, преобразуются в массив строк (Strings[]).
BufferedReader br=new BufferedReader (new InputStreamReader(System.in)); String vvod=br.readLine(); String[] tok=vvod.split(" "); for (int i=0; itok.length;i++) { // цикл перебора всех введенных переменных int x = Integer.parseInt(tok[i]); // тут сравниваем х с нужной переменной и делаем что нам нужно }
Попытки использовать это в шаге 0 проваливаются, т.к. я не могу сравнить/использовать переменные типа int, String, String[] одновременно. Может кто-то с этим помочь? Нужен переход от шага 1 к шагу 0. То есть вместо X (в шаге 0) должны использоваться переменные из введенной пользователем строки, которые разделены пробелом. Я пробовал операторы Integer.parseInt для строк/приведения переменных к одному виду, но почему-то не получается.
2) Как в шаге 0, вывести только максимальное значение. Я нашел отдельные способы для строки int переменных, и отдельно для String, но т.к. у меня массив строк, то Eclipse почему-то ругается.
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", где разделителем является точка. В данном случае все зависит от текущей языковой локализации системы. В моем случае русскоязычная локализация, соответственно вводить необходимо числа, где разделителем является запятая. То же самое касается многих других локализаций, например, немецкой, французской и т.д., где применяется запятая.
Java ввод значений через пробел
Хочу ввести три числа через пробел и присвоить их трем разным переменным. Подскажите как это сделать или где посмотреть пример.
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
C++ Написал программу по считыванию трех чисел и определению образуют ли они геометрическую прогрессию. Все работает, кроме чисел 0.1 0.01 и 0.001. | donald knut | Помощь студентам | 3 | 06.12.2019 13:33 |
Написать перегружены функции для поиска среднего геометрического двух, трех действительных чисел и в одномерном массиве действительных чисел | jul1a_B | Помощь студентам | 0 | 01.04.2018 16:44 |
Если сумма трех попарно различных действительных чисел х, у, z меньше единицы, то наименьшее из этих трех чисел заменить полусуммой двух других [Delphi] Поиск ошибок в программе | student_23 | Помощь студентам | 1 | 26.01.2017 17:47 |
Составьте программу,заменяющую меньшее из трех данных чисел произведением этих чисел | Делька | Помощь студентам | 1 | 24.09.2015 17:21 |
Как организовать ввод чисел в строку через пробел | hoop | Помощь студентам | 0 | 16.10.2011 15:44 |