2

[100][100] という 2 次元 double データの配列があります。そのほとんどは '0.0' で埋められていますが、内部のどこかに '1.0' のブロックがあります。ループを作成し、「1.0」を見つけることができますが、そこから x と y (「1.0」の値ではない) を抽出する方法がわかりません。

解決策を探すのに何時間も費やしました。Arrays.binarySearch メソッドを試しても、エラーが発生し続けます。以下は、配列をループする私のコードです。

int findX() {
  for (int i = 0; i < data.length; i++) {
    for (int j = 0; j < data[i].length; j++) {
      if (data[i][j] == 1.0) {
        int x = i;
      }
      break; // stop search once I found the first '1.0'
             // as there are a couple of them
    }
  }
  return x;

助けてください、どんなアドバイスも大歓迎です。

4

3 に答える 3

1

独自のタイプを定義できますPair:

public class Pair {
    private int x;
    private int y;

    public Pair(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public int getX() {
        return x;
    }

    public int getY() {
        return y;
    }
}

他のタイプに使用する場合は、ジェネリックにすることもできます。

次に、検索メソッドからこのタイプのオブジェクトを返します。

public Pair search(double[][] data) {
    int x = -1;
    int y = -1;
    for (int i = 0; i < data.length; i++) {
        for (int j = 0; j < data[i].length; j++) {
            if (data[i][j] == 1.0) {
                x = i;
                y = j;              
                break;
            }

        }
    }
    return new Pair(x, y);
}
于 2012-07-02T15:30:15.363 に答える
0

次のようなものを使用します。これにより、Pointオブジェクトが返されます。

public Point getPoint( double[][] data) {
    for (int i = 0; i < data.length; i++) {
        for (int j = 0; j < data[i].length; j++) {
            if (data[i][j] == 1.0) {
                return new Point(i, j); // Once we found the value, return
            }
        }
    }
    return null;
}

これは、最初のを見つけると停止することを除いて、データをループします(あなたがそうであったように)1.0。その値が見つかると、停止します。次に、座標を表すオブジェクトが返されます。それ以外の場合はnullが返されます。必要に応じて、整数配列を返すことができます。

さて、あなたがそれを呼ぶとき、あなたはそれが戻ったかどうかをチェックしますnull、もしそうなら、どこにdataもありませんでした。1.0それ以外の場合は、オブジェクトからX座標とY座標を取得します。

Point p = obj.getPoint( data);
if( p != null)
    System.out.println( p.getX() . ', ' . p.getY());
于 2012-07-02T15:23:02.637 に答える
0

したがって、この 1 つのループについて考えると、外側または内側のループは x 座標であり、もう 1 つのループは Y 座標です。

00100 00100 00100

 int yCord;
 int xCord;
 for int y=0;y<3;y++
 {// this loop goes up and down so its the y
       for (int x=0;x<5;x++)
       {// this loop goes left and right so its the x value
            yCord=y;
            xCord=x;
       }
  }

以下の補足事項は、double を int に変換する方法です。

    double myDouble = 420.5;
    //Type cast double to int
    int i = (int)myDouble;


    // to go from int to double below
    int j=5;
    double output;
    output=(double)j;

あなたの立場はyCordとxCordにあるということですね。

于 2012-07-02T15:24:53.677 に答える