簡體   English   中英

JAVA,以可變數量的對象作為參數的數組

[英]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;
    }
}

FYI:變長參數始終是聲明參數中的最后一個參數。 更多關於varargs 在這里這里

可變長度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[]

幾個批評:

  1. 你將無法將你的Rating轉為double ,所以你已經遇到了麻煩。
  2. 關於你的錯誤,首先要注意的是...符號僅用於方法的聲明,而不是引用方法體內的arg。
  3. 當您將其聲明為arguments ,它看起來好像您將arg稱為argument
  4. 此外,您應該在varg聲明Rating...和arg的名稱之間添加一個空格。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM