Skip to content

Commit 6567878

Browse files
committed
Edits made
1 parent 30477d3 commit 6567878

File tree

7 files changed

+119
-152
lines changed

7 files changed

+119
-152
lines changed

app/src/main/java/hexlet/code/App.java

Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -9,44 +9,42 @@
99
import java.util.Scanner;
1010

1111
public class App {
12-
13-
private static final int COUNT_LEVELS = 3;
14-
private static final int START_CLI = 1;
15-
private static final int START_EXIT = 0;
16-
private static final int START_EVEN = 2;
17-
private static final int START_CALC = 3;
18-
private static final int START_GCD = 4;
19-
private static final int START_PROGRESSION = 5;
20-
private static final int START_PRIME = 6;
2112
private static final String[] GAME_NAME = {"Exit", "Greet", "Even", "Calculator", "GCD", "Progression", "Prime"};
2213
public static void main(String[] args) {
2314

2415
App.printMenu();
2516
System.out.print("You choice: ");
17+
int choice = -1;
2618
Scanner choiceStream = new Scanner(System.in);
27-
int choice = choiceStream.nextInt();
19+
if (choiceStream.hasNextInt()) {
20+
choice = choiceStream.nextInt();
21+
}
22+
if (choice < 0 || choice >= GAME_NAME.length) {
23+
System.out.println("Incorrect input, try again!");
24+
return;
25+
}
2826

29-
switch (choice) {
30-
case START_CLI:
27+
switch (GAME_NAME[choice]) {
28+
case "Greet":
3129
Cli.greeting();
3230
break;
33-
case START_EXIT:
31+
case "Exit":
3432
System.out.println("Goodbye!");
3533
break;
36-
case START_EVEN:
37-
Even.start(COUNT_LEVELS);
34+
case "Even":
35+
Even.startGame();
3836
break;
39-
case START_CALC:
40-
Calc.start(COUNT_LEVELS);
37+
case "Calculator":
38+
Calc.startGame();
4139
break;
42-
case START_GCD:
43-
GCD.start(COUNT_LEVELS);
40+
case "GCD":
41+
GCD.startGame();
4442
break;
45-
case START_PROGRESSION:
46-
Progression.start(COUNT_LEVELS);
43+
case "Progression":
44+
Progression.startGame();
4745
break;
48-
case START_PRIME:
49-
Prime.start(COUNT_LEVELS);
46+
case "Prime":
47+
Prime.startGame();
5048
break;
5149
default:
5250
System.out.println("Incorrect input, try again!");

app/src/main/java/hexlet/code/Engine.java

Lines changed: 19 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55

66
public class Engine {
7+
private static final int NUMBER_OF_QUESTION = 0;
8+
private static final int NUMBER_OF_ANSWER = 1;
79

810
public static String greeting() {
911
System.out.println("Welcome to the Brain Games!");
@@ -17,9 +19,6 @@ private static String getUserInput() {
1719
Scanner inputStr = new Scanner(System.in);
1820
return inputStr.next().trim();
1921
}
20-
public static void winGame(String userName) {
21-
System.out.println("Congratulations, " + userName + "!");
22-
}
2322
public static void wrongAnswer(String userAnswer, String rightAnswer, String userName) {
2423
String wrongMassage = "'"
2524
+ userAnswer
@@ -35,27 +34,24 @@ public static void wrongAnswer(String userAnswer, String rightAnswer, String use
3534
System.out.println(restartMassage);
3635
}
3736

37+
public static void startLevels(String gameRule, String[][]date) {
38+
String userName = Engine.greeting();
39+
System.out.println(gameRule);
3840

39-
public static int randomIntValue(int leftBorder, int rightBorder) {
40-
return (int) (Math.random() * (rightBorder - leftBorder)) + leftBorder;
41-
}
42-
public static int randomIntValue() {
43-
final int left = 1;
44-
final int right = 26;
45-
return randomIntValue(left, right);
46-
}
47-
public static void printGameRules(String rule) {
48-
System.out.println(rule);
49-
}
50-
public static boolean isRightAnswer(String userAnswer, String rightAnswer) {
51-
return userAnswer.trim().equalsIgnoreCase(rightAnswer);
52-
}
53-
public static void askQuestion(String question) {
54-
System.out.println("Question: " + question);
55-
}
41+
for (String[] level : date) {
42+
String question = level[NUMBER_OF_QUESTION];
43+
String rightAnswer = level[NUMBER_OF_ANSWER];
5644

57-
public static String getAnswer() {
58-
System.out.print("Your answer: ");
59-
return Engine.getUserInput();
45+
System.out.println("Question: " + question);
46+
47+
System.out.print("Your answer: ");
48+
String userAnswer = Engine.getUserInput();
49+
if (!userAnswer.equalsIgnoreCase(rightAnswer)) {
50+
Engine.wrongAnswer(userAnswer, rightAnswer, userName);
51+
return;
52+
}
53+
System.out.println("Correct!");
54+
}
55+
System.out.println("Congratulations, " + userName + "!");
6056
}
6157
}

app/src/main/java/hexlet/code/games/Calc.java

Lines changed: 21 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -6,57 +6,39 @@ public class Calc {
66
private static final String[] SYMBOLS_OPERATION = {"+", "-", "*"};
77
private static final int MAX_NUMBER = 10;
88
private static final int MIN_NUMBER = 1;
9+
private static final int COUNT_LEVELS = 3;
910

10-
public static void start(int countLevels) {
11-
String userName = Engine.greeting();
12-
Engine.printGameRules(GAME_RULE);
13-
for (int i = 0; i < countLevels; i++) {
14-
int leftArgument = Engine.randomIntValue(MIN_NUMBER, MAX_NUMBER);
15-
int rightArgument = Engine.randomIntValue(MIN_NUMBER, MAX_NUMBER);
16-
int numberOfOperation = Engine.randomIntValue(0, SYMBOLS_OPERATION.length);
17-
18-
String question = leftArgument + " " + SYMBOLS_OPERATION[numberOfOperation] + " " + rightArgument;
19-
int rightAnswer = Calc.getRightAnswer(leftArgument, rightArgument, numberOfOperation);
20-
21-
Engine.askQuestion(question);
22-
String userAnswer = Engine.getAnswer();
23-
if (!Engine.isRightAnswer(userAnswer, Integer.toString(rightAnswer))) {
24-
Engine.wrongAnswer(userAnswer, Integer.toString(rightAnswer), userName);
25-
return;
11+
public static void startGame() {
12+
13+
String[][] result = new String[COUNT_LEVELS][2];
14+
for (int level = 0; level < result.length; level++) {
15+
for (int i = 0; i < result[level].length; i++) {
16+
int leftArgument = Utils.randomIntValue(MIN_NUMBER, MAX_NUMBER);
17+
int rightArgument = Utils.randomIntValue(MIN_NUMBER, MAX_NUMBER);
18+
int numberOfOperation = Utils.randomIntValue(0, SYMBOLS_OPERATION.length);
19+
20+
String question = leftArgument + " " + SYMBOLS_OPERATION[numberOfOperation] + " " + rightArgument;
21+
int rightAnswer = Calc.getRightAnswer(leftArgument, rightArgument, numberOfOperation);
22+
result[level][0] = question;
23+
result[level][1] = Integer.toString(rightAnswer);
2624
}
27-
System.out.println("Correct!");
2825
}
29-
Engine.winGame(userName);
26+
27+
Engine.startLevels(GAME_RULE, result);
3028
}
3129

3230

33-
private static int getRightAnswer(int leftArg, int rightArg, int numberOfOperation) {
34-
int result;
31+
private static Integer getRightAnswer(int leftArg, int rightArg, int numberOfOperation) {
3532
switch (SYMBOLS_OPERATION[numberOfOperation]) {
3633
case "+":
37-
result = plus(leftArg, rightArg);
38-
break;
34+
return leftArg + rightArg;
3935
case "-":
40-
result = minus(leftArg, rightArg);
41-
break;
36+
return leftArg - rightArg;
4237
case "*":
43-
result = multiplication(leftArg, rightArg);
44-
break;
38+
return leftArg * rightArg;
4539
default:
46-
System.out.println("Incorrect input!");
47-
result = -1;
48-
break;
40+
return null;
4941
}
50-
return result;
5142
}
5243

53-
private static int plus(int num1, int num2) {
54-
return num1 + num2;
55-
}
56-
private static int minus(int num1, int num2) {
57-
return num1 - num2;
58-
}
59-
private static int multiplication(int num1, int num2) {
60-
return num1 * num2;
61-
}
6244
}

app/src/main/java/hexlet/code/games/Even.java

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,20 @@
44

55
public class Even {
66
private static final String GAME_RULE = "Answer 'yes' if the number is even, otherwise answer 'no'.";
7+
private static final int COUNT_LEVELS = 3;
78

8-
public static void start(int countLevels) {
9-
String userName = Engine.greeting();
10-
Engine.printGameRules(GAME_RULE);
9+
public static void startGame() {
10+
String[][] levels = new String[COUNT_LEVELS][2];
11+
for (int level = 0; level < levels.length; level++) {
12+
for (int i = 0; i < levels[level].length; i++) {
1113

12-
for (int i = 0; i < countLevels; i++) {
13-
int question = Engine.randomIntValue();
14-
String rightAnswer = Even.isEven(question) ? "yes" : "no";
15-
16-
Engine.askQuestion(Integer.toString(question));
17-
String userAnswer = Engine.getAnswer();
18-
if (!Engine.isRightAnswer(userAnswer, rightAnswer)) {
19-
Engine.wrongAnswer(userAnswer, rightAnswer, userName);
20-
return;
14+
int question = Utils.randomIntValue();
15+
String rightAnswer = Even.isEven(question) ? "yes" : "no";
16+
levels[level][0] = Integer.toString(question);
17+
levels[level][1] = rightAnswer;
2118
}
22-
System.out.println("Correct!");
2319
}
24-
Engine.winGame(userName);
20+
Engine.startLevels(GAME_RULE, levels);
2521
}
2622

2723
private static boolean isEven(int num) {

app/src/main/java/hexlet/code/games/GCD.java

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,25 @@
44

55
public class GCD {
66
private static final String GAME_RULE = "Find the greatest common divisor of given numbers.";
7+
private static final int COUNT_LEVELS = 3;
78

8-
public static void start(int countLevels) {
9-
String userName = Engine.greeting();
10-
Engine.printGameRules(GAME_RULE);
11-
12-
for (int i = 0; i < countLevels; i++) {
13-
int leftArg = Engine.randomIntValue();
14-
int rightArg = Engine.randomIntValue();
15-
String question = leftArg + " " + rightArg;
16-
String rightAnswer = Integer.toString(GCD.getGCD(leftArg, rightArg));
17-
18-
Engine.askQuestion(question);
19-
String userAnswer = Engine.getAnswer();
20-
if (!Engine.isRightAnswer(userAnswer, rightAnswer)) {
21-
Engine.wrongAnswer(userAnswer, rightAnswer, userName);
22-
return;
9+
10+
public static void startGame() {
11+
12+
String[][] levels = new String[COUNT_LEVELS][2];
13+
for (int level = 0; level < levels.length; level++) {
14+
for (int i = 0; i < levels[level].length; i++) {
15+
int leftArgument = Utils.randomIntValue();
16+
int rightArgument = Utils.randomIntValue();
17+
18+
String question = leftArgument + " " + rightArgument;
19+
int rightAnswer = GCD.getGCD(leftArgument, rightArgument);
20+
levels[level][0] = question;
21+
levels[level][1] = Integer.toString(rightAnswer);
2322
}
24-
System.out.println("Correct!");
2523
}
26-
Engine.winGame(userName);
24+
25+
Engine.startLevels(GAME_RULE, levels);
2726
}
2827

2928
private static int getGCD(int firstNumber, int secondNumber) {

app/src/main/java/hexlet/code/games/Prime.java

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,24 @@
55
public class Prime {
66

77
private static final String GAME_RULE = "Answer 'yes' if given number is prime. Otherwise answer 'no'.";
8+
private static final int COUNT_LEVELS = 3;
89

9-
public static void start(int countLevels) {
10-
String userName = Engine.greeting();
11-
Engine.printGameRules(GAME_RULE);
1210

13-
for (int i = 0; i < countLevels; i++) {
14-
int question = Engine.randomIntValue();
15-
String rightAnswer = Prime.isPrimeNumber(question) ? "yes" : "no";
11+
public static void startGame() {
1612

17-
Engine.askQuestion(Integer.toString(question));
18-
String userAnswer = Engine.getAnswer();
19-
if (!Engine.isRightAnswer(userAnswer, rightAnswer)) {
20-
Engine.wrongAnswer(userAnswer, rightAnswer, userName);
21-
return;
13+
String[][] levels = new String[COUNT_LEVELS][2];
14+
for (int level = 0; level < levels.length; level++) {
15+
for (int i = 0; i < levels[level].length; i++) {
16+
17+
int question = Utils.randomIntValue();
18+
String rightAnswer = Prime.isPrimeNumber(question) ? "yes" : "no";
19+
20+
levels[level][0] = Integer.toString(question);
21+
levels[level][1] = rightAnswer;
2222
}
23-
System.out.println("Correct!");
2423
}
25-
Engine.winGame(userName);
24+
25+
Engine.startLevels(GAME_RULE, levels);
2626
}
2727
private static boolean isPrimeNumber(int num) {
2828
if (num == 1) {

app/src/main/java/hexlet/code/games/Progression.java

Lines changed: 19 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -9,31 +9,30 @@ public class Progression {
99
private static final int RIGHT_BORDER_OF_SIZE_PROGRESSION = 10;
1010
private static final int LEFT_BORDER_OF_STEP_PROGRESSION = 5;
1111
private static final int RIGHT_BORDER_OF_STEP_PROGRESSION = 10;
12+
private static final int COUNT_LEVELS = 3;
1213

14+
public static void startGame() {
1315

14-
public static void start(int countLevels) {
15-
String userName = Engine.greeting();
16-
Engine.printGameRules(GAME_RULE);
17-
for (int i = 0; i < countLevels; i++) {
18-
int[] progression = Progression.generateProgression();
19-
int positionOfWishingElement = Engine.randomIntValue(0, progression.length);
16+
String[][] levels = new String[COUNT_LEVELS][2];
17+
for (int level = 0; level < levels.length; level++) {
18+
for (int i = 0; i < levels[level].length; i++) {
19+
int sizeProgression = Utils.randomIntValue(LEFT_BORDER_OF_SIZE_PROGRESSION,
20+
RIGHT_BORDER_OF_SIZE_PROGRESSION);
21+
int stepOfProgression = Utils.randomIntValue(LEFT_BORDER_OF_STEP_PROGRESSION,
22+
RIGHT_BORDER_OF_STEP_PROGRESSION);
23+
int[] progression = Progression.generateProgression(sizeProgression, stepOfProgression);
24+
int positionOfWishingElement = Utils.randomIntValue(0, progression.length);
2025

2126

22-
String question = getQuestion(progression, positionOfWishingElement);
23-
int rightAnswer = progression[positionOfWishingElement];
24-
25-
Engine.askQuestion(question);
26-
String userAnswer = Engine.getAnswer();
27-
if (!Engine.isRightAnswer(userAnswer, Integer.toString(rightAnswer))) {
28-
Engine.wrongAnswer(userAnswer, Integer.toString(rightAnswer), userName);
29-
return;
27+
String question = getQuestion(progression, positionOfWishingElement);
28+
int rightAnswer = progression[positionOfWishingElement];
29+
levels[level][0] = question;
30+
levels[level][1] = Integer.toString(rightAnswer);
3031
}
31-
System.out.println("Correct!");
3232
}
33-
Engine.winGame(userName);
34-
}
35-
3633

34+
Engine.startLevels(GAME_RULE, levels);
35+
}
3736
private static String getQuestion(int[] progression, int positionOfWishingElement) {
3837
if (positionOfWishingElement < 0 || positionOfWishingElement > progression.length) {
3938
return null;
@@ -51,13 +50,10 @@ private static String getQuestion(int[] progression, int positionOfWishingElemen
5150
return result.toString().trim();
5251
}
5352

54-
private static int[] generateProgression() {
55-
int sizeProgression = Engine.randomIntValue(LEFT_BORDER_OF_SIZE_PROGRESSION, RIGHT_BORDER_OF_SIZE_PROGRESSION);
56-
int stepOfProgression = Engine.randomIntValue(LEFT_BORDER_OF_STEP_PROGRESSION,
57-
RIGHT_BORDER_OF_STEP_PROGRESSION);
53+
private static int[] generateProgression(int sizeProgression, int stepOfProgression) {
5854
int[] progression = new int[sizeProgression];
5955

60-
progression[0] = Engine.randomIntValue();
56+
progression[0] = Utils.randomIntValue();
6157
for (int i = 1; i < progression.length; i++) {
6258
progression[i] = progression[i - 1] + stepOfProgression;
6359
}

0 commit comments

Comments
 (0)