0

先生に助けを求めたときにこのコード行を取得しましたが、最後の部分の下にレッドラインが表示されます. 何が間違っている可能性がありますか?エラー メッセージ:「式の型は配列型である必要がありますが、ArrayList に解決されました」というエラー メッセージが表示されます。わかりません。理解を助けてください。

ArrayList<Point>[] touchPoints = new ArrayList<Point>()[2];

ポイントを保存するための 2 つのリストが必要です。私は各リストを次のように呼んでいると思いますtouchPoints[0];! touchPoints[1];?

編集:

シンプルに保ち、次のように 2 つの異なるリストを使用するだけでよいと思います!?:

points1 = new ArrayList<Point>();
points2 = new ArrayList<Point>();
4

3 に答える 3

2

ArrayLists の配列を作成しました。このデモは、それらがどのように一緒に使用されるかを示しています

import java.util.ArrayList;

public class ArraysAndLists {
    public static void main(String[] args) {
        ArrayList<String>[] touchPoints = new ArrayList[2];

        // Adding values
        touchPoints[0] = new ArrayList<String>();
        touchPoints[0].add("one string in the first ArrayList");
        touchPoints[0].add("another string in the first ArrayList");

        touchPoints[1] = new ArrayList<String>();
        touchPoints[1].add("one string in the second ArrayList");
        touchPoints[1].add("another string in the second ArrayList");

        // touchPoints[2].add("This will give out of bounds, the array only holds two lists");

        // Reading values
        System.out.println(touchPoints[0].get(0)); // returns "one string in the first ArrayList"
        System.out.println(touchPoints[1].get(1)); // returns "another string in the second ArrayList"

    }
}
于 2013-06-15T08:42:44.517 に答える
1

この質問をチェックしてください

配列オブジェクトのコンポーネント型は、(無制限の) ワイルドカード型でない限り、型変数またはパラメーター化された型であってはなりません。要素型が型変数またはパラメーター化された型である配列型は宣言できますが、配列オブジェクトは宣言できません。

于 2013-06-15T08:39:53.090 に答える
1

あなたは2つのものを混ぜています:

  • プレーン配列の構築
  • ArrayList の構築

配列の構築

プレーン配列は非常に低レベルです。メソッドはなく、長さは作成後に固定されます。

MyType[] anArray = new MyType[10]; 

ArrayList の構築

ArrayList は Collection の型の単なる実装です

Collection<MyItemType> aCollection = new ArrayList<MyItemType>();

あなたの場合はどうしますか?

コレクションの単純な配列が必要です (実装は ArrayList です)。そう:

// Create the array, use the interface in case you need to change the implementation later on
Collection<Point>[] touchPoints = (Collection<Point>) new Collection[2];

// Create each collection within that array, using the ArrayList implementation
touchPoints[0] = new ArrayList<Point>();
touchPoints[1] = new ArrayList<Point>();

それをより良くする方法は?

単純な配列が必要な理由を考えてみてください。

  • 要素が 2 つだけで、常に固定されている場合は、2 つのメンバー変数を作成するだけです。
  • 数が異なる場合は、コレクションのコレクションを作成するだけです (コレクション>)

ユースケースを考慮して編集します。

ユーザー入力を保持するクラスを作成するだけです。

class UserInput {

  public UserInput() {
    user1TouchPoints = new ArrayList<Point>();
    user2TouchPoints = new ArrayList<Point>();
  }

  // Add accessors and all

  private Collection<Point> user1TouchPoints;
  private Collection<Point> user2TouchPoints;
}

より多くのプレーヤーを計画している場合は、マップを使用してください

class UserInput {

  public UserInput() {
    usersTouchPoints = new HashMap<Integer, Collection<Point>>();
  }

  public Collection<Point> getUserTouchPoints(Integer userId) {
    return usersTouchPoints.get(userId);
  }

  public void addUserTouchPoints(Integer userId, Collection<Point> input) {
    Collection<Point> points = usersTouchPoints.get(userId);
    if (points==null) {
      points = new ArrayList<Point>();
      userTouchPoints.put(userId, points);
    }
    points.addAll(input);
  }

  // Maps a user ID (or index) to its touch points
  // If you are using Android, use SparseArray instead of Map, this is more efficient
  private Map<Integer, Collection<Point>> usersTouchPoints;
}
于 2013-06-15T08:41:29.943 に答える