Помощь в написании студенческих работ
Антистрессовый сервис

Методы решения задач

РефератПомощь в написанииУзнать стоимостьмоей работы

Задача, реализованная в классе Task — хранение информации о вопросах и ответах в игре. В классе Task были введены строковые переменные вопроса (String question), правильного ответа (String rightAnswer) и массив ответов (List answers), которые также используются в других классах. Задача, реализованная в классе TaskStorage — работа с текстовым файлом, в котором хранятся вопросы и список ответов для… Читать ещё >

Методы решения задач (реферат, курсовая, диплом, контрольная)

Любая программа на языке Java состоит из пакетов, а пакеты, в свою очередь, состоят из классов. Каждый класс хранится в отдельном файле. Имя файла совпадает с именем класса, расширение файла — java. Любая функция может существовать только внутри класса. В данной программе было создано в общей сложности 3 пакета и 7 классов. Каждый класс решает определенные задачи, поставленные с целью работы приложения.

Задача, реализованная в классе Task — хранение информации о вопросах и ответах в игре. В классе Task были введены строковые переменные вопроса (String question), правильного ответа (String rightAnswer) и массив ответов (List answers), которые также используются в других классах.

Задача, реализованная в классе TaskStorage — работа с текстовым файлом, в котором хранятся вопросы и список ответов для игры (открытие файла, чтение файла, разделение вопросов и ответов, выделение правильного ответа, закрытие файла).

Перед тем, как открыть файл, он был загружен в out-директорию с помощью конструкции. Затем идет чтение файла функцией bufferedreader. Также была использована функция e. printStackTrace () для подробного вывода возможных ошибок. Функция scanner была использована для разделения строки файла на вопросы и ответы. Суть разделения такова: если программа находит в текстовом файле символ «:», то это означает конец вопроса и начало списка вариантов ответов. Символ «;» обозначает переход от одного варианта ответа к другому. Символ «!!!» после названия варианта ответа обозначает то, что данный ответ на вопрос является правильным. Символ «/n» (перенос строки) обозначает переход на следующий вопрос. После нахождения данных символов кладем созданный вопрос в общий список.

Данный отрывок исходного кода отображает процесс работы с текстовым файлом. Закрываем чтение файла методом reader. close, сам файл закрываем методом in.close.

while ((line = reader. readLine ())≠ null) {.

Scanner scanner = new Scanner (line); scanner. useDelimiter (Pattern.compile (««)); scanner. useDelimiter (Pattern.compile («:»));//определяем символы, которые будут служить для разделения строк.

while (scanner.hasNext ()) {.

String question = scanner. next ();//первая часть разделенной строки — вопрос.

String answerLine = scanner. next ();//вторая часть разделенной строки — список ответов.

answerLine.trim ();

Scanner answersScanner = new Scanner (answerLine);

answersScanner.useDelimiter (Pattern.compile («;»));

List answers = new ArrayList ();

String correct = null; //из подстроки ответов выделяем одиночные ответы, разделенные;

while (answersScanner.hasNext ()) {.

String answer = answersScanner. next ();

if (answer.endsWith («!!!»)) {.

answer = answer. replaceAll («!», «»);

correct = answer;} //если ответ заканчивается на!!!, это правильный ответ.

answers.add (answer.trim ());}.

simpleTasks.add (new Task («» + i++, question, answers, correct. trim ()));}}//кладем вопрос в общий список Листинг 1 — Сканирование текстового файла Задачи класса TestItem:

  • 1. Хранение информации о действующем вопросе в игре и ответе, данном пользователем на этот вопрос. Данная задача была выполнена методом ввода строковых переменных task и answer, которые были объявлены в классе Task. Также в данном классе была применена аннотация @Override — она проверяет, переопределен ли метод и вызывает предупреждение компиляции, если метод не найден в классе.
  • 2. Проверка, правильный ли ответ дал пользователь. Задача была выполнена методом ввода оператора if-else. Если пользователь выбирает правильный ответ на вопрос, то игра продолжается, если ответ неправильный — игра прерывается.

Задачи класса TestManager:

  • 1. Ввод в приложение вариантов суммы выигрыша пользователя. В игру были добавлены суммы выигрыша, выводящиеся на экран пользователя в зависимости от количества вопросов, на которые пользователь ответил верно. Был добавлен массив prizeMapping. Также были введены вручную элементы массива, которым присвоено определенное значение. После пяти правильных ответов на вопросы пользователь получает несгораемую сумму. Она высчитывается путем деления на 5 и возвращается пользователю в случае дальнешего проигрыша с помощью оператора return.
  • 2. Формирование количества вопросов в игре. Для решения данной задачи была введена переменная Simple_quantity, которой было присвоено значение, равное количеству вопросов в игре. Всего в игре пользователь может ответить максимум на 10 вопросов, общее количество вопросов в базе — 47.
  • 3. Перемещение вопросов из текстового файла в менеджер игры. Были использованы функция simpleTasks, которая выбирает все вопросы из хранилища и addTasks, добавляюшая вопросы в менеджер программы. Также в данном классе используется функция Collections. shuffle, которая при каждом запуске программы выводит разные вопросы.
  • 4. Вывод вопросов на экран в случайном порядке. Для решения данной задачи использовался оператор rand.
  • 5. Смена вопросов в процессе работы приложения. Программа проверяет, правильный ли ответ дал пользователь. Если да, то выводит на экран следующий вопрос с помощью функции nextItem. Если текущий вопрос был последним, то возвращается значение null и пользователю выводится самая большая сумма выигрыша.

public boolean setAnswer (String answer) {.

if (currentIndex >= 0) {.

items.get (currentIndex).setAnswer (answer);

}.

return items. get (currentIndex).isRight ();

}//проверяем, верный ли ответ дал пользователь.

public TestItem nextItem () {//возвращаем следующий вопрос для вывода на экран.

if (currentIndex == items. size () — 1) {.

return null;} //если текущий вопрос был последним возвращаем null.

return items. get (++currentIndex);}.

Листинг 2 — Проверка ответа, данного пользователем.

6. Расчет выигрыша пользователя. Для расчета выигрыша использовались функции getSuccess и getPrize. При завершении игры пользователю выводится следующее сообщение: «Ваш выигрыш составил «+ getPrize () + «очков» .

Показать весь текст
Заполнить форму текущей работой