[英]JAVA, array taking a variable number of objects as parameters
我試圖獲取一個數組,以獲取可變數量的對象作為輸入。 我是編程新手,所以我提前道歉。
這是我的代碼:
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
有什么想法嗎? 提前致謝!
問題出在你的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[]
}
}
或收集每個Rating
所有值( double Ratings
)並將它們映射到一個數組中
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;
}
}
可變長度args(var-args)像數組一樣被訪問。 假設您想要將所有用戶的所有評級扁平打包到All_user
的單個double[]
,那么:
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++;
}
}
...
}
}
argument
表示為在此上下文中使用的Rating
對象數組。 但要小心使用varargs。 除非你正在建立一個圖書館,否則它很少是一個好的設計決定。
使用vargs表示法時,arg作為數組處理。 在你的情況下,它將是一個Rating
數組。 您可以像在數組中一樣在方法體中引用它,就好像它被聲明為arguments[]
。
幾個批評:
Rating
轉為double
,所以你已經遇到了麻煩。 ...
符號僅用於方法的聲明,而不是引用方法體內的arg。 arguments
,它看起來好像您將arg稱為argument
。 Rating...
和arg的名稱之間添加一個空格。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.