【问题标题】:Is there a way i can add multiple variables to one object?有没有办法可以将多个变量添加到一个对象?
【发布时间】:2019-08-18 10:13:42
【问题描述】:

所以我得到了下面的方法,我不能改变它。我需要的是使用下面的变量创建几个对象,但不断出现错误,提示“构造函数菜单(int,String,String)未定义。”我做错了吗?

      import java.util.Scanner;
      import java.util.*;

      public class menu {

private static void addNewStudent() 
         {
Scanner scanner = new Scanner(System.in);
     System.out.println("Please enter the correct details below");
     System.out.println("ID: "); 
     int userId = scanner.nextInt(); 

     System.out.println("First name: ");
     String userFirst = scanner.next();

     System.out.println("Last name: ");
     String userLast = scanner.next();

     System.out.println("English assignment 1 mark: ");
     int english1 = scanner.nextInt();

     System.out.println("English assignment 2 mark: ");
int english2 = scanner.nextInt();

     System.out.println("English assignment 3 mark: ");
     int english3 = scanner.nextInt();

     System.out.println("Math assignment 1 mark: ");
     int math1 = scanner.nextInt();

     System.out.println("Math assignment 2 mark: ");
     int math2 = scanner.nextInt();;

     System.out.println("Math assignment 3 mark: ");
     int math3 = scanner.nextInt();

     menu userStudentObj = new menu(userId, userFirst, userLast);
     menu userEnglishObj = new menu(english1, english2, english3);
     menu userMathObj = new menu(math1, math2, math3);


// Asks the user for the student information (ID, First, Last, Assignments)
// Then creates the appropriate objects and adds the students to the student list

如果有意义的话,我希望创建 3 个包含用户输入变量的新对象。

【问题讨论】:

  • 能否请您添加您的对象类代码?
  • 构造函数 menu(int, String, String) 未定义 表示您的对象类没有与此构造函数参数匹配的构造函数。所以你需要创建一个具有相同参数的构造函数。
  • 所以没有办法不改变构造函数?我必须添加所需的参数吗?
  • 试试下面的东西。我建议您阅读类设计以及它如何提高性能、代码质量并帮助提供与对象更好的交互。

标签: java object methods


【解决方案1】:

主要问题是您没有指定任何非默认构造函数来创建对象,因此如果没有为此指定对象,编译器不知道您要创建什么。但是还有另一个问题。您的对象的设计方式不是最好的。所以如果你想正确处理它,你可以改变你的类设计,以便以正确的方式处理它。

例如,你可以让它有点不同,就像在这个例子中一样(它并不完美,它仍然可以更加独立和更好地设计):

class User {
    int userId;
    String userFirstName;
    String userSecondName;

    private ArrayList<Integer> mathSums = new ArrayList<>();
    private ArrayList<Integer> englishSums = new ArrayList<>();

    User(int userId, String userFirstName, String userSecondName) {
        this.userId = userId;
        this.userFirstName = userFirstName;
        this.userSecondName = userSecondName;
    }

    public void addMathSums(int mathSums) {
        this.mathSums.add(mathSums);
    }

    public void addEnglishSums(int englishSums) {
        this.englishSums.add(englishSums);
    }
}

因此,在此类的帮助下,您可以更改方式、定义和设置对象值的方式,它看起来像这样:

1) 您可以使用参数定义构造函数,以便可以将其用于创建对象:

 User user = new User(userId, userFirst, userLast);

2) 然后您可以将总和添加到ArrayLists 中,它们是User 类中的成员变量(字段):

user.addMathSums(math1);
user.addMathSums(math2);
user.addMathSums(math3);
user.addEnglishSums(english1);
user.addEnglishSums(english2);
user.addEnglishSums(english3);

它可以使用数组、列表或其他数据结构以不同的方式执行,但你确实需要注意你的类设计。您花在设计对象上的时间越多,以后需要的修改就越少。

3) 您可能希望与此对象进行交互,因此您需要以某种方式获取它的引用。您可以更改方法签名,以便在完成输入后“返回”创建的对象。所以你需要做一些改变:

在方法上将签名返回类型更改为用户:

private static User addNewStudent() { ... }

然后为此添加返回并返回创建的用户:

private static User addNewStudent() {
    /* code */

    User user = new User(userId, userFirst, userLast);
    /* add sums */

    return user;
}

4) 在您的main() 中使用此方法:

public static void main(String[] args) {
    User createdUser = User.addNewStudent();
}

【讨论】:

    猜你喜欢
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-09
    • 1970-01-01
    • 1970-01-01
    • 2020-11-02
    • 2022-11-22
    相关资源
    最近更新 更多