Разработайте программу список дел который управляется командами в консоли java

Обновлено: 07.07.2024

Лабораторные работы по ООП за 3 семестр 2019.

Лабораторные работы выполнены в соответствии с выданным вариантом, за исключением работы номер 8 - она выполнялась вся.

Лабораторная работа 1

Тема: "ЦИКЛЫ, УСЛОВИЯ, ПЕРЕМЕННЫЕ И МАССИВЫ В JAVA".
Задание:

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

Решение представлено в репозитории, папка "lab1".

Лабораторная работа 2

Тема: "ООП В JAVA. ПОНЯТИЕ КЛАССА".
Задание:

Создать класс, описывающий книгу (Book). В классе должны быть описаны нужные свойства книги(автор, название, год написания и т. д.)и методы для получения, изменения этих свойств. Протестировать работу класса в классе BookTest, содержащим метод статический main(String[] args).

Решение представлено в репозитории, папка "lab2".

Лабораторная работа 3

Тема: "НАСЛЕДОВАНИЕ В JAVA".
Задание:

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

Решение представлено в репозитории, папка "lab3".

Лабораторная работа 4

Тема: "ИНТЕРФЕЙСЫ В JAVA".
Задание:

Реализовать интерфейс Priceable, имеющий метод getPrice(), возвращающий некоторую цену для объекта. Проверить работу для различных классов, сущности которых могут иметь цену.

Решение представлено в репозитории, папка "lab4".

Лабораторная работа 5

Тема: "СОЗДАНИЕ ПРОГРАМ С ГРАФИЧЕСКИМ ИНТЕРФЕЙСОМ ПОЛЬЗОВАТЕЛЯ НА JAVA".
Задание:

Создать окно, реализовать анимацию, с помощью картинки, состоящей из нескольких кадров.

Решение представлено в репозитории, папка "lab5".
Примечание: В качестве анимации используется набор из пяти картинок, образующих слайд-шоу. Эффект анимации достигается увеличением количества картинок и скорости их изменения, однако, посколько лабораторная работа ставит целью работу с графическим интерфейсом в JAVA, а не обучение работе в Adobe Photoshop, считаю такую реализацию достаточной.

Лабораторная работа 6

Тема: "ОБРАБОТКА СОБЫТИЙ В JAVA ПРОГРАММАХ С ГРАФИЧЕСКИМ ИНТЕРФЕЙСОМ ПОЛЬЗОВАТЕЛЯ".
Задание:

Реализация программу на Java с JTextArea и двумя меню:
Цвет: который имеет возможность выбора из три возможных : синий, красный и черный
Шрифт: тривида: “Times New Roman”, “MS Sans Serif”, “Courier New”.Вы должны написать прогамму, которая с помощью меню, может изменять шрифт и цвет текста, написанного в JTextArea

Решение представлено в репозитории, папка "lab6".

Лабораторная работа 7

Тема: "КОЛЛЕКЦИИ, ОЧЕРЕДИ, СПИСКИ В JAVA".
Задание:

Создать свою коллекцию, такую же как и ArrayList.

Решение представлено в репозитории, папка "lab7".

Лабораторная работа 8

Тема: "РАБОТА С ФАЙЛАМИ".
Задание:

  1. Реализовать запись в файл введённой с клавиатуры информации
  2. Реализовать вывод информации из файла на экран
  3. Заменить информацию в файле на информацию, введённую с клавиатуры
  4. Добавить в конец исходного файла текст, введённый с клавиатуры

Решение представлено в репозитории, папка "lab8".

Лабораторная работа 9

Тема: "Исключения".
Задание: Много.

Решения представлены в репозитории, папка "lab9".

Лабораторная работа 10

Тема: "РАБОТА С ДЖЕНЕРИКАМИ. СТИРАНИЕ ТИПОВ".
Задание:

  1. Написать метод для конвертации массива строк/чисел в список.
  2. Написать класс, который умеет хранить в себе массив любых типов данных (int, long etc.).
  3. Реализовать метод, который возвращает любой элемент массива по индексу.
  4. Написать функцию, которая сохранит содержимое каталога в список и выведет первые 5 элементов на экран.
  5. *Реализуйте вспомогательные методы в классе Solution, которые должны создавать соответствующую коллекцию и помещать туда переданные объекты. Методы newArrayList, newHashSet параметризируйте общим типом T. Метод newHashMap параметризируйте парой <K, V>, то есть типами К- ключ и V-значение. Аргументы метода newHashMap должны принимать

Решения представлены в репозитории, папка "Lab10".

Примечание: решение задания 2 аналогично лабораторной номер 7 (Описание | Код)

Лабораторная работа 12

Тема: "ОБРАБОТКА СТРОК. ИСПОЛЬЗОВАНИЕ РЕГУЛЯРНЫХ ВЫРАЖЕНИЙ В JAVA-ПРИЛОЖЕНИЯХ".
Задание:

  1. Необходимо реализовать консольное приложение, позволяющее манипулировать строкой, разбив ее на элементы путем использования регулярных выражений.
  2. Написать регулярное выражение, определяющее является ли данная строка строкой "abcdefghijklmnopqrstuv18340" или нет.
  3. Дан текст со списками цен. Извлечь из него цены в USD, RUВ, EU.
  4. Дан текст, необходимо проверить есть ли в тексте цифры, за которыми не стоит знак «+».
  5. Написать регулярное выражение, определяющее является ли данная строчка датой в формате dd/mm/yyyy. Начиная с 1900 года до 9999 года.
  6. Написать регулярное выражение, определяющее является ли данная строчка допустимым (корректным) е-mail адресом согласно RFC под номером 2822.
  7. Проверить, надежно ли составлен пароль. Пароль считается надежным, если он состоит из 8 или более символов. Где символом может быть цифр, английская буква, и знак подчеркивания. Пароль должен содержать хотя бы одну заглавную букву, одну маленькую букву и одну цифру.

Решения представлены в репозитории, папка "Lab12".

Практические работы выполнены полностью, за исключением работы №5. В ней требуется выполнить от трёх до пяти (выполнено - 5) заданий из представленного списка.
Если в работе требовалось выполнить более одного задания (и задания не были напрямую связаны между собой), реализация каждого задания помещена в отдельный пакет (package) в составе проекта соответствующей работы.

Практическая работа 1

Тема: "КЛАССЫ, КАК НОВЫЕ ТИПЫ ДАННЫХ. ПОЛЯ ДАННЫХ И МЕТОДЫ".
Задания:

Необходимо реализовать простейший класс на языке программирования Java. Не забудьте добавить метод toString() к вашему классу. Так-же в программе необходимо предусмотреть класс-тестер для тестирования класса и вывода информации об объекте.
Упражнение 1.
Реализуйте простейший класс «Cобака».
Упражнение 2.
Реализуйте простейший класс «Мяч».
Упражнение 3.
Реализуйте простейший класс «Книга».

Решение представлено в репозитории, папка "pract1".

Практическая работа 2

Тема: "ИСПОЛЬЗОВАНИЕ UML ДИАГРАММ В ОБЪЕКТНО- ОРИЕНТИРОВАННОМ ПРОГРАММИРОВАНИИ".
Задания:

Упражнение 1.
По диаграмме класса UML описывающей сущность Автор. Необходимо написать программу, которая состоит из двух классов Author и TestAuthor. Класс Author должен содержать реализацию методов, представленных на диаграмме класса.
Упражнение 2.
По UML диаграмме класса написать программу, которая состоит из двух классов. Один из них Ball должен реализовывать сущность мяч, а другой с названием TestBall тестировать работу созданного класса. Класс Ball должен содержать реализацию методов, представленных на UML. Диаграмма на рисунке описывает сущность Мяч написать программу.

Решение представлено в репозитории, папка "pract2".

Практическая работа 3

Тема: "НАСЛЕДОВАНИЕ. АБСТРАКТНЫЕ СУПЕРКЛАССЫ И ИХ ПОДКЛАССЫ В JAVA".
Задания:

Упражнение 1.
Создайте абстрактный родительский суперкласс Shape и его дочерние классы (подклассы).
Упражнение 2.
Перепишите суперкласс Shape и его подклассы, так как это представлено на диаграмме Circle, Rectangle and Square.
Упражнение 3.
Вам нужно написать тестовый класс, чтобы самостоятельно это проверить, необходимо объяснить полученные результаты и связать их с понятием ООП - полиморфизм. Некоторые объявления могут вызвать ошибки компиляции. Объясните полученные ошибки, если таковые имеются.
Упражнение 4.
Напишите два класса MovablePoint и MovableCircle - которые реализуют интерфейс Movable.
Упражнение 5.
Напишите новый класс MovableRectangle (движущийся прямоугольник). Его можно представить как две движущиеся точки MovablePoints (представляющих верхняя левая и нижняя правая точки) и реализующие интерфейс Movable. Убедитесь, что две точки имеет одну и ту же скорость (нужен метод это проверяющий).

Решение представлено в репозитории, папка "pract3".

Практическая работа 4

Тема: "СОЗДАНИЕ GUI. СОБЫТИЙНОЕ ПРОГРАММИРОВАНИЕ В JAVA".
Задания:

  • одна кнопка JButton labeled “AC Milan”
  • другая JButton подписана “Real Madrid”
  • надпись JLabel содержит текст “Result: 0 X 0”
  • надпись JLabel содержит текст “Last Scorer: N/A”
  • надпись Label содержит текст “Winner: DRAW”;

Решение представлено в репозитории, папка "pract4".

Практическая работа 5

Тема: "ПРОГРАММИРОВАНИЕ РЕКУРСИИ В JAVA".
Задания:

  1. Проверка числа на простоту
    Дано натуральное число n>1. Проверьте, является ли оно простым. Программа должна вывести слово YES, если число простое и NO, если число составное.
  2. Разложение на множители
    Дано натуральное число n>1. Выведите все простые множители этого числа в порядке не убывания с учетом кратности.
  3. Палиндром
    Дано слово, состоящее только из строчных латинских букв. Проверьте, является ли это слово палиндромом. Выведите YES или NO.
    При решении этой задачи нельзя пользоваться циклами, в решениях на питоне нельзя использовать срезы с шагом, отличным от 1.
  4. Без двух нулей
    Даны числа a и b. Определите, сколько существует последовательностей из a нулей и b единиц, в которых никакие два нуля не стоят рядом.
  5. Разворот числа
    Дано число n, десятичная запись которого не содержит нулей. Получите число, записанное теми же цифрами, но в противоположном порядке.
    При решении этой задачи нельзя использовать циклы, строки, списки, массивы, разрешается только рекурсия и целочисленная арифметика.
    Функция должна возвращать целое число, являющееся результатом работы программы, выводить число по одной цифре нельзя.\

Решение представлено в репозитории, папка "pract5".

Практическая работа 6

Тема: "ТЕХНИКИ СОРТИРОВКИ В JAVA".
Задания:

Упражнение 1.
Написать тестовый класс, который создает массив класса Student и сортирует массив iDNumber и сортирует его вставками.
Упражнение 2.
Напишите класс SortingStudentsByGPA который реализует интерфейс Comparator таким образом, чтобы сортировать список студентов по их итоговым баллам в порядке убывания с использованием алгоритма быстрой сортировки.
Упражнение 3.
Напишите программу, которая объединяет два списка данных о студентах в один отсортированный списках с использованием алгоритма сортировки слиянием.

Решение представлено в репозитории, папка "pract6".

Практическая работа 7

Тема: "ИСПОЛЬЗОВАНИЕ СТАНДАРТНЫХ КОНТЕЙНЕРНЫХ КЛАССОВ ПРИ ПРОГРАММИРОВАНИИ НА JAVA".
Задания:

Решение представлено в репозитории, папка "pract7".

Практическая работа 8

Тема: "СОЗДАНИЕ РАЗЛИЧНЫХ ВИДЫ СПИСКОВ ОЖИДАНИЯ".
Задания:

  1. Исследуйте UML диаграмму классов на рисунке 1 и понаблюдайте, как она выражает то, что мы говорили выше в словах. Убедитесь, что вы понимаете все аспекты диаграммы.
  2. Расширить и модифицировать исходный код WaitList, как необходимо, чтобы полностью реализовать всю схему UML. Включить комментарии Javadoc. Обратите внимание на переключение ролей после реализации каждого интерфейса / класса!
  3. Изучение работу метода main(), которая использует ваши новые классы и интерфейс.

Решение представлено в репозитории, папка "pract8".

Практическая работа 9

Тема: "_СОЗДАНИЕ ПОЛЬЗОВАТЕЛЬСКИХ ИСКЛЮЧЕНИЙ _".
Задания:

Клиент совершает покупку онлайн. При оформлении заказа у пользователя запрашивается фио и номер ИНН. В программе проверяется, действителен ли номер ИНН для такого клиента. Исключение будет выдано в том случае, если введен недействительный ИНН. Предлагается модернизировать задачу из предыдущей лабораторной работы (см. методические указания по выполнению лабораторных работ №1-8) – задача сортировки студентов по среднему баллу. Необходимо разработать пользовательский интерфейс для задачи поиска и сортировки (использовать массив интерфейсных ссылок- пример в лекции 5). Дополнить ее поиском студента по фио – в случае отсутствия такого студента необходимо выдавать собственное исключение.

Решение представлено в репозитории, папка "pract9".

Практическая работа 11

Тема: "Задания на очереди".
Задания:

  • Найдите инвариант структуры данных «очередь»

  • Определите функции, которые необходимы для реализации очереди. Найдите их пред- и постусловия.

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

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

    • Класс ArrayQueueADT должен реализовывать очередь в виде абстрактного типа данных (с явной передачей ссылки на экземпляр очереди).

    • Класс ArrayQueue должен реализовывать очередь в виде класса (с неявной передачей ссылки на экземпляр очереди).

    • enqueue – добавить элемент в очередь;

    • element – первый элемент в очереди;

    • dequeue – удалить и вернуть первый элемент в очереди;

    • size – текущий размер очереди;

    • isEmpty – является ли очередь пустой;

    • clear – удалить все элементы из очереди.

    1. Определите интерфейс очереди Queue и опишите его контракт.

    2. Реализуйте класс LinkedQueue — очередь на связном списке.

    3. Выделите общие части классов LinkedQueue и ArrayQueue в базовый класс AbstractQueue.

    1. Разработайте классы Const, Variable, Add, Subtract, Multiply, Divide для вычисления выражений с одной переменной.

    2. Для тестирования программы должен быть создан класс Main, который вычисляет значение выражения x2−2x+1, для x, заданного в командной строке.

    3. При выполнение задания следует обратить внимание на:

      • Выделение общего интерфейса создаваемых классов.
      • Выделение абстрактного базового класса для бинарных операций.
    1. Доработайте предыдущее задание, так что бы выражение строилось по записи вида x * (y - 2)*z + 1

    Решение представлено в репозитории, папка "prac10".

    Практическая работа 12

    Тема: "ОБРАБОТКА СТРОК".
    Задания:

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

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

    Cинтаксис команд очень прост:

    На Haskell программа, которая реализует все эти команды, с учетом возможного некорректного ввода и с рядом некоторых моих правок выглядит примерно так (не спрашивайте меня, когда и как я учил язык):

    89 строк почти чистого функционального кода, и при этом, я уверен, что это еще можно оптимизировать и улучшить! Haskell дает очень ценный урок: многие программы могут быть написаны без использования циклов, переменных и некоторых других вещей, при этом программный код становится более качественным и более простым в сопровождении и тестировании.

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

    Однако, вернемся в D.

    Для интереса, я изменил некоторые команды в приложении (ну и кое-что добавил) и сделал цветной вывод на экран. Команду bump я заменил на команду head, а также ввел команду tail, которая по синтаксису совпадает с bump, но совершенно противоположна по результату действия (tail переносит задачу в самый низ списка задач).

    Все сказанное описывается так:

    Что тут происходит? Аргумент arguments процедуры main содержит в себе список всех строк переданных в командной строке приложению плюс имя самого приложения, поэтому с помощью алгоритма drop мы избавляемся от нулевого элемента массива arguments (drop возвращает диапазон, который получается путем пропуска n первых элементов переданного в нее диапазона). Далее создаем структуру, через которую будем манипулировать терминалом и помещаем ее в переменную terminal.

    Исполнитель выглядит достаточно просто:

    Довольно простой код, который позволяет выбрать нужную функцию для исполнения, а также позволяет правильно обработать ситуации, когда команда манипуляции todo представляет собой пустую строку или неизвестную команду. При этом, перед попаданием в исполнитель строка приводится к нижнему регистру (toLower) и из нее вырезаются конечные и начальные пробелы (strip).

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

    Функция addTodo выглядит следующим образом:

    Функция removeTodo выглядит так и имеет несколько параллелей с уже рассматривавшейся addTodo:

    Если все переданные аргументы корректны, то для осуществления удаления записи из файла необходимо считать весь файл в массив строк, удалить из этого массива элемент с нужным индексом (removeNth), перенести массив строк во временный файл (each и writeln), удалить исходный файл (remove) и переименовать временный файл, используя имя исходного файла (rename). Именно это и происходит внутри блока обработки исключения, в котором для удаления элемента из массива используется вспомогательная функция removeNth, которая описывается следующим образом:

    Функции moveTodoUp и moveTodoDown, с учетом рассмотренных фрагментов, реализуются достаточно просто и также используют массив-накопитель и временный файл:

    Копируем все функции в один файл (не забываем про main) и компилируем командой:

    kartinka-namber-van

    Функциональный стиль позволяет гораздо проще и аккуратнее выразить алгоритм программы, делая его достаточно изящным и изысканным. Применение точечной нотации (ступенчатая обработка и использование UFCS в D) представляет собой довольно мощное средство, которое в равной степени может как улучшить читаемость кода, так и ухудшить ее, при этом чистое использование функционального подхода в D может быть несколько непрактичным, что легко исправляется совмещением его с традиционным императивным подходом.

    Репутация: нет
    Всего: 1

    как можно сделать так, чтобы эта строка выполнилась так же, как будто я ввел бы ее вручную в cmd.exe и нажал на enter??

    Репутация: 47
    Всего: 159

    нет времени думать - нужно писать КОД!

    Репутация: нет
    Всего: 1

    у мя есть кнопка на форме "Скомпилировать". при ее нажатии должно выполняться следующее:
    - открыть окно консоли (cmd.exe для windows)
    - записать туда "javac MyClass" (имя класса может менятся во время исполнения программы)
    - эта команда выполняется там же (+ все что она напишет (ошибки и тд))
    - консольное окошко должно остаться открытым (либо закрывается)

    вот. как такое сделать??

    Leprechaun Software Developer

    Репутация: 206
    Всего: 534

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

    Репутация: нет
    Всего: 1

    Цитата

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

    поподробнее расскажите пжлста!

    Репутация: 11
    Всего: 15

    Окошко закроется сразу после выполнения

    Репутация: нет
    Всего: нет

    Цитата

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

    Leprechaun Software Developer

    Репутация: 206
    Всего: 534

    SoulKeeper, так кончно можно, только смысл какой? Все равно никакого доступа к этому процессу нет.

    Репутация: нет
    Всего: 1

    как сделать так чтоб вместо System.out все выводилось в JTextArea например??

    Leprechaun Software Developer

    Репутация: 206
    Всего: 534

    Переделать класс Spooler чтобы он писал не в OutputStream, а туда куда тебе надо.

    Репутация: нет
    Всего: 1

    как мне преобразовать массив из байтов(в данном случае buffer) в строку (или что-то подобное) чтобы записать в текстовую область ??
    или может как-то по другому можно??

    Leprechaun Software Developer

    Репутация: 206
    Всего: 534

    Репутация: нет
    Всего: 1

    • Прежде, чем задать вопрос, прочтите это!
    • Книги по Java собираются здесь.
    • Документация и ресурсы по Java находятся здесь.
    • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
    • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
    • Действия модераторов можно обсудить здесь.
    • FAQ раздела лежит здесь.

    Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

    [ Время генерации скрипта: 0.1381 ] [ Использовано запросов: 21 ] [ GZIP включён ]

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

    • System.out.print – вывод данных без перехода на следующую строку;
    • System.out.println – вывод данных с переходом на новую строку;
    • System.out.printf – форматированный вывод данных.

    Рассмотрим их по порядку. Если в программе вызвать два вот таких метода:

    В этом случае второе слово будет отображаться на следующей строке. Запомним этот символ переноса строки. Это универсальный символ, который применяется повсюду, а не только в этой функции.

    Смотрите, здесь нет символа перевода строки, но слово «World!» все равно отобразилось с новой строки. Вот в этом отличие между print и println.

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

    Вот эти плюсы здесь означают соединение двух строк, т.е. в конец первой строки добавляется вторая (либо числовое значение переменной, которое затем будет представлено в виде единой строки).

    Наконец, для тех кто знаком с языком С/С++ в Java есть функция printf, которая работает также и служит для форматированного вывода информации в консоль. Синтаксис этого метода такой:

    System.out.printf(<шаблон формата>, [список аргументов]);

    Например, мы можем вывести переменные x и y с помощью этой функции так:

    • %d – для целочисленных значений;
    • %f – для вещественных значений;
    • %.nf –вывод вещественного значения с точностью до n-го знака после запятой;
    • %c – для отдельного символа (тип char);
    • %s – для строк;
    • %% - вывод процентов.

    Обратите внимание, когда мы инициализировали переменную z вещественным значением, то в конце поставили букву f. Эта буква определяет вещественное число типом float. Если такая буква отсутствует у вещественного числа, то оно по умолчанию определяется как double.

    С выводом данных в целом разобрались. Теперь посмотрим как можно вводить данные с клавиатуры. Для этого в классе System определен объект in. Но через него не очень удобно работать. Поэтому используют другой класс Scanner, который является некой надстройкой над объектом System.in и предоставляет более удобный инструментарий для ввода значений с клавиатуры.

    Этот класс определен в пакете java.util, поэтому для доступа к нему следует сначала прописать этот пакет, а затем, указать сам класс:

    Но каждый раз вот так прописывать java.util.Scanner не очень то удобно. Поэтому мы сделаем так. Импортируем этот пакет с классом Scanner в нашу программу:

    И теперь все можно записать проще:

    Далее, мы здесь создаем новый объект Scanner с помощью оператора new и будем работать с этим объектом через ссылку in на него. Позже в других уроках мы еще будем подробнее говорить о создании объектов и ссылках на них. Сейчас просто запомните, что вот так создаются объекты в Java.

    Теперь через ссылку in мы можем обращаться к открытым методам объекта Scanner. Например, для ввода целочисленных значений, достаточно записать:

    Мы здесь объявляем переменную num и сразу ее инициализируем значением, введенным с клавиатуры. То есть, метод nextInt() объекта Scanner реализует ввод целочисленного значения и, затем, возвращает полученный результат.

    Далее, выведем введенное значение в консоль, чтобы убедиться, что все работает:

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

    • next(): считывает введенную строку до первого пробела;
    • nextLine(): считывает введенную строку до перевода строки;
    • nextByte(): считывает введенное число как byte;
    • nextShort(): считывает введенное число как short;
    • nextInt(): считывает введенное число как тип int;
    • nextDouble(): считывает введенное число как double;
    • nextFloat(): считывает введенное число как float;
    • nextBoolean(): считывает значение boolean.

    То есть для ввода значений каждого примитивного типа в классе Scanner определен свой метод. Что очень удобно. Например, напишем такую программу для ввода информации о человеке:

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

    Вот так в Java реализуется консольный вывод и ввод информации. И вы теперь знаете как это все работает.

    Видео по теме












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

    Интерфейс Java List, java.util.List, представляет упорядоченную последовательность объектов. Элементы, содержащиеся в списке Java, вставлять и удалять в соответствии с порядком их появления в списке.

    Каждый элемент в списке Java имеет индекс. Первый элемент в имеет индекс 0, второй элемент имеет индекс 1 и т.д.

    Вы можете добавить любой объект в список. Если список не типизирован с использованием Java Generics, то вы можете даже смешивать объекты разных типов (классов) в одном и том же списке.

    Учебное видео по спискам Java

    Если вы предпочитаете смотреть видео вместо чтения текста, вот видео версия этого учебника по Java List:

    Java List и Set

    Java List и Java Set очень похожи в том, что они оба представляют коллекцию элементов. Тем не менее, есть некоторые существенные различия.

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

    Реализация List

    Будучи подтипом Collection, все методы в интерфейсе Collection также доступны в Listinterface.

    • java.util.ArrayList
    • java.util.LinkedList
    • java.util.Vector
    • java.util.Stack

    Также есть параллельные реализации List в пакете java.util.concurrent.

    Вот несколько примеров того, как создать экземпляр List:

    Как вставить элементы в список Java

    Вставить элементы (объекты) в список Java можно методом add (). Вот пример добавления элементов в список Java:

    Первые три вызова add () добавляют экземпляр String в конец списка.

    Вставить нулевые значения

    На самом деле возможно вставить даже нулевые значения в список.

    Добавить элементы по определенному индексу

    Можно добавить элемент в список по определенному индексу. Интерфейс List имеет версию метода add(), которая принимает индекс в качестве первого параметра, и элемент для вставки в качестве второго параметра. Вот пример вставки элемента с индексом 0.

    Если список уже содержит элементы, то теперь они будут перемещаться дальше во внутренней последовательности. Элемент, который имел индекс 0 до того, как новый элемент был вставлен в индекс 0, будет перемещен в индекс 1 и т.д.

    Вставляем все элементы из одного списка в другой

    Можно добавить все элементы из одного списка в другой. Сделаем это с помощью метода ListaddAll (). Результат представляет собой объединение двух списков.

    Этот пример добавляет все элементы из listSource в listDest.

    Метод addAll () принимает набор в качестве параметра, поэтому в качестве параметра можно передать список или набор.

    Получить элементы из списка Java

    Вы можете получить элементы из списка Java, используя индекс элементов. Методом get (int index). Вот пример доступа к элементам списка с использованием индексов элементов:

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

    Как найти элементы в списке Java

    Вы можете найти элементы в списке Java, используя один из этих двух методов:

    1. index()
    2. LastIndexOf ()Метод indexOf () находит индекс первого вхождения в списке заданного элемента.

    Найти последнее вхождение элемента в списке

    Метод lastIndexOf () находит индекс последнего вхождения в списке данного элемента.

    Элемент 1 встречается 2 раза. Индекс последнего равен 2.

    Проверка: содержит ли список элемент?

    Вы можете проверить, содержит ли Java List данный элемент, используя метод List contains ().

    Чтобы определить, содержит ли List этот элемент, List будет внутренне выполнять итерации своих элементов и сравнивать каждый элемент с объектом, переданным в качестве параметра.

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

    Очевидно, что если входной параметр для contains () имеет значение null, метод contains () не будет использовать метод equals() для сравнения с каждым элементом, а вместо этого использует оператор ==.

    Как удалить элементы из списка Java

    Вы можете удалить элементы из списка Java с помощью этих двух методов:

    • remove(Object element)
    • remove(int index)

    remove (Object element) удаляет элемент в списке, если он присутствует. Все последующие элементы, затем перемещаются вверх по списку. Таким образом, их индекс уменьшается на 1.

    Этот пример сначала добавляет элемент, а затем снова удаляет его.

    Метод List remove (int index) удаляет элемент по указанному индексу.

    После выполнения этого примера кода список будет содержать элементы 1 и 2 с индексами 0 и 1.

    Очистить список

    Интерфейс Java List содержит метод clear (), который удаляет все элементы из списка при вызове. Удаление всех элементов также называется очисткой.

    Как сохранить все элементы из одного списка в другом

    Метод retainAll () способен сохранять все элементы из одного списка в другом. Другими словами, метод retain () удаляет все элементы, которые не найдены в другом списке.

    Результатом является пересечение двух списков.

    Узнать количество элементов

    Вы можете получить количество элементов вызвав метод size (). Вот пример:

    Подсписок списка

    Метод subList () может создавать новый List с подмножеством элементов из исходного List.

    Конечный индекс является последним индексом подсписка, но элемент в последнем индексе не включается в подсписок. Это похоже на то, как работает метод подстроки Java String.

    После выполнения list.subList (1,3) подсписок будет содержать элементы с индексами 1 и 2.

    Помните, что исходный список содержит 4 элемента с индексами от 0 до 3. Вызов list.subList (1,3) будет включить индекс 1, но исключить индекс 3, сохраняя тем самым элементы с индексами 1 и 2.

    Преобразовать list в set

    Вы можете преобразовать список Java в набор(set), создав новый набор и добавив в него все элементы из списка. Набор удалит все дубликаты.

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

    Обратите внимание, что список содержит элемент String 3 два раза. Набор будет содержать эту строку только один раз. Таким образом, результирующий набор будет содержать строки: element 1 , element 2 and element 3 .

    Общие списки

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

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

    Сортировка

    Вы можете отсортировать список с помощью метода Collections sort ().

    Класс Java String реализует интерфейс Comparable, вы можете отсортировать их в естественном порядке, используя метод Collections sort ().

    Сортировка списка с помощью Comparatorimplementation

    Вот код сортировки:

    Обратите внимание на реализацию Comparator в приведенном выше примере. Эта реализация сравнивает только поле марки автомобилей Car. Можно создать другую реализацию Comparator, которая сравнивает номерные знаки или даже количество дверей в автомобилях.

    Возможно реализовать Comparator с использованием Java Lambda. Вот пример, который сортирует объекты List of Car с использованием трех различных реализаций интерфейса Comparator, каждая из которых сравнивает экземпляры Car по своему полю:

    Итерации

    Вы можете выполнить итерацию списка несколькими различными способами. Три наиболее распространенных способа:

    • Использование итератора
    • Использование цикла for-each
    • Использование цикла for
    • Использование API Java Stream

    Итерация списка с помощью итератора

    Вызывая метод iterator () интерфейса List.

    Вызов hasNext () выполняется внутри цикла while.

    Внутри цикла while вы вызываете метод Iterator next () для получения следующего элемента, на который указывает Iterator.

    Если список задан с использованием Java Generics, вы можете сохранить некоторые объекты внутри цикла while.

    Итерация списка с использованием цикла For-Each

    Цикл for выполняется один раз для каждого элемента. Внутри цикла for каждый элемент, в свою очередь, связан с переменной obj.

    Можно изменить тип переменной внутри цикла for.

    Итерация списка с помощью цикла For

    Цикл for создает переменную int и инициализирует ее 0. Затем она зацикливается, пока переменная int i меньше размера списка. Для каждой итерации переменная i увеличивается.

    Внутри цикла for обращаемся к элементам List с помощью метода get (), передавая в качестве параметра переменную i.

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

    Тип локальной переменной внутри цикла for теперь String. Поскольку список обычно типизируется как String, он может содержать только объекты String.

    Следовательно, компилятор знает, что только метод String может быть возвращен из метода get (). Поэтому вам не нужно приводить элемент, возвращенный get (), в String.

    Перебор списка с использованием API Java Stream

    Четвертый способ итерации через API Java Stream. Для итерации вы должны сначала получить поток из списка. Получение потока из списка в Java выполняется путем вызова метода Liststream ().

    Как только вы получили поток из списка, вы можете выполнить итерацию потока, вызвав его метод forEach ().

    Вызов метода forEach () заставит Stream выполнить внутреннюю итерацию всех элементов потока.

    Средняя оценка / 5. Количество голосов:

    Спасибо, помогите другим - напишите комментарий, добавьте информации к статье.

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