Skip to content

Commit 9135b99

Browse files
committed
added 3 methods for all games
1 parent 9c9d96d commit 9135b99

File tree

8 files changed

+157
-118
lines changed

8 files changed

+157
-118
lines changed

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,15 @@ public static void main(String[] args) {
3030

3131
case "0" -> Cli.sayGoodbye();
3232

33-
case "2" -> Even.even();
33+
case "2" -> Even.transferDataToEngine();
3434

35-
case "3" -> Calc.calc();
35+
case "3" -> Calc.transferDataToEngine();
3636

37-
case "4" -> Gcd.gcd();
37+
case "4" -> Gcd.transferDataToEngine();
3838

39-
case "5" -> Progression.progression();
39+
case "5" -> Progression.transferDataToEngine();
4040

41-
case "6" -> Prime.prime();
41+
case "6" -> Prime.transferDataToEngine();
4242

4343
default -> System.out.println("Invalid choice, please try again.");
4444

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
public class Engine {
66
public static final int ROUNDS = 10;
77

8-
public static void skeletonOfGames(String mainGameQuestion,String[][] eachRound) {
8+
public static void skeletonOfGames(String mainGameQuestion, String[][] rounds) {
99

1010
Scanner scanner = new Scanner(System.in);
1111
System.out.println("""
@@ -17,16 +17,20 @@ public static void skeletonOfGames(String mainGameQuestion,String[][] eachRound)
1717
System.out.println(mainGameQuestion);
1818

1919
for (var i = 0; i < ROUNDS; i++) {
20-
System.out.println("Question: " + eachRound[i][0]);
20+
21+
String question = rounds[i][0];
22+
String correctAnswer = rounds[i][1];
23+
24+
System.out.println("Question: " + question);
2125
System.out.println("Your answer: ");
2226
String userAnswer = scanner.nextLine();
2327

24-
if (userAnswer.equals(eachRound[i][1])) {
28+
if (userAnswer.equals(correctAnswer)) {
2529
System.out.println("Correct!");
2630

2731
} else {
2832
System.out.println("'" + userAnswer + "'" + "is wrong answer ;(. "
29-
+ "Correct answer was " + "'" + eachRound[i][1] + "'" + ". \n"
33+
+ "Correct answer was " + "'" + correctAnswer + "'" + ". \n"
3034
+ "Let's try again, "
3135
+ name
3236
+ "!");

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import java.util.Random;
44

55
public class Utils {
6-
public static int getRandomInt (int maxRandomNumber) {
6+
public static int getRandomInt(int maxRandomNumber) {
77
Random random = new Random();
88
int number = random.nextInt(maxRandomNumber) + 1;
99

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

Lines changed: 38 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -8,40 +8,49 @@
88
import java.util.Random;
99

1010
public class Calc {
11-
public static void calc() {
1211

13-
String mainGameQuestion = "What is the result of the expression?";
12+
private static final int MAX_RANDOM_NUMBER1 = 19;
13+
private static final int MAX_RANDOM_NUMBER2 = 9;
14+
15+
public static String[] dataForGame() {
16+
int randomNumber1 = Utils.getRandomInt(MAX_RANDOM_NUMBER1);
17+
int randomNumber2 = Utils.getRandomInt(MAX_RANDOM_NUMBER2);
18+
19+
String plus = randomNumber1 + " + " + randomNumber2;
20+
String minus = randomNumber1 + " - " + randomNumber2;
21+
String mult = randomNumber1 + " * " + randomNumber2;
22+
23+
List<String> randomExpression = Arrays.asList(plus, minus, mult);
24+
Random rand = new Random();
25+
26+
String question = randomExpression.get(rand.nextInt(randomExpression.size()));
27+
String correctAnswer;
28+
29+
if (question.equals(plus)) {
30+
correctAnswer = String.valueOf(randomNumber1 + randomNumber2);
31+
} else if (question.equals(minus)) {
32+
correctAnswer = String.valueOf(randomNumber1 - randomNumber2);
33+
} else {
34+
correctAnswer = String.valueOf(randomNumber1 * randomNumber2);
35+
}
36+
return new String[]{question, correctAnswer};
37+
}
38+
39+
40+
public static String[][] prepareDataForEngine() {
1441

1542
String[][] eachRound = new String[Engine.ROUNDS][2];
1643

1744
for (var i = 0; i < Engine.ROUNDS; i++) {
18-
final int maxRandomNumber1 = 19;
19-
final int maxRandomNumber2 = 9;
20-
21-
int randomNumber1 = Utils.getRandomInt(maxRandomNumber1);
22-
int randomNumber2 = Utils.getRandomInt(maxRandomNumber2);
23-
24-
String plus = randomNumber1 + " + " + randomNumber2;
25-
String minus = randomNumber1 + " - " + randomNumber2;
26-
String mult = randomNumber1 + " * " + randomNumber2;
27-
28-
List<String> randomExpression = Arrays.asList(plus, minus, mult);
29-
Random rand = new Random();
30-
31-
String question = randomExpression.get(rand.nextInt(randomExpression.size()));
32-
String correctAnswer;
33-
34-
if (question.equals(plus)) {
35-
correctAnswer = String.valueOf(randomNumber1 + randomNumber2);
36-
} else if (question.equals(minus)) {
37-
correctAnswer = String.valueOf(randomNumber1 - randomNumber2);
38-
} else {
39-
correctAnswer = String.valueOf(randomNumber1 * randomNumber2);
40-
}
41-
eachRound[i][0] = question;
42-
eachRound[i][1] = correctAnswer;
45+
eachRound[i] = dataForGame();
4346
}
44-
Engine.skeletonOfGames(mainGameQuestion, eachRound);
45-
//return 0;
47+
return eachRound;
48+
}
49+
50+
51+
public static void transferDataToEngine() {
52+
String mainGameQuestion = "What is the result of the expression?";
53+
String[][] rounds = prepareDataForEngine();
54+
Engine.skeletonOfGames(mainGameQuestion, rounds);
4655
}
4756
}

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

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,33 @@
44
import hexlet.code.Utils;
55

66
public class Even {
7-
public static void even() {
87

9-
String mainGameQuestion = "Answer 'yes' if the number is even, otherwise answer 'no'.";
8+
private static final int MAX_RANDOM_NUMBER = 99;
109

11-
String[][] eachRound = new String[Engine.ROUNDS][2];
10+
public static String[] dataForGame() {
1211

13-
for (int i = 0; i < Engine.ROUNDS; i++) {
12+
int randomNumber = Utils.getRandomInt(MAX_RANDOM_NUMBER);
1413

15-
final int maxRandomNumber = 99;
16-
int randomNumber = Utils.getRandomInt(maxRandomNumber);
14+
String question = Integer.toString(randomNumber);
15+
String correctAnswer = (randomNumber % 2 == 0) ? "yes" : "no";
16+
17+
return new String[]{question, correctAnswer};
18+
}
1719

18-
String question = Integer.toString(randomNumber);
19-
String correctAnswer = (randomNumber % 2 == 0) ? "yes" : "no";
2020

21-
eachRound[i][0] = question;
22-
eachRound[i][1] = correctAnswer;
21+
public static String[][] prepareDataForEngine() {
2322

23+
String[][] eachRound = new String[Engine.ROUNDS][2];
24+
25+
for (int i = 0; i < Engine.ROUNDS; i++) {
26+
eachRound[i] = dataForGame();
2427
}
25-
Engine.skeletonOfGames(mainGameQuestion, eachRound);
26-
//return 0;
28+
return eachRound;
29+
}
30+
31+
public static void transferDataToEngine() {
32+
String mainGameQuestion = "Answer 'yes' if the number is even, otherwise answer 'no'.";
33+
String[][] rounds = prepareDataForEngine();
34+
Engine.skeletonOfGames(mainGameQuestion, rounds);
2735
}
2836
}

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

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,37 +4,42 @@
44
import hexlet.code.Utils;
55

66
import java.math.BigInteger;
7-
import java.util.Random;
8-
97

108
public class Gcd {
11-
public static void gcd() {
129

13-
String mainGameQuestion = "Find the greatest common divisor of given numbers.";
10+
private static final int MAX_RANDOM_COMMON = 10;
11+
private static final int MAX_RANDOM_NUMBER = 10;
1412

15-
String[][] eachRound = new String[Engine.ROUNDS][2];
13+
public static String[] dataForGame() {
14+
int randomCommon = Utils.getRandomInt(MAX_RANDOM_COMMON) + 1;
15+
int randomNumber1 = randomCommon * (Utils.getRandomInt(MAX_RANDOM_COMMON));
16+
int randomNumber2 = randomCommon * (Utils.getRandomInt(MAX_RANDOM_NUMBER));
1617

17-
for (var i = 0; i < Engine.ROUNDS; i++) {
18+
BigInteger bigA = BigInteger.valueOf(randomNumber1);
19+
BigInteger bigB = BigInteger.valueOf(randomNumber2);
1820

19-
final int maxrandomCommon = 10;
20-
final int maxRandomNumber = 10;
21+
String gcd = String.valueOf((bigA).gcd(bigB));
2122

22-
int randomCommon = Utils.getRandomInt(maxrandomCommon) + 1;
23-
int randomNumber1 = randomCommon * (Utils.getRandomInt(maxRandomNumber));
24-
int randomNumber2 = randomCommon * (Utils.getRandomInt(maxRandomNumber));
23+
String question = randomNumber1 + " " + randomNumber2;
24+
String correctAnswer = gcd;
2525

26-
BigInteger bigA = BigInteger.valueOf(randomNumber1);
27-
BigInteger bigB = BigInteger.valueOf(randomNumber2);
26+
return new String[]{question, correctAnswer};
27+
}
2828

29-
String gcd = String.valueOf((bigA).gcd(bigB));
3029

31-
String question = randomNumber1 + " " + randomNumber2;
32-
String correctAnswer = gcd;
30+
public static String[][] prepareDataForEngine() {
3331

34-
eachRound[i][0] = question;
35-
eachRound[i][1] = correctAnswer;
32+
String[][] eachRound = new String[Engine.ROUNDS][2];
33+
34+
for (var i = 0; i < Engine.ROUNDS; i++) {
35+
eachRound[i] = dataForGame();
3636
}
37-
Engine.skeletonOfGames(mainGameQuestion, eachRound);
38-
//return 0;
37+
return eachRound;
38+
}
39+
40+
public static void transferDataToEngine() {
41+
String mainGameQuestion = "Find the greatest common divisor of given numbers.";
42+
String[][] rounds = prepareDataForEngine();
43+
Engine.skeletonOfGames(mainGameQuestion, rounds);
3944
}
4045
}

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

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,35 +4,41 @@
44
import hexlet.code.Utils;
55

66
public class Prime {
7-
public static void prime() {
87

9-
String mainGameQuestion = "Answer 'yes' if given number is prime. Otherwise answer 'no'.";
8+
private static final int MAX_RANDOM_NUMBER = 20;
109

11-
String[][] eachRound = new String[Engine.ROUNDS][2];
10+
public static String[] dataForGame() {
1211

13-
for (var i = 0; i < Engine.ROUNDS; i++) {
12+
int randomNumber = Utils.getRandomInt(MAX_RANDOM_NUMBER) + 1;
13+
String question = Integer.toString(randomNumber);
1414

15-
final int maxRandomNumber = 20;
15+
boolean isPrime = true;
1616

17-
int randomNumber = Utils.getRandomInt(maxRandomNumber) + 1;
18-
String question = Integer.toString(randomNumber);
17+
for (int j = 2; j <= (randomNumber - 1); j++) {
18+
if (randomNumber % j == 0) {
19+
isPrime = false;
20+
break;
21+
}
22+
isPrime = true;
23+
}
24+
String correctAnswer = isPrime ? "yes" : "no";
1925

20-
boolean isPrime = true;
26+
return new String[]{question, correctAnswer};
27+
}
2128

22-
for (int j = 2; j <= (randomNumber - 1); j++) {
23-
if (randomNumber % j == 0) {
24-
isPrime = false;
25-
break;
26-
}
27-
isPrime = true;
29+
public static String[][] prepareDataForEngine() {
2830

29-
}
30-
String correctAnswer = isPrime ? "yes" : "no";
31+
String[][] eachRound = new String[Engine.ROUNDS][2];
3132

32-
eachRound[i][0] = question;
33-
eachRound[i][1] = correctAnswer;
33+
for (var i = 0; i < Engine.ROUNDS; i++) {
34+
eachRound[i] = dataForGame();
3435
}
35-
Engine.skeletonOfGames(mainGameQuestion, eachRound);
36-
//return 0;
36+
return eachRound;
37+
}
38+
39+
public static void transferDataToEngine() {
40+
String mainGameQuestion = "Answer 'yes' if given number is prime. Otherwise answer 'no'.";
41+
String[][] rounds = prepareDataForEngine();
42+
Engine.skeletonOfGames(mainGameQuestion, rounds);
3743
}
3844
}

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

Lines changed: 34 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -6,44 +6,51 @@
66
import java.util.Arrays;
77

88
public class Progression {
9-
public static void progression() {
109

11-
String mainGameQuestion = "What number is missing in the progression?";
10+
private static final int MIN_ARRAY_LENGTH = 5;
11+
private static final int MAX_STEP = 9;
12+
private static final int MAX_START_VALUE = 14;
1213

13-
String[][] eachRound = new String[Engine.ROUNDS][2];
14+
public static String[] dataForGame() {
1415

15-
for (var i = 0; i < Engine.ROUNDS; i++) {
16+
int arrayLength = Utils.getRandomInt(MIN_ARRAY_LENGTH) + MIN_ARRAY_LENGTH;
17+
int[] array = new int[arrayLength];
1618

17-
final int minArrayLength = 5;
18-
final int maxStep = 9;
19-
final int maxStartValue = 14;
19+
int step = Utils.getRandomInt(MAX_STEP);
20+
int start = Utils.getRandomInt(MAX_START_VALUE);
2021

21-
int arrayLength = Utils.getRandomInt(minArrayLength) + minArrayLength;
22-
int[] array = new int[arrayLength];
22+
for (int j = 0; j < arrayLength; j++) {
23+
array[j] = start + j * step;
24+
}
2325

24-
int step = Utils.getRandomInt(maxStep);
25-
int start = Utils.getRandomInt(maxStartValue);
26+
int indexFromArray = Utils.getRandomInt(MIN_ARRAY_LENGTH - 1);
2627

27-
for (int j = 0; j < arrayLength; j++) {
28-
array[j] = start + j * step;
29-
}
28+
String arrayToString = Arrays.toString(array);
29+
String elementToHide = String.valueOf(array[indexFromArray]);
30+
String oneElement = "\\b" + elementToHide + "\\b";
31+
String arrayHideNumber = arrayToString.replaceFirst(oneElement, "..");
32+
arrayHideNumber = arrayHideNumber.replace("[", "").replace("]", "")
33+
.replace(",", "");
3034

31-
int indexFromArray = Utils.getRandomInt(minArrayLength - 1);
35+
String question = arrayHideNumber;
36+
String correctAnswer = String.valueOf(array[indexFromArray]);
3237

33-
String arrayToString = Arrays.toString(array);
34-
String elementToHide = String.valueOf(array[indexFromArray]);
35-
String oneElement = "\\b" + elementToHide + "\\b";
36-
String arrayHideNumber = arrayToString.replaceFirst(oneElement, "..");
37-
arrayHideNumber = arrayHideNumber.replace("[", "").replace("]", "")
38-
.replace(",", "");
38+
return new String[]{question, correctAnswer};
39+
}
3940

40-
String question = arrayHideNumber;
41-
String correctAnswer = String.valueOf(array[indexFromArray]);
41+
public static String[][] prepareDataForEngine() {
4242

43-
eachRound[i][0] = question;
44-
eachRound[i][1] = correctAnswer;
43+
String[][] eachRound = new String[Engine.ROUNDS][2];
44+
45+
for (var i = 0; i < Engine.ROUNDS; i++) {
46+
eachRound[i] = dataForGame();
4547
}
46-
Engine.skeletonOfGames(mainGameQuestion, eachRound);
47-
//return 0;
48+
return eachRound;
49+
}
50+
51+
public static void transferDataToEngine() {
52+
String mainGameQuestion = "What number is missing in the progression?";
53+
String[][] rounds = prepareDataForEngine();
54+
Engine.skeletonOfGames(mainGameQuestion, rounds);
4855
}
4956
}

0 commit comments

Comments
 (0)