Skip to content

Main#2023

Open
whereisalemon-lab wants to merge 6 commits intomate-academy:masterfrom
whereisalemon-lab:main
Open

Main#2023
whereisalemon-lab wants to merge 6 commits intomate-academy:masterfrom
whereisalemon-lab:main

Conversation

@whereisalemon-lab
Copy link

No description provided.

Copy link

@mateacademy-ai-mentor mateacademy-ai-mentor left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Summary

Good job on implementing the core logic for the lottery! However, a few changes are needed because there is a critical issue that prevents the code from compiling, along with several violations of the project's checklist.

The main problem is that the Main class is declared as public inside Lottery.java. In Java, a file can only contain one top-level public class, and its name must match the filename. This causes a compilation error.

Additionally, please address these checklist violations:

  • The Color enum and the ColorSupplier, Ball, and Lottery classes are missing required access modifiers. [CHECKLIST ITEM #7]
  • The number 3 used in the for loop is a magic number and should be a named constant. [CHECKLIST ITEM #9]
  • The getRandomBall() method uses temporary variables instead of returning the new Ball object directly. [CHECKLIST ITEM #2]

Once you fix these issues, your solution will be ready!


✨ Please rate this review in the Platform's notification center1. I will be grateful for your feedback! ✨

Important

Fix the issues, commit the changes, and then re-request my review using the Re-request review button2 in the Reviewers tab.

Tip

If you have any comments about this review, please leave a message in the Add a comment section below and mention me with the @mateacademy-ai-mentor tag3.
I will read your message during my next review of your pull request. Please do not reply directly to my comments, as that feature is not supported yet.

Caution

Do not close the pull request until the review is complete. Closing it early can lead to unexpected behavior and disrupt the review process.

Footnotes

  1. Rate AI review example

  2. Re-request AI review example

  3. Add AI review comments example

Lottery.java Outdated
@@ -0,0 +1,55 @@
import java.util.Random;
enum Color {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This violates checklist item #7: 'Classes, fields, constructors, methods must have access modifiers'. Please add an explicit access modifier to this enum, for example public.

Lottery.java Outdated
GREEN, BLUE, PURPLE, WHITE, BLACK, YELLOW, ORANGE
}

class ColorSupplier {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This violates checklist item #7: 'Classes, fields, constructors, methods must have access modifiers'. Please add an explicit access modifier to this class.

Lottery.java Outdated
}
}

class Ball {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This violates checklist item #7: 'Classes, fields, constructors, methods must have access modifiers'. Please add an explicit access modifier to this class.

Lottery.java Outdated

}

class Lottery {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This violates checklist item #7: 'Classes, fields, constructors, methods must have access modifiers'. As the file is named Lottery.java, this class should be declared as public.

Lottery.java Outdated
Comment on lines +37 to +40
String color = colorSupplier.getRandomColor();

int number = random.nextInt(MAX_NUMBER + 1);
return new Ball(color, number);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This violates checklist item #2: 'Don't create temporary variables if you can directly return value from the method'. The values for color and number can be generated directly within the new Ball(...) constructor call and returned in a single statement.

Lottery.java Outdated
}

}
public class Main {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A Java source file can have at most one top-level public class, and its name must match the filename. Since this file is named Lottery.java, the Main class cannot be declared as public here.

Lottery.java Outdated

System.out.println("Drawing 3 balls");

for (int i = 1; i <= 3; i++) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This violates checklist item #9: 'All magic numbers in your code should be constants'. The number 3 here is a magic number. It's better to declare it as a named constant, for example, private static final int BALLS_TO_DRAW = 3;.

Copy link

@mateacademy-ai-mentor mateacademy-ai-mentor left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Summary

I am requesting changes because there are a couple of critical structural issues that prevent your code from compiling. It's great that you've fixed the previous issues like adding constants and access modifiers!

However, the code currently has two main problems:

  1. Compilation Error: The public class name LotterySystem does not match the filename Lottery.java. In Java, a file can only have one public class, and its name must exactly match the file's name.
  2. Incorrect Structure: All classes (Lottery, Ball, ColorSupplier) and the Color enum are nested as static members inside a single file. The intended design is to have each of these in its own separate file (e.g., Ball.java, Lottery.java, Color.java).

Please address these by moving each class and enum to its own file and ensuring the public class name matches the filename. You're very close to a great solution!


✨ Please rate this review in the Platform's notification center1. I will be grateful for your feedback! ✨

Important

Fix the issues, commit the changes, and then re-request my review using the Re-request review button2 in the Reviewers tab.

Tip

If you have any comments about this review, please leave a message in the Add a comment section below and mention me with the @mateacademy-ai-mentor tag3.
I will read your message during my next review of your pull request. Please do not reply directly to my comments, as that feature is not supported yet.

Caution

Do not close the pull request until the review is complete. Closing it early can lead to unexpected behavior and disrupt the review process.

Footnotes

  1. Rate AI review example

  2. Re-request AI review example

  3. Add AI review comments example

Lottery.java Outdated
@@ -0,0 +1,54 @@
import java.util.Random;

public class LotterySystem {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The public class name LotterySystem must match the filename Lottery.java to avoid a compilation error. The intended structure for this task is to have each class (Lottery, Ball, ColorSupplier, etc.) and the enum in their own separate .java files.

GREEN, BLUE, PURPLE, WHITE, BLACK, YELLOW, ORANGE
}

public static class ColorSupplier {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This violates checklist item #3: 'Don't use static methods in your solution'. While the methods inside are not static (which is correct), the class itself should not be static. The classes ColorSupplier, Ball, and Lottery should be regular top-level classes, each in its own file.

Copy link

@mateacademy-ai-mentor mateacademy-ai-mentor left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Summary

I am approving this solution as an educational override to help you progress, but it's important to address the structural feedback from the previous review. Great job fixing the filename to match the public class name!

The main issue remains the file structure. In Java, each public class and enum should be in its own separate file (e.g., Ball.java, Color.java). Currently, Color, ColorSupplier, and Ball are all nested inside Lottery.java. Separating them is a fundamental convention that makes code much easier to read and maintain.

Also, the nested Lottery class inside the main Lottery class is very confusing. Its logic should be merged into the main public class Lottery. Correcting these points will also resolve the improper use of static for these classes. Keep up the great work, and focus on applying this structural feedback in your next tasks!


✨ Please rate this review in the Platform's notification center1. I will be grateful for your feedback! ✨

Footnotes

  1. Rate AI review example

Comment on lines +5 to +41
public enum Color {
GREEN, BLUE, PURPLE, WHITE, BLACK, YELLOW, ORANGE
}

public static class ColorSupplier {
private final Random random = new Random();

public String getRandomColor() {
Color[] colors = Color.values();
return colors[random.nextInt(colors.length)].name();
}
}

public static class Ball {
private final String color;
private final int number;

public Ball(String color, int number) {
this.color = color;
this.number = number;
}

@Override
public String toString() {
return "Ball: " + color + ", number: " + number;
}
}

public static class Lottery {
private final ColorSupplier colorSupplier = new ColorSupplier();
private final Random random = new Random();
private static final int MAX_NUMBER = 100;

public Ball getRandomBall() {
return new Ball(colorSupplier.getRandomColor(), random.nextInt(MAX_NUMBER + 1));
}
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As mentioned in the previous review, the Color enum, and the ColorSupplier, Ball, and inner Lottery classes should each be in their own separate .java file. It's a standard Java convention to have one top-level public type per file. This nested structure makes the code hard to read and maintain. This also relates to checklist item #3 ('Don't use static methods'), as moving these classes to their own files will mean they no longer need to be static.

}
}

public static class Lottery {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This nested class has the same name as its outer class (Lottery), which is a major source of confusion. The logic and fields from this class (lines 34-40) should be part of the main public class Lottery defined on line 3. After moving the logic, this nested class should be removed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants