我正在尝试获取一个数组,将可变数量的对象作为输入。我是编程新手,所以我提前道歉。
这是我的代码:
public class Rating{
double [] Ratings;
int CustomerID;
int Domain;
public Rating (int id, int d, double [] x) {
double [] Ratings = x;
int CustomerID=id;
int Domain=d;
}
}
public class All_user{
double [] All_users;
public All_user(Rating...argument) {
double [] All_users={Rating...argument};
}
}
但是,我得到与double [] All_users = {Rating..arguments)相关的错误;:
Multiple markers at this line
- Syntax error on token "...", . expected
- arguments cannot be resolved or is
not a field
有什么想法?提前谢谢!
答案 0 :(得分:3)
问题出现在All_user
类构造函数中;您正尝试将Ratings[]
类型的某些内容设置为double[]
类型的类成员
您可以执行以下操作之一:
1-让All_user
的构造函数接收一个数组(或可变长度参数)作为Rating
的实例,并简单地将它分配给相同类型的类成员(数组):
public class All_user{
Rating [] All_users;
public All_user(Rating...argument) {
All_users = argument; // arguments is a Rating[]
}
}
或收集每个double Ratings
的所有值(Rating
)并将其映射到数组
public class All_user{
double [] All_users;
public All_user(Rating...argument) {
ArrayList<Double> ratings = new ArrayList<Double>();
for (Rating r : argument) {
for (double d : r.Ratings) ratings.add(d);
}
All_users = new double[ratings.size()];
for (int i=0; i<ratings.size(); i++) All_users[i] = ratings.get(i);
}
}
我认为后者就是你想要做的。另请注意,您的Rating
课程也可以重写为
public class Rating{
double [] Ratings;
int CustomerID;
int Domain;
public Rating (int id, int d, double...x) {
double [] Ratings = x;
int CustomerID=id;
int Domain=d;
}
}
答案 1 :(得分:1)
可变长度args(var-args)像数组一样被访问。假设您想要将所有用户的所有评分平铺到double[]
中的单个All_user
,那么:
public class All_user{
double [] All_users;
public All_user(Rating... argument) {
int totalSize = 0;
for(Rating r:argument)
totalSize+=r.getRatings().length; //double[] Ratings
double [] All_users= new double[totalSize];
int index = 0;
for(Rating r:argument){
for(double r:r.getRatings()){
All_users[index] = r;
index++;
}
}
...
}
}
答案 2 :(得分:0)
argument
表示为Rating
个对象的数组,在此上下文中使用。但要小心使用varargs。除非你正在建立一个图书馆,否则这很少是一个很好的设计决定。
答案 3 :(得分:0)
当您使用 vargs 表示法时,arg将作为数组处理。在您的情况下,它将是Rating
的数组。您可以像在数组中一样在方法体中引用它,就好像它被声明为arguments[]
一样。
一些批评:
Rating
投放到double
,因此您已遇到麻烦。...
符号仅用于方法的声明,而不是引用方法体内的arg。 arguments
时,您将其视为argument
。 Rating...
和arg的名称之间添加一个空格。