Как сделать метод ввода

Обновлено: 30.06.2024

При работе с приложениями или сайтами, пользователям необходимо вводить свои данные: почту, пароль, день рождения и так далее. В 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 или распаковку данных:

В листинге 11 приведен текст программы, выполняющей сложение двух чисел. При создании консольных приложений для ввода-вывода данных используется класс Console пространства имен System. Методы ввода Write и WriteLine отличаются тем, что использование последнего приводит к переводу курсора на следующую строку. По умолчанию данные, считанные методом ReadLine, представляются текстовой строкой. Поэтому в листинге присутствует переменная con, описанная типом String.

Предположим, мы будем вводить в программе дробные значения в качестве данных, тогда, например, метод ToDoubleO можно использовать для преобразования текстового аргумента в числовое значение вещественного типа (см. листинг 11).

Кроме класса Convert, с помощью которого и выполняется данное преобразование, в программах можно применять метод Parse, что показано в листинге 12.

using System.Collections.Generic; using System.Text;

static void Main(string[] args)

Console.WriteLine("Введите 1 число ");

double a = Convert.ToDouble(con);

Console.Write("Введите 2 число "); con = Console.ReadLine(); double b = Convert.ToDouble(con); double c = a + b;

Console.WriteLine("Результат сложения двух чисел advconts adv2">

Console.WriteLine("Введите 1 число " ); con = Console.ReadLine(); double a = double.Parse(con);

Console.Write("Введите 2 число "); con = Console.ReadLine(); double b = double.Parse(con); double c = a + b;

Console.WriteLine("Результат сложения двух чисел /im/15/5594/752394-15.jpg" alt="Порядок расположения элементов на форме"/>

Рис. 12. Порядок расположения элементов на форме

Подписи к элементам управления

Рис. 13. Подписи к элементам управления

В листинге 13 приведена процедура, выполняющая сложение двух чисел. Для ее написания следует выполнить двойной щелчок на кнопке buttonl (Ок), создав процедуру обработки события buttonl_CIick.

private void buttonl_Click(object sender, EventArgs e)

double a = Convert.ToDouble(textBoxl.Text); double b = Convert.ToDouble(textBox2.Text);

Пользователь, используя методы ввода-вывода, выводит результаты разработанной им программы на экран. Однако сделать это он может по-разному, в частности, ввод данных можно осуществить на форме, что предпочтительнее тогда, когда не требуется вводить множество данных. И, наоборот, в случае ввода большого количества данных предпочтительнее запрограммировать стандартное диалоговое окно. Рассмотрим эти способы подробнее.

Первый способ. Ввод данных в текстовое окно, расположенное на форме.

double а = Convert.ToDouble(textBoxl.Text);

int a = Convert.ToIntl6(textBoxl.Text);

Запись такого вида означает занесение в ячейку с именем а введенного пользователем значения в текстовое окно с именем textBoxl, расположенное на форме.

Появление интеллектуальной подсказки, которая появится после того, как пользователь поставит точку при написании класса Convert, поможет сориентироваться в выборе нужного метода преобразования.

Подобная ситуация представлена на рис. 14.

Вывод данных в текстовое окно на форме можно осуществить, используя метод ToString.

Запись c.ToString() означает, что значение переменной с преобразуется из числа в строку символов.

private void buttonl Click(cfc~ect sender, EventArgs e)

i) 0 Messages

ToChar ^ ToDateTime $ ToDedmal ^ ToDouble

Ъ ToInt32 ^ ToInt64 Ъ ToSByte ToSmgle $ ToString

short Convert.Tolnt 16(string value, int fromBase) (+ 13 Converts the System.String representation of a number ir signed integer.

System. ArgumentException System. OverflowExcepbon System. Forma tException

Рис. 14. Появление интеллектуальной подсказки

Таблица 9. Символы форматирования строк

Формат отображения числа

Число с фиксированной точкой

Число, записанное в экспоненциальной форме

Числовой формат Number. Применяется для представления дробных чисел

Универсальный формат General. Можно использовать для представления чисел с фиксированной или плавающей точкой

Используется для форматирования десятичных чисел

Денежный формат. Применяется для отображения денежных величин

Второй способ. Создание диалоговых окон.

К сожалению, в пространстве имен System.Windows.Forms нет базового класса, отвечающего за вывод диалоговых окон. Воспользуемся функцией InputBox языка программирования Microsoft Visual Basic, который входит в состав среды Microsoft Visual Studio 2012. Для ее использования выберем пункт

меню Project / Add Reference. Откроется окно, представленное на рис. 15

Projects Browse Recent

Microsoft. SqlServer. SmoEnum

I Microsoft. VisualBasJC

Microsoft. VisualBasic. Vsa

Microsoft. VisualC. VSCodeProvider

Microsoft. VisualStudio. CommandBars

Microsoft. VisualStudio. Debugger Visualizers

Mirrrv;nft. Vici іяІЯй iHin. VCr nrleMorlel

Рис. 15. Окно Add Reference

Solution Explorer ? Д X

j> m ш ш a

•ip Наконец-то получившееся с

SI cM Properties

*0 Microsoft.VisualBasic *0 System •O System.Data *0 System.Deployment *0 System.Drawing *0 System.Windows.Forms 'O System.Xml

Рис. 16. Окно Solution Explorer

В общем виде инструкция ввода данных с использованием функции InputBox выглядит так:

Переменная = Microsoft.VisualBasic.ІпІегасйоп.ІприіВох('77/шглашгш/г", "Заголовок'", "Содержимое", X, Y);

Приглашение — это любой текст, который должен находиться в Окне ввода. Его назначение — служить подсказкой пользователю, какую информацию он должен ввести в специальное поле ввода, находящееся в этом окне.

Аргумент Заголовок — это надпись в строке заголовка Окна ввода.

Содержимое — первоначальное содержимое поля ввода.

X и Y — координаты вывода диалогового окна (чаще всего будем использовать координаты -1,-1, которые позволят расположить окно по центру экрана).

Значение функции InputBox — строка, которую ввел пользователь. Поэтому если программе надо получить число, то введенная строка должна быть преобразована в число при помощи соответствующего метода.

В общем виде инструкция вывода данных с использованием функции MessageBox выглядит так:

Вы можете заказать у нас

VPS (Virtual Private Server, виртуальный выделенный сервер, другое название VDS — Virtual Dedicated Server) — стартовая площадка для крупных проектов, позволяющая более рационально использовать представляемые ресурсы в рамках выбранного тарифа OpenVZ-сервера. OpenVZ — технология виртуализации c общим ядром основной операционной системы без эмуляции отдельного физического сервера. Предлагает меньшую стоимость за счёт низких накладных расходов на виртуализацию. KVM — аппаратная виртуализация, при которой полностью эмулируется физический сервер, что позволяет устанавливать любые операционные системы (Linux, Windows, FreeBSD и другие) и дает гарантированные ресурсы физического сервера. Для всех серверов предоставляется надежная DDOS-защита.

Аннотация: Основные возможности консольного ввода-вывода (класс Console) и управляющие операторы языка (ветвления, циклы, передача управления).

Консольный ввод-вывод

Презентацию к данной лекции Вы можете скачать здесь.

Результат работы программы:

До сих пор мы использовали метод WriteLine для вывода значений переменных и литералов различных встроенных типов. Это возможно благодаря тому, что в классе Console существует несколько вариантов методов с именами Write и WriteLine , предназначенных для вывода значений различных типов.

Методы с одинаковыми именами, но разными параметрами называются перегруженными. Компилятор определяет, какой из методов вызван, по типу передаваемых в него величин. Методы вывода в классе Console перегружены для всех встроенных типов данных, кроме того, предусмотрены варианты форматного вывода.

Листинг 4.1 содержит два наиболее употребляемых варианта вызова методов вывода. Если метод WriteLine вызван с одним параметром, он может быть любого встроенного типа. В строке, помеченной комментариями "1" и "2", нам требуется вывести в каждой строке не одну, а две величины, поэтому прежде чем передавать их для вывода, их требуется "склеить" в одну строку с помощью операции + .

Оператор 3 иллюстрирует форматный вывод . В этом случае используется другой вариант метода WriteLine . Первым параметром методу передается строковый литерал , содержащий, помимо обычных символов, предназначенных для вывода на консоль , параметры в фигурных скобках, а также управляющие последовательности. Параметры нумеруются с нуля, перед выводом они заменяются значениями соответствующих переменных в списке вывода.

Из управляющих последовательностей чаще всего используются символы перевода строки ( \n ) и горизонтальной табуляции ( \t ).

Рассмотрим простейшие способы ввода с клавиатуры. В классе Console определены методы ввода строки и отдельного символа, но нет методов, которые позволяют непосредственно считывать с клавиатуры числа. Ввод числовых данных выполняется в два этапа:

  1. Символы, представляющие собой число, вводятся с клавиатуры в строковую переменную.
  2. Выполняется преобразование из строки в переменную соответствующего типа.

Преобразование можно выполнить либо с помощью специального класса Convert , определенного в пространстве имен System , либо с помощью метода Parse , имеющегося в каждом стандартном арифметическом классе. В листинге 4.2 используются оба способа.

Ввод строки выполняется в операторе 1. Длина строки не ограничена, ввод выполняется до символа перевода строки.

Ввод символа выполняется с помощью метода Read , который считывает один символ из входного потока (оператор 2). Метод возвращает значение типа int , представляющее собой код символа , или –1, если символов во входном потоке нет (например, пользователь нажал клавишу Enter ). Поскольку нам требуется не int , а char , а неявного преобразования от int к char не существует, приходится применить операцию явного преобразования типа.

Оператор 3 считывает остаток строки и никуда его не передает. Это необходимо потому, что ввод данных выполняется через буфер — специальную область оперативной памяти. Фактически данные сначала заносятся в буфер , а затем считываются оттуда процедурами ввода. Занесение в буфер выполняется по нажатию клавиши Enter вместе с ее кодом. Метод Read , в отличие от ReadLine , не очищает буфер , поэтому следующий после него ввод будет выполняться с того места, на котором закончился предыдущий.

При вводе вещественных чисел дробная часть отделяется от целой с помощью запятой (или точки - зависит от региональных настроек).

Если вводимые с клавиатуры символы нельзя интерпретировать как вещественное число , генерируется исключение .

Ввод-вывод в файлы

Часто бывает удобно заранее подготовить исходные данные в текстовом файле и считывать их в программе. Вывод из программы тоже бывает полезно выполнить не на экран, а в текстовый файл . Работа с файлами подробно рассматривается позже, а сейчас приведем лишь образцы для использования в программах. В листинге 4.3 приведена версия программы из листинга 4.1, выполняющая вывод не на экран, а в текстовый файл с именем output.txt. Файл создается в том же каталоге, что и исполняемый файл программы, по умолчанию — . \ConsoleApplication1\bin\Debug.

Для того чтобы использовать в программе файлы, необходимо:

  1. Подключить пространство имен, в котором описываются стандартные классы для работы с файлами (оператор 1).
  2. Объявить файловую переменную и связать ее с файлом на диске (оператор 2).
  3. Выполнить операции ввода-вывода (операторы 3–5).
  4. Закрыть файл (оператор 6).

Теперь вы знаете достаточно, чтобы писать линейные программы, все операторы в которых выполняются последовательно, один за другим, например: ввод исходных данных, вычисления по формулам, вывод результатов. Для написания программ более сложной структуры необходимо изучить управляющие операторы, которые, как следует из их названия, управляют потоками вычислений.

Читайте также: