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