Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсавая Пояснительная Записка.docx
Скачиваний:
11
Добавлен:
01.07.2025
Размер:
214.07 Кб
Скачать

A.2 Модуль тестирования MultiplyGameTest

package multiplyGame;

import junit.framework.*;

public class MultiplyGameTest extends TestCase {

public void testGetWinner() {

assertEquals(MultiplyGame.getWinner(-15), -1);

// метод должен вернуть ошибку

assertEquals(MultiplyGame.getWinner(1), -1);

// метод должен вернуть ошибку

assertEquals(MultiplyGame.getWinner(4294967296L), -1);

// метод должен вернуть ошибку

assertEquals(MultiplyGame.getWinner(162), 0);

// должен победить игрок 0 (Слава)

assertEquals(MultiplyGame.getWinner(17), 1);

// должен победить игрок 1 (Оля)

assertEquals(MultiplyGame.getWinner(34012226), 0);

// должен победить игрок 0 (Слава)

assertEquals(MultiplyGame.getWinner(81934), 1);

// должен победить игрок 1 (Оля)

}

}

A.3 Модуль MultiplyGameFile (ввод-вывод из файла)

package multiplyGame;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.FileReader;

import java.io.PrintWriter;

import java.util.Scanner;

public class MultiplyGameFile {

static final long rangeMin = 2, rangeMax = 4294967295L;

// допустимые пределы числа N

static final String[] players = new String[] {"Stan", "Ollie"};

// имена игроков

static final byte[] dividers = new byte[] {9, 2};

// делители для нахождения выигрышных и проигрышных интервалов

public static void main(String[] args) {

long N;

N = 0;

File fl = new File("Input.txt");

// проверяем, существует ли файл

if (fl.exists() && fl.isFile()){

try{

FileReader fin = new FileReader ("Input.txt");

Scanner in = new Scanner(fin);

while (in.hasNext()){

// пока не прочтем весь файл

String str = in.next();

// считываем очередную строку в str

N = Long.parseLong(str);

System.out.println("N = "+N+" (Loaded from file).");

System.out.print(players[getWinner(N)]);

// вызов метода getWinner() и вывод имени победителя

System.out.println(" wins");

}

in.close();

}

catch (Exception e) {

System.out.println("Wrong number!");

// вывод сообщения об ошибке

}

}

// запись информации о победителе в файл

PrintWriter pr = null;

try

{

pr = new PrintWriter(new FileOutputStream("Output.txt"));

}

catch(FileNotFoundException e)

{

System.out.println("Ошибка открытия файла Output.txt");

System.exit(0);

}

Scanner in = new Scanner(System.in);

pr.println(in.nextLine());

in.close();

pr.close();

}

// метод определения победителя игры (-1 - неверно заданное число, 0 - Слава, 1 - Оля)

public static int getWinner(long N) {

if (N < rangeMin || N > rangeMax) return -1;

// проверка на допустимые пределы числа

int winner = 1; // индекс победившего игрока (0 - Слава, 1 - Оля)

long minPos = N; // нижняя граница выигрышного или проигрышного интервала

do {

winner = (winner == 1 ? 0 : 1); // инверсия индекса победителя

// находим нижнюю границу следующего выигрышного или проигрышного интервала

minPos = (long) Math.ceil((double) minPos / dividers[winner]);

// деление и округление вверх

} while (minPos > 1); // пока нижняя граница не станет равна 1

return winner;

}

}