越来越容易混淆构造函数、方法、objects 和 class

Getting more confused with constructor, method, objects and class

我正在学习 Java 语言的构造函数和 object 以及方法。我了解 non-argument 和参数构造函数之间的区别,但我在代码中遇到了一个我似乎无法弄清楚的问题。

我正在编写用于捕获注册信息的代码。我创建了一个 class CompetitionEntry 并在 class 中插入了 2 个私有属性作为 private String projecTitle;private int teamSize; 以及一个 class 属性作为 double feePerParticipant = 6.50;初始值为 6.50 美元。

然后我创建一个 no-argument 构造函数,我将其初始化为 projectTitle = "N/A";teamSize = 0;。使用传入参数初始化属性的重载构造函数。

并且我为属性 teamSize 创建了 Mu​​tator 和 Accessor 方法,但我想确保它只有正值除外。最后,我创建 方法 调用 computeTeamFee() return 总费用 乘以 teamSizefeePerParticipant.

我希望我的代码从 computeTeamFee(); 方法获得团队总费用的输出,但我似乎找不到问题所在,我需要初始化 object(使用构造函数),标题 的值 "Super Tech" 团队规模为 5

而我只能从objects 方法更改值并显示输出。

请帮助我。越来越糊涂了

public class CompetitionEntry {

     private String projectTitle;
     private int teamSize;

     double feePerParticipant = 6.50;

     public CompetitionEntry () {

         this.projectTitle = "N/A";
         this.teamSize = 0;

      }

     public void setTeamSize(int teamSize) {

          //This part i not to sure how to read only positive value.
          if (this.teamSize <= 0) {

               System.out.println ("Negative value are not acceptable.")

          }
          else {

          this.teamSize = teamSize;

          }
     }

     public int getTeamSize() {
          return teamSize;
     }


     public double computeTeamFee() {

          double totalFee;
          totalFee = this.teamSize * feePerParticipant;

          return totalFee;

     }                  

     public static void main(String[] args) {

         CompetitionEntry obj = new CompetitionEntry ("Super Tech","5");  

         System.out.println("Title: " + obj.projectTitle);
         System.out.println("Team Size: " + obj.teamSize);


      } 
}
CompetitionEntry obj = new CompetitionEntry();
obj.setTeamSize(5);

System.out.println("Team Size: " + obj.teamSize);

您似乎没有收到任何用户输入,所以也许可以看看 https://www.w3schools.com/java/java_user_input.asp

此外,您的构造函数没有任何参数,因此您应该将构造函数更改为:

public CompetitionEntry ( String title,int teamSize) {
     this.projectTitle = title;
     this.teamSize = teamSize;
}

如果你不想要负值,你应该在创建对象之前进行检查,可能是这样的:

Scanner sc = new Scanner(System.in);
String title = sc.nextLine();
int x = sc.nextInt();
while(x<0){ 
    System.out.println("Enter a positive value: ");
    x=sc.nextInt();
}
CompetitionEntry obj = new CompetitionEntry (title,x);

当您创建 CompetitionEntry object 时,您将参数 "Super Tech" 和“5”作为输入。

CompetitionEntry obj = new CompetitionEntry ("Super Tech", 5);
//P.S You put "5" instead of 5 (remove the quotations for integer 
//values as its not a string) as shown above

obj 的这些输入参数("Super Tech" 和“5”)对应于构造函数的输入(标题和大小)

public CompetitionEntry (String title, int size) {
    this.projectTitle = title;
    this.teamSize = size;
}

然后构造函数将 projectTitle 和 teamSize 设置为等于进入构造函数的输入。

您的代码中还有其他一些错误,例如您的 setTeamSize 函数中 System.out.print 行缺少 semi-colon。