0

mouseClickedでコードのセクションを作成しようとしていますが、クリックされた長方形をベクターから削除します。すべての長方形はベクトルに適切に格納されており、プログラムを実行すると、チェックしているポイントが有効になります。ドキュメントを見ると、確かにrectangle.contains(point)メソッドがあるので、次のスニペットが無効である理由がわかりません。ありがとう!

public void mouseClicked(MouseEvent m)
    {

      Point p = new Point(m.getPoint());
      Vector v = ball.r; //ball.r is where they are put into in another object's method
      boolean done = false;
      int i = 0;

      while (!done)
      {
        if(v.elementAt(i).contains(p))
        {
          v.removeElement(i);
          i--; //prevent i from incrementing
        }
        i++;
      }
    }

また、私が知る限り、要素が削除されると、ベクトルが「再パック」され、ベクトルの要素をジャンプするため、forループではこれを行いませんでした。私がこれを言う/するのが正しいか間違っているかわからない。

4

3 に答える 3

3

Vector v生の型ベクトルとして定義したので、その中の要素の型を知らないv.elementAt(i)ので、メソッドに一致するものを見つけることができませんcontains()。これが問題の理由です。

2つのオプションがあります。メソッドを呼び出す前に、Vectorまたは要素を定義するときにジェネリックスを使用してください。type castcontains()

例えば

 Vector<Rectangle> v  = (Vector<Rectangle>)ball.r;

また

 if(((Ractangle)v.elementAt(i)).contains(p))
于 2012-11-04T22:29:27.437 に答える
3

Java Vectorは、ジェネリックまたは非ジェネリックとして使用できます。そして、あなたは非ジェネリックとして使用しました。したがって、elementAt(int index)メソッドはではObjectなく、を返しますRectangle。この問題を解決する最も簡単な方法は、返さObjectれたRectangleオブジェクトをキャストすることです。このような、

import java.awt.Rectangle;  // Don't forget the to import

public void mouseClicked(MouseEvent m)
{

  Point p = new Point(m.getPoint());
  Vector v = ball.r;
  boolean done = false;
  int i = 0;

  while (!done)
  {
    if( ((Rectangle)(v.elementAt(i)).contains(p))   // casting
    {
      v.removeElement(i);
      i--;
    }
    i++;
  }
}

より良い解決策は、ジェネリックを使用することです。

import java.awt.Rectangle;

public void mouseClicked(MouseEvent m)
{

  Point p = new Point(m.getPoint());
  Vector<Rectangle> v = ball.r;   // remember, bar.r Vector must be a Vector<Rectagle> 
  boolean done = false;
  int i = 0;

  while (!done)
  {
    if( (v.elementAt(i).contains(p))   // No casting
    {
      v.removeElement(i);
      i--;
    }
    i++;
  }
}

ジェネリックコレクションを非ジェネリック参照に割り当てることはできますが、非ジェネリックオブジェクトをジェネリック参照に割り当てることはできません。ここでジェネリックについて学ぶことができます。

于 2012-11-04T22:46:39.013 に答える
2
C:\Users\Alex\Downloads\Bounce2\Bounce2.java:217: cannot find symbol symbol : method contains(java.awt.Point) location: class java.lang.Object if(v.elementAt(i).contains(p)) 

このエラーメッセージは、コンパイラがクラスcontains()内のメソッドを探していることを示しています。Objectつまり、はではなく、をv.elementAt(i)返します。これを修正するには、次のように宣言を変更する必要があります。ObjectRectanglev

Vector<Rectangle> v = ball.r;

お役に立てれば!

于 2012-11-04T22:34:22.150 に答える