T.M. SoftStudio

feci quod potui, faciant meliora potentes

Купить полную версию курса "Введение в вычисления с Java" (русскоязычная версия, лекции, тесты, лабораторные работы)

Введение в вычисления с Java. Основы программирования

Неделя 2

Лекция 11

Простой IO

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

Большинство языков программирования высокого уровня обеспечивают стандартные методы ввода и вывода программ для получения информации от пользователей и вывода результатов пользователям для просмотра.

В Java, стандартные методы для вывода текста в консоль являются System.out.println и System.out.print.

System представляет собой класс Java. Вы видели println в программе HelloWorld.

Разница между print и println в том, что println будет переводить на новую строку после печати, в то время как print останется на той же линии.

Технически, println и print являются методами класса PrintStream.

Обратите внимание, что они разделены точкой или оператором точка.

Я вернусь к этому, когда будем обсуждать классы, объекты и методы далее.

Есть аналогичные стандартные методы для ввода на основе класса Scanner, но он немного неуклюжий, поэтому мы создали новый класс I/O, который называется IO в качестве оболочки, и он будет сочетать как ввод, так и вывод и, надеюсь, предоставляет более простой в использовании интерфейс ввода / вывода для вас.

Методы обертки очень часто используются в Java.

Они в основном предоставляют альтернативный интерфейс на основе существующих методов, чтобы удовлетворить определенной цели.

В этом случае, новый класс I/O, можно надеяться, будет легче в изучении для начинающих программистов.

Я вернусь к классу Scanner, когда мы будем обсуждать файловый ввод/вывод.

Методами вывода являются IO.outputln и IO.output. Вы видели их обоих в программе CourseGrade.

Разница между ними состоит в том, что IO.outputln будет перемещаться на новую строку, в то время как IO.output останется на той же линии.

Два метода output и outputln берут строку символов в качестве параметра и выводят ее на консоль.

В случае println, finalGrade который имеет double тип, будет преобразован в символьную строку, и знак плюс, который вы видите здесь, является оператором конкатенации, который соединяет две строки в единую строку символов.

Методы ввода – это IO.inputInteger для целых чисел и IO.inputDouble для double.

Вы видели IO.inputDouble, когда программа просила пользователя ввести examScore, labScore и hwScore. Аналогичным образом, IO.inputInteger может быть использован для ввода целых.

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

Вам нужно импортировать пакет comp102x, который мы создали для вас.

В частности, необходимо будет включить утверждение

import comp102x.IO;

в начало программы.

import является зарезервированным словом Java.

Вы должны увидеть много больше примеров по использованию import и этих методов ввода-вывода в ближайшие недели.

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

Например, когда вы идете в супермаркет, представьте, как долго вы будете рассчитываться, если кассир должен будет вводить каждый элемент, который вы приобрели, с помощью клавиатуры.

Обратите внимание, что не только цены должны быть введены, магазину необходимо также вести учет всех деталей для каждой транзакции, то есть, должно быть введено название каждого элемента и т.д.

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

Альтернативные интерфейсы ввода необходимы. Клавиатура является наиболее часто используемым устройством ввода.

Существуют альтернативные технологии, такие как штрих-коды.

Я уверен, что каждый из вас сталкивался со штрих-кодами часто в повседневной жизни.

Например, в супермаркетах, библиотеках и на почте.

В последнее время появляются и новые технологии для распознавания голоса.

Например, Siri, который iPhone использует для голосового ввода и у многих из вас, вероятно, есть опыт разговоров с компьютером, когда вы делали телефонные звонки.

В последнее время радиочастотная технология идентификации RFID позволила отслеживать продукты через беспроводные бесконтактные средства.

Некоторые супермаркеты экспериментируют с радиометками RFID, которые позволяют продавцу осуществлять проверку, не вынимая каждый товар из вашей корзины.

Я покажу вам пример манипулирования со штрих-кодом в программе.

Штрих-код является машиночитаемым представлением данных в виде изображения.

Я буду говорить об одномерных штрихкодах. 2D штрих-коды, такие как QR-коды, набирают популярность.

В основном, линейный штрих-код представляет данные путем изменения ширины и промежутка между набором параллельных линий.

Некоторые примеры штрих-кодов показаны здесь. Штрих-технологии были разработаны в 1960-х годах и получили коммерческий успех, так как они широко используются в автоматизированных кассовых системах, таких как те, что в супермаркетах.

Я хочу отметить, что в следующем примере, мы используем абстракцию данных для работы со штрих-кодом.

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

Как это на самом деле сделано или реализовано не важно для пользователя.

Можно рассматривать его таким же образом, как номера на клавиатуре.

Эта программа здесь показывает, что простая арифметика может быть применена к числовым значениям, представленным с использованием штрих-кодов.

Программа начинается с импорта класса IO из пакета comp102x.

В дополнение к выполнению операций ввода/вывода от стандартных устройств ввода и вывода, класс IO может также принимать входные и выходные номера как штрих-кода.

Этот пример, чтобы проиллюстрировать, что когда задействован компьютер, тогда не сильно отличается, получены ли входные цифры от пользователя через клавиатуру или с помощью штрих-кода.

Подробное представление не важно до тех пор, пока для программы обеспечены методы декодирования информации.

Как и прежде, программа получает имя класса, в данном случае, BarcodeDemo и main как главная точка входа в программу.

Первая часть тела программы принимает два штрих-кода в качестве входных данных с помощью метода inputBarcode от класса IO.

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

Числа затем будут расшифрованы и присвоены переменным value1 и value2 .

Это похоже на использование inputInteger или inputDouble если входные данные должны были быть введены с консоли.

Цифры, введенные с клавиатуры, по-прежнему должны быть декодированы перед присвоением в соответствующие переменные.

Обратите внимание, что мы используем тип long здесь, потому что штрих-коды могут представлять очень большие числа, которые могут быть вне диапазона int.

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

Два IO.outputln объявления здесь выводят значения, представленные двумя штрих-кодами.

Значения можно обрабатывать так же, как числа, представленные в других примитивных типах в Java и арифметические операции, такие как сложение и умножение могут быть применены к этим числам.

В этом случае, результаты операций будут присвоены переменным addResult и multResult с примитивным целочисленным типом данных long снова, потому что штрих-коды могут представлять очень большие числа.

И результаты арифметических операций распечатываются для просмотра.

Кроме того, результаты могут также быть выведены в виде штрих-кода, используя метод outputBarcode для класса IO.

В этом случае штрих-код будет создан для значения addResult и хранится в выходном файле.

Barcode Demo

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

Эти штрих-коды хранятся в виде файлов изображений.

Первый из них сфотографировали с обложки книги с помощью камеры сотового телефона.

Вы можете увидеть, что качество не очень хорошее.

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

Третий штрих-код представляет собой число с цифрами от 0 до 9.

Обратите внимание, что эти штрих-коды разных размеров и качества.

Теперь мы можем открыть проект, BarcodeDemo, двойным щелчком на значке.

Вы можете видеть, что это та же программа, что мы только что обсуждали.

Программа составлена ​​без ошибок.

Мы можем запустить программу, щелкните правой кнопкой мыши на значке и выберите main из выпадающего меню, а затем нажмите кнопку ОК.

Теперь вы можете увидеть, что появилось окно диалога, которое запрашивает местоположение первого изображения штрих-кода.

Это происходит при выполнении метода inputBarcode().

Давайте выберем barcode1 в качестве первого штрих-кода.

Затем программа запрашивает второй штрих-код при втором вызове inputBarcode().

Давайте выберем barcode2.

Вы можете видеть, что значения штрих-кодов отображаются в окне консоли.

Значение первого штрих-кода огромное число из 12 цифр.

Второй штрих-код является небольшим числом со значением 2.

Легко проверить, что сумма двух штрих-кодов отображается здесь правильно.

Вы также можете проверить, что результат умножения также должен быть правильным.

Обратите внимание, что мы еще не сделали – есть еще всплывающее окно, которое запрашивает имя файла.

Это потому, что последнее утверждение в программе, outputBarcode() выводит штрих-код со значением addResult в изображение штрих-кода. Давайте использовать название b1 в качестве выходного файла. Теперь программа завершается.

Если вы проверите папку проекта, вы увидите, что есть файл с именем b1, и вы можете видеть, что это штрих-код, но мы не можем сказать его значение, просто взглянув на картину.

Нет проблем, давайте попробуем еще раз запустить программу.

На этот раз, давайте использовать b1 в качестве первого изображения штрих-кода и использовать barcode2 как второй штрих-код, как и раньше.

Вы можете видеть, что значение первого штрихкода теперь то же самое, как значение addResult в предыдущем выполнении программы.

Таким образом, мы убедились, что штрих-код с addResult как значением действительно был сформирован.

Вы также можете увидеть результат сложения и умножения.

Давайте введите b2 в качестве выходного файла, чтобы завершить программу.

Я уверен, что вы можете найти много штрих-кодов вокруг вас.

Вы можете использовать ваш смартфон или цифровую камеру, чтобы сфотографировать штрих-кода, а затем ввести их в программу.