有什么方法可以向一个对象添加多个变量?

时间:2019-08-18 10:13:42

标签: java object methods

因此,我已经获得了下面的方法,并且不允许更改它。我需要的是用下面的变量创建几个对象,但是不断出现错误,提示“构造函数菜单(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个新对象,其中包含用户输入变量。

1 个答案:

答案 0 :(得分:0)

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

例如,您可以使它有所不同,例如在此示例中(它不是完美的,它仍然可以更独立和更好地设计):

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)然后,您可以将总和添加到ArrayList类的成员变量(字段)的User中:

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

可以使用数组,列表或其他数据结构以不同的方式执行此操作,但是您确实需要注意类的设计。您花费更多的时间来设计对象,而减少了以后需要的修改。

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

在方法上,将签名返回类型更改为User:

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();
}