Как ввести матрицу с клавиатуры java
При работе с приложениями или сайтами, пользователям необходимо вводить свои данные: почту, пароль, день рождения и так далее. В Java применяются несколько способов ввода данных с клавиатуры: c помощью метода readLine() класса BufferedReader или метода nextLine() класса Scanner. Разберем подробнее, как работают эти методы.
Метод readLine()
BufferedReader readLine() применяется для чтения одной строки текста, который пользователь ввел с консоли. Конец строки в коде может быть указан как Enter, так и \n , \r или EOF — end of file.
BufferedReader readLIne() работает только со строками в коде. А метод Scanner nextLine() считывает и другие типы данных, например, int, long, double, float.
BufferedReader работает немного быстрее по сравнению со Scanner, потому что nextLine() анализирует данные, а readLine() просто считывает последовательность символов.
Так работает readLine():
И на экран, соответственно, выводится:
Метод nextLine()
NextLine() в Java применяется для класса Scanner. Этот метод так же, как и readLine(), нужен для получения и чтения данных, написанных пользователем. Чтобы применить nextLine(), в коде нужно прописать объект Scanner.
Этот метод читает и воспроизводит данные до конца строки. Другими словами, он может считывать информацию до тех пор, пока не начнется новая строка или старая не будет разорвана с помощью \n или Enter.
Вот как nextLine() работает в Java:
Что пишет пользователь:
Что показывает программа:
Метод nextLine работает с данными только одной строки, поэтому остальное стихотворение теряется из-за разрыва между предложениями и перехода на новую строчку.
Чтобы показать стих полностью, нужно написать следующий код:
Классы-обертки в Java
Класс-обертка — это класс, объект которого содержит примитивные типы данных. Когда мы создаем объект для класса-обертки, он содержит поле, в котором мы можем хранить примитивные типы данных.
Как работают классы-обертки:
- Они преобразуют примитивные типы данных в объекты. Это необходимо, когда мы хотим изменить аргументы, передаваемые через метод (поскольку примитивные типы передаются только через value).
- В пакете java.util классы могут обрабатывать только объекты, и в этом случае помогут обертки.
- Чтобы работать в коллекциях ArrayList и Vector, потребуются объекты, а не примитивные типы.
- Классы-обертки необходимы для поддержки синхронизации в режиме многопоточности.
В коде процесс создания классов-оберток выглядят так:
А если нужно совершить обратный процесс и преобразовать класс-обертку в примитивный тип, то придется совершить unboxing или распаковку данных:
Highload нужны авторы технических текстов. Вы наш человек, если разбираетесь в разработке, знаете языки программирования и умеете просто писать о сложном!
Откликнуться на вакансию можно здесь .
Популярным примером использования такого рода массивов, являются матрицы, для представления которых, используются двумерные массивы. Итак, что же такое матрица и как ее представить с помощью двумерного массива в Java.
Матрицы и двумерные массивы в Java
Матрица это прямоугольная таблица, состоящая из строк и столбцов на пересечении которых находятся её элементы. Количество строк и столбцов матрицы задают ее размер.
Рассмотрим примеры конкретных матриц и создадим их с помощью Java.
Матрица A имеет размерность 2 на 3 (2 строки, 3 столбца). Создадим двухмерный массив этой размерности:
Мы объявили двумерный массив целых чисел (поскольку матрица в данном случае содержит целые числа) и зарезервировали для него память. Для этого мы использовали 2 индекса: первый индекс определяет строку и ее размер, второй индекс определяет столбец и его размер.
Далее будем инициализировать массив поэлементно. Запишем матрицу A в виде таблицы, чтобы было визуально понятно, какому индексу соответствует элемент.
Для доступа к элементам двумерного массива необходимо использовать 2 индекса: первый для строки, второй – для столбца. Как и в случае с одномерными массивами, индексы также начинаются с нуля. Поэтому нумерация строк и столбцов в таблице начинается с 0.
То есть, сначала выводим все элементы первой строки, отделяя их символом табуляции " \t", переносим строку и выводим все элементы второй строки.
Полностью код для матрицы А выглядит следующим образом:
Каждую строку массива необходимо заключить в пару фигурных скобок и отделить друг от друга запятой.
Полностью код для матрицы B:
Рассмотрим инициализацию в цикле для двумерного массива на примере таблицы умножения.
Здесь инициализация элементов значениями таблицы умножения совмещена с их выводом на консоль в одном цикле.
Многомерные и несимметричные массивы.
Создаются многомерные массивы в Java аналогичным способом. Количество квадратных скобок указывает на размерность.
Примеры создания массивов фиксированной длины:
Однако, не обязательно изначально указывать размер на всех уровнях, можно указать размер только на первом уровне.
В данном случае, пока неизвестно сколько будет элементов в каждой строке, это можно определить позже, причем, массив может содержать в каждой строке разное количество элементов, то есть быть несимметричным. Определим количество элементов в каждой строке для массива a1
В результате, при выводе на экран,
массив будет иметь такой вид:
0
0 0
0 0 0
0 0 0 0
0 0 0 0 0
При создании массива его элементы автоматически инициализируются нулями, поэтому в это примере на экран выведены нули.
Упражнения на тему многомерные массивы в Java:
- Создайте массив размерностью 5 на 6 и заполните его случайными числами (в диапазоне от 0 до 99 ). Выведите на консоль третью строку
- Даны матрицы С и D размерностью 3 на 3 и заполненные случайными числами в диапазоне от 0 до 99. Выполните по отдельности сначала сложение, потом умножения матриц друг на друга. Выведете исходные матрицы и результат вычислений на консоль.
- Просуммируйте все элементы двумерного массива.
- Дан двумерный массив, содержащий отрицательные и положительные числа. Выведете на экран номера тех ячеек массива, которые содержат отрицательные числа.
- Отсортируйте элементы в строках двумерного массива по возрастанию
В предыдущих лекциях мы познакомились с командами вывода на экран. Для этого мы использовали объект System.out , и его методы print() и println() . Просто и удобно.
Но, как вы уже наверное догадываетесь, одного вывода на экран недостаточно. Цель большинства программ — сделать что-то полезное для пользователя. Поэтому очень часто нужно, чтобы пользователь мог вводить данные с клавиатуры.
Как и для вывода, для ввода данных тоже есть специальный объект — System.in . Но, к сожалению для нас, он не настолько удобен, как нам бы хотелось. Этот объект позволяет считывать данные с клавиатуры по одному символу за раз.
Поэтому мы воспользуемся еще одним классом, который в паре с объектом System.in даст нам все, что нужно. В Java уже давно есть классы на все случаи жизни. С одним из них мы сейчас и познакомимся.
2. Класс Scanner
Считывание с клавиатуры с помощью объекта типа Scanner будет выглядеть примерно так:
Код | Пояснение |
---|---|
Создаем объект класса Scanner . Читаем с клавиатуры строку текста . Читаем с клавиатуры число . |
Выглядит вроде несложно, но так ли все просто на самом деле?
Думаю, у вас появилась куча вопросов, и сейчас мы на них ответим.
Но для начала продемонстрируем пример полной программы, где используется класс Scanner :
3. Создание объекта Scanner
Такая строка может сбивать с толку, однако вы будете постоянно встречать похожие вещи. Так что, думаем, настало время объяснить, что тут написано.
Вспомним, как мы обычно создаем переменную с текстом:
Сначала мы пишем тип переменной ( String ), затем ее имя ( str ) и, наконец, после знака равно пишем значение.
В нашей странной строке на самом деле все то же самое:
Объявление и инициализация переменной типа ScannerВсе, что находится слева от знака равно — это объявление переменной типа Scanner по имени console . Можно было назвать ее, например, s или scanner , или даже keyboard . Тогда код выглядел бы так:
Думаю, теперь все стало гораздо понятнее.
А код, что находится справа от знака равно , немного сложнее. Имеется в виду new Scanner(System.in); Но тут тоже ничего космического.
В этом коде мы говорим Java-машине: создай новый объект (слово new ) типа Scanner и передай в него в качестве параметра то, из чего новосозданный объект Scanner будет брать данные — объект System.in .
После выполнения всей этой строки у нас появится переменная по имени console типа Scanner , с помощью которой наша программа сможет считывать данные с клавиатуры.
4. Вызов методов
В приведенном выше примере наша переменная console типа Scanner хранила у себя внутри ссылку на объект типа Scanner .
Чтобы вызвать методы объекта, на который ссылается переменная, нужно после имени переменной написать точку, а затем имя метода и параметры. Общий вид этой команды такой:
Вызов метода объекта, на который ссылается переменнаяЕсли вы не планируете передавать в функцию параметры, нужно писать просто пустые скобки:
5. Ввод данных с консоли
Вводить данные с клавиатуры, когда у нас есть объект типа Scanner , очень легко.
Чтобы считать с клавиатуры строку , нужна команда:
Когда программа дойдет до выполнения этой строки, она приостановится и будет ждать, пока пользователь введет данные и нажмет клавишу enter. После этого все, что ввел пользователь, будет сохранено в переменную str .
Чтобы считать с клавиатуры число , нужна команда:
Тут все аналогично предыдущей команде. Когда программа дойдет до выполнения этой строки, она приостановится и будет ждать, пока пользователь введет данные и нажмет клавишу enter. После этого все, что ввел пользователь, будет преобразовано в число и сохранено в переменную number .
Если пользователь ввел данные, которые невозможно преобразовать в целое число, в программе возникнет ошибка, и она завершится.
Чтобы считать с клавиатуры дробное число , нужна команда:
Эта команда полностью аналогична команде nextInt() , только она проверяет, что введенные данные можно преобразовать в число double .
Пример программы, которая считывает с клавиатуры два числа и выводит их сумму:
Пользователь может ввести несколько чисел в одной строке, разделив их пробелами: такая ситуация будет корректно обработана методами класса Scanner . Однако числа будут считаны программой только после того, как пользователь нажмет Enter .
Считай с клавиатуры три строки. А затем: 1. Выведи на экран третью строку в неизменном виде. 2. Выведи на экран вторую строку, предварительно преобразовав ее к верхнему регистру. 3. Выведи на экран первую строку, предварительно преобразовав ее к нижнему регистру. Пример ввода: Строка Номер РАЗ Втор Считай с клавиатуры три целых числа. Выведи на экран их среднее арифметическое. Пример ввода: 50 101 201 Пример вывода: 117 Среднее арифметическое - это число, равное сумме всех чисел, деленной на их количество. Используй деление без остатка.6. Другие методы класса Scanner
Это, кстати, были не все методы класса Scanner . Полный список будет выглядеть примерно так:
Метод | Описание |
---|---|
Считывает данные и преобразует их в тип byte | |
Считывает данные и преобразует их в тип short | |
Считывает данные и преобразует их в тип int | |
Считывает данные и преобразует их в тип long | |
Считывает данные и преобразует их в тип float | |
Считывает данные и преобразует их в тип double | |
Считывает данные и преобразует их в тип boolean | |
Считывает одно «слово». Слова разделяются пробелами или enter | |
Считывает целую строку |
Есть еще методы, которые позволяют проверить тип еще не считанных данных (чтобы знать, каким методом их считывать).
Метод | Описание |
---|---|
Там тип byte ? Его можно будет преобразовать к byte ? | |
Там тип short ? Его можно будет преобразовать к short ? | |
Там тип int ? Его можно будет преобразовать к int ? | |
Там тип long ? Его можно будет преобразовать к long ? | |
Там тип float ? Его можно будет преобразовать к float ? | |
Там тип double ? Его можно будет преобразовать к double ? | |
Там тип boolean ? Его можно будет преобразовать к boolean ? | |
Там есть еще одно слово? | |
Там есть еще одна строка? |
7. Ввод данных из строки
Мы уже говорили выше, что класс Scanner умеет считывать данные из разных источников. И один из этих источников — строка текста .
Вы уже знаете что такое массивы в Java и как с ними работать?
1. Если ответ "нет" - прочтите сначала статью "Массивы в Java"
2. Если ответ "да" - читайте статью ниже о двумерных массивах.
Поскольку Вы уже знаете что такое массивы и как с ними работать, наверняка, для Вас не проблема:
- создать одномерный массив
- заполнить его значениями
- и вывести в консоль
Например:
Ну, а что же с двумерным массивом?
Самый, наверное, распространенный пример двумерного массива - это матрица. Если кто забыл что такое матрица, напоминаем:
В матрице есть строки и столбцы . На пересечении их стоит определенное значение.
Напоминаем, что счет в массивах начинается с 0 .
- число 1 это пересечение 0 - строки и 0 - столбца
- число 2 это пересечение 0 - строки и 1 - столбца
- число 3 это пересечение 1 - строки и 0 - столбца
- число 4 это пересечение 1 - строки и 1 - столбца
Ниже приводим пример объявления двумерного массива на языке программирования Java:
Или можно сразу объявить содержимое массива:
При инициализации двумерного массива, можно заметить отличие от обычного массива. В двумерном массиве Вы используете две квадратные скобки вместо одной.
- в первой вы пишите количество строк
- во второй вы пишите количество столбцов
При заполнении двумерного массива Вы указываете в этих скобках строку и столбец.
Например
А как же вывести двумерный массив в консоль?
Вывод двумерного массива с помощью цикла for сильно отличается от вывода обычного массива (когда используется цикл for).
Чтобы вывести в каждую ячейку двумерного массива значение, не достаточно использовать один цикл for. Необходимо использовать два цикла for, при этом один из них находится в другом.
Почему так?
Ранее упоминалось, что двумерный массив состоит из строк и столбцов. Каждая ячейка такого массива - это пересечение какой-то строки и столбца.
1. Так что первый цикл for перебирает каждую строку двумерного массива (которая содержит какое-то количество столбцов).
2. А второй цикл for перебирает столбцы в этой строке. Таким образом можно заполнить значением каждый элемент двумерного массива.
Например:
Если Вы запустите данный код на своем компьютере, в консоли Вы увидите:
Надеемся, что наша статья была Вам полезна. Также есть возможность записаться на наши курсы по Java в Киеве. Обучаем с нуля. Детальную информацию Вы можете найти у нас на сайте.
Читайте также: