Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Main
- import java.util.Scanner;
- import java.io.*;
- final class inpData {
- public int numberOfPlayers;
- public int numberOut;
- public CircularLinkedList playerList;
- public inpData(int numberOfPlayers, int numberOut, CircularLinkedList playerList) {
- this.numberOfPlayers = numberOfPlayers;
- this.numberOut = numberOut;
- this.playerList = playerList;
- }
- }
- public class Main {
- private static final int MIN_PLAYERS = 3;
- private static final int MAX_PLAYERS = 10;
- private static final int MIN_VALUE = 1;
- //private static final int MAX_VALUE = 1;
- private static final Scanner scan = new Scanner(System.in);
- public static void outputTaskInfo() {
- System.out.println("Данная программа реализует игру: N ребят встали в круг." + "\n" +
- "Каждый раз, начиная с первого, из круга выводится каждый M-й." + "\n" +
- "Программа выводит номера в порядке выбывания и последнего оставшегося." + "\n" +
- "Диапазон ввода количества игроков: " + MIN_PLAYERS + "..." + MAX_PLAYERS + ". \n" +
- "Диапазон ввода номера выбывающего: " + MIN_VALUE + "..." + "(Номер последнего игркока)" + ".");
- }
- public static int getVerificationOfChoice() {
- int choice = 0;
- boolean isIncorrect;
- do {
- isIncorrect = false;
- try {
- choice = Integer.parseInt(scan.nextLine());
- } catch (NumberFormatException e) {
- System.out.println("Проверьте корректность ввода данных!");
- isIncorrect = true;
- }
- if (!isIncorrect && (choice != 0 && choice != 1)) {
- System.out.println("Для выбора введите 0 или 1!");
- isIncorrect = true;
- }
- } while (isIncorrect);
- return choice;
- }
- public static String inputPathToFile() {
- boolean isIncorrect;
- String path;
- System.out.println("Укажите путь к файлу: ");
- do {
- isIncorrect = false;
- path = scan.nextLine();
- File file = new File(path);
- if (!file.exists()) {
- System.out.println("По указанному пути файл не найден! Укажите правильный путь: ");
- isIncorrect = true;
- }
- } while (isIncorrect);
- return path;
- }
- public static int readNumberOfPlayersFromConsole() {
- int numberOfPlayers = 0;
- boolean isIncorrect;
- System.out.println("Введите значение количетва участников: ");
- do {
- isIncorrect = false;
- try {
- numberOfPlayers = Integer.parseInt(scan.nextLine());
- } catch (NumberFormatException e) {
- System.out.println("Проверьте корректность ввода данных!");
- isIncorrect = true;
- }
- if (!isIncorrect && (numberOfPlayers < MIN_PLAYERS || numberOfPlayers > MAX_PLAYERS)) {
- System.out.println("Введите число от " + MIN_PLAYERS + " до " + MAX_PLAYERS + "!");
- isIncorrect = true;
- }
- } while (isIncorrect);
- return numberOfPlayers;
- }
- public static int readNumberOfPlayersFromFile(final String path) {
- int numberOfPlayers;
- boolean isIncorrect = true;
- System.out.println("Происходит чтение количества участников...");
- try (BufferedReader br = new BufferedReader(new FileReader(path))) {
- numberOfPlayers = Integer.parseInt(br.readLine());
- } catch (Exception e) {
- isIncorrect = false;
- System.out.println("Ошибка при чтении данных! Введите количество участников с консоли!");
- numberOfPlayers = readNumberOfPlayersFromConsole();
- }
- return numberOfPlayers;
- }
- public static void outputNumberOfPlayers(final int choice, int numberOfPlayers, String path) {
- boolean isIncorrect;
- if (choice == 0)
- System.out.println("Количество игроков равно: " + numberOfPlayers + ".");
- if (choice == 1) {
- System.out.println("Вывод количества игроков в файл...");
- do {
- isIncorrect = false;
- try {
- FileWriter writer = new FileWriter(path);
- writer.write("Кол-во игроков: " + numberOfPlayers + "\n");
- writer.close();
- } catch (IOException e) {
- isIncorrect = true;
- System.out.println("Ошибка! Измените параметры файла или укажите новую ссылку!");
- path = inputPathToFile();
- }
- } while (isIncorrect);
- System.out.println("Данные успешно записаны в файл!");
- }
- }
- public static int readNumberOutFromConsole(int numberOfPlayers) {
- int numberOut = 0;
- boolean isIncorrect;
- System.out.println("Введите номер выбывающего участника: ");
- do {
- isIncorrect = false;
- try {
- numberOut = Integer.parseInt(scan.nextLine());
- } catch (NumberFormatException e) {
- System.out.println("Проверьте корректность ввода данных!");
- isIncorrect = true;
- }
- if (!isIncorrect && (numberOut < MIN_VALUE || numberOut > numberOfPlayers)) {
- System.out.println("Введите число от " + MIN_PLAYERS + " до " + numberOfPlayers + "!");
- isIncorrect = true;
- }
- } while (isIncorrect);
- return numberOut;
- }
- public static int readNumberOutFromFile(final String path) {
- int numberOut;
- boolean isIncorrect = true;
- System.out.println("Происходит чтение номера выбывающего...");
- try (BufferedReader br = new BufferedReader(new FileReader(path))) {
- br.readLine();
- numberOut = Integer.parseInt(br.readLine());
- } catch (Exception e) {
- isIncorrect = false;
- System.out.println("Ошибка при чтении данных! Введите количество участников с консоли!");
- numberOut = readNumberOfPlayersFromConsole();
- }
- return numberOut;
- }
- public static void outputNumberOut(final int choice, int numberOut, String path) {
- boolean isIncorrect;
- if (choice == 0)
- System.out.println("Номер выбывающего игрока: " + numberOut + ".");
- if (choice == 1) {
- System.out.println("Вывод номера выбывающего игрока в файл...");
- do {
- isIncorrect = false;
- try {
- FileWriter writer = new FileWriter(path, true);
- writer.write("Номер выбывающего игрока: " + numberOut + "\n");
- writer.close();
- } catch (IOException e) {
- isIncorrect = true;
- System.out.println("Ошибка! Измените параметры файла или укажите новую ссылку!");
- path = inputPathToFile();
- }
- } while (isIncorrect);
- System.out.println("Данные успешно записаны в файл!");
- }
- }
- public static CircularLinkedList createCircularLinkedList(final int numberOfPlayers) {
- CircularLinkedList cll = new CircularLinkedList();
- for (int i = 1; i <= numberOfPlayers; i++) {
- cll.addNode(i);
- }
- return cll;
- }
- public static void outputStartPlayerList(String path, final int choice, final CircularLinkedList playerList){
- boolean isIncorrect;
- Node currentNode = playerList.head;
- if (choice == 0) {
- System.out.println("Вывод начальной последовательности игроков: ");
- if (playerList.head != null) {
- do {
- System.out.print(currentNode.value + " ");
- currentNode = currentNode.nextNode;
- } while (currentNode != playerList.head);
- }
- System.out.print("\n");
- }
- if (choice == 1) {
- System.out.println("Вывод начальной последовательности игроков в файл...");
- do {
- isIncorrect = false;
- try {
- FileWriter writer = new FileWriter(path, true);
- BufferedWriter bufferWriter = new BufferedWriter(writer);
- bufferWriter.write("Начальная последовательноcть: ");
- if (playerList.head != null) {
- do {
- bufferWriter.write(currentNode.value + " ");
- currentNode = currentNode.nextNode;
- } while (currentNode != playerList.head);
- }
- bufferWriter.write("\n");
- bufferWriter.close();
- writer.close();
- } catch (IOException e) {
- isIncorrect = true;
- System.out.println("Ошибка! Измените параметры файла или укажите новую ссылку!");
- path = inputPathToFile();
- }
- } while (isIncorrect);
- System.out.println("Данные успешно записаны в файл!");
- }
- }
- public static int[] processGame(inpData data) {
- Node currentNode = data.playerList.head;
- int counter = 0;
- int[] ansArr = new int[data.numberOfPlayers];
- if (data.playerList.head != null) {
- do {
- int i = 0;
- while (i < data.numberOut - 1) {
- currentNode = currentNode.nextNode;
- i++;
- }
- ansArr[counter] = currentNode.value;
- counter++;
- data.playerList.deleteNode(currentNode.value);
- currentNode = currentNode.nextNode;
- } while (data.playerList.tail != data.playerList.head);
- }
- ansArr[counter] = currentNode.value;
- return ansArr;
- }
- public static void outputAnsArr(final int choice, String path, final int[] ansArr, final int numberOfPlayers) {
- boolean isIncorrect;
- if (choice == 0) {
- System.out.print("Вывод последовательсности выбывших: ");
- for (int i = 0; i < numberOfPlayers - 1; i++)
- {
- System.out.print(ansArr[i] + " ");
- }
- System.out.print("\nПоследний: " + ansArr[numberOfPlayers - 1]);
- }
- if (choice == 1) {
- System.out.println("Вывод последовательсности выбывших в файл...");
- do {
- isIncorrect = false;
- try {
- FileWriter writer = new FileWriter(path, true);
- BufferedWriter bufferWriter = new BufferedWriter(writer);
- bufferWriter.write("Выбывшие: ");
- for (int i = 0; i < numberOfPlayers - 1; i++)
- {
- bufferWriter.write(ansArr[i] + " ");
- }
- bufferWriter.write("\nПоследний: " + ansArr[numberOfPlayers - 1]);
- bufferWriter.close();
- writer.close();
- } catch (IOException e) {
- isIncorrect = true;
- System.out.println("Ошибка! Измените параметры файла или укажите новую ссылку!");
- path = inputPathToFile();
- }
- } while (isIncorrect);
- System.out.println("Данные успешно записаны в файл!");
- }
- }
- public static inpData processUserInput() {
- int numberOfPlayers = 0, numberOut = 0;
- CircularLinkedList playerList = null;
- int choiceForInput;
- String pathToIn;
- System.out.println("Вы желаете ввести данные с консоли(0) или взять данные из файла(1)?");
- choiceForInput = getVerificationOfChoice();
- if (choiceForInput == 0) {
- numberOfPlayers = readNumberOfPlayersFromConsole();
- numberOut = readNumberOutFromConsole(numberOfPlayers);
- playerList = createCircularLinkedList(numberOfPlayers);
- }
- if (choiceForInput == 1) {
- pathToIn = inputPathToFile();
- numberOfPlayers = readNumberOfPlayersFromFile(pathToIn);
- numberOut = readNumberOutFromFile(pathToIn);
- playerList = createCircularLinkedList(numberOfPlayers);
- }
- return new inpData(numberOfPlayers, numberOut, playerList);
- }
- public static void processUserOutput(inpData data) {
- int choiceForOutput;
- String pathToOut = "";
- int[] ansArr = new int[data.numberOfPlayers];
- System.out.println("Вы желаете получить результат в консоли(0) или в файле(1)?");
- choiceForOutput = getVerificationOfChoice();
- if (choiceForOutput == 1)
- pathToOut = inputPathToFile();
- outputNumberOfPlayers(choiceForOutput, data.numberOfPlayers, pathToOut);
- outputNumberOut(choiceForOutput, data.numberOut, pathToOut);
- outputStartPlayerList(pathToOut, choiceForOutput, data.playerList);
- ansArr = processGame(data);
- outputAnsArr (choiceForOutput, pathToOut, ansArr, data.numberOfPlayers);
- }
- public static void main (String[] args) {
- outputTaskInfo();
- inpData data = processUserInput();
- processUserOutput(data);
- scan.close();
- }
- }
- //CircularLinkedList
- public class CircularLinkedList {
- public Node head = null;
- public Node tail = null;
- public void addNode(int value) {
- Node newNode = new Node(value);
- if (head == null) {
- head = newNode;
- } else {
- tail.nextNode = newNode;
- }
- tail = newNode;
- tail.nextNode = head;
- }
- public void deleteNode(int valueToDelete) {
- Node currentNode = head;
- if (head == null) {
- return;
- }
- do {
- Node nextNode = currentNode.nextNode;
- if (nextNode.value == valueToDelete) {
- if (tail == head) {
- head = null;
- tail = null;
- } else {
- currentNode.nextNode = nextNode.nextNode;
- if (head == nextNode) {
- head = head.nextNode;
- }
- if (tail == nextNode) {
- tail = currentNode;
- }
- }
- break;
- }
- currentNode = nextNode;
- } while (currentNode != head);
- }
- }
- //Node
- class Node {
- int value;
- Node nextNode;
- public Node(int value) {
- this.value = value;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement