2

我有一个二维双数据数组,比如 [100][100]。其中大部分都填充了“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

所以当你考虑这个循环时,外部或内部循环是 x 坐标,另一个循环是 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 回答