0
    final int NUM_OF_SERVERS = 2;

    List<Database> databases = new ArrayList<Database>();

    for (int i = 1; i < NUM_OF_SERVERS; i++){

        Database database = new Database("server" + i + ".txt");
        databases.add(database);

    }

    List<Server> servers = new ArrayList<Server>();

    for (int i = 1; i < NUM_OF_SERVERS; i++){

        **Server server = new Server(databases[i-1]);** //the error is here
    }

データベースのリストがあり、コンストラクターの引数としてデータベースのリストの要素を使用してサーバーのリストを作成したいのですが、次のエラーがスローされます:「式の型は配列型でなければなりませんが、リストに解決されました」強調表示された行にマウスオーバーしたとき。

4

1 に答える 1

3

問題は、それdatabasesList<Database>- ではないということDatabase[]です。したがって、式databases[i-1]は無効です。これは、コンストラクターを呼び出しているという事実とは何の関係もありません。それは、リスト内の要素にアクセスする方法ではありません。あなたがしたいdatabases.get(i - 1)

for (int i = 1; i < NUM_OF_SERVERS; i++) {
    Server server = new Server(databases.get(i-1));
    // Presumably do something with server here
}

ただし、オフバイワンエラーが発生したようです-NUM_OF_SERVERS - 1サーバーで終わるだけです。私はあなたがより良いと思う:

final int NUM_OF_SERVERS = 2;

List<Database> databases = new ArrayList<Database>();

// Note the change to starting index
for (int i = 0; i < NUM_OF_SERVERS; i++) {
    Database database = new Database("server" + i + ".txt");
    databases.add(database);
}

List<Server> servers = new ArrayList<Server>();
// Note the change to starting index *and* the use of i rather than i - 1 
for (int i = 0; i < NUM_OF_SERVERS; i++) {
    Server server = new Server(databases.get(i));
    // Use server here
}

または、2 番目のループに強化された for ループを使用することもできます。

for (Database database : databases) {
    Server server = new Server(database);
    // Use server here
}
于 2013-04-14T14:55:33.197 に答える