在数组中查找并搜索double并返回其索引?这是一个数组元素交换方法吗?)

时间:2013-08-06 04:45:42

标签: java

这是我的第一个问题。这两个创建方法问题,是我参加的测验。创建一个方法,找到一个半径,双r。从2d圆阵列返回数组及其索引。如果找不到double r,则返回{-1,-1}。**

public int[] void findCircleWithRadius(Circle[][] circles, double r) {

    for(int i = 0; i<circles.length-1; i++) { //search the row
        for(int j = 0; j<circles[0].length; j++) { //search each column
            Circle temp = circles[i][j];
            if(temp == r) r = temp; 
            else return "{-1,-1}";
        }
     }

     return circles.indexOf(r);
}

使用findCircleWithRadius方法创建一个交换圆的方法。

public static void swapCircles(Circles[][] circles, double r1, double r2) {

    Circle radius1 = r1.findCircleWithRadius();
    Circle radius2 = r2.findCircleWithRadius();
    Circle temp2 = radius2;

    radius2 = radius1;
    radius1 = temp2;
}

1 个答案:

答案 0 :(得分:4)

在第一个示例中需要解决一些问题:

  1. 目前,j < circles[0].length表示只搜索了一列:列0。您希望j < circles[i].length逐行搜索。

  2. if (temp == r)表示您正在比较Circledouble。我对圈子类不太熟悉,但我相信你会用Circle temp = circles[i][j]代替double temp = circles[i][j].getRadius();

  3. 您希望在找到匹配的Circle后立即返回,这样您就会有一些向后的东西。在我的新版本中,如果您找到了正确的半径,if (temp == r)现在将激活代码。这意味着在if语句下方,您需要return {i, j};。这将返回当前圆圈(具有正确的半径)指示。

  4. 如果没有半径测试返回true,则会调用最后一个语句,因此,如果您有return circles.indexOf(r);,则需要return {-1, -1};

  5. 由于数组是基于0的,并且少于已经意味着一个减去该值,因此- 1

  6. 中不需要i < circles.length - 1

    关于你的第二个例子:

    您的findCircleWithRadius方法有两个参数:Circle[][]double。这意味着你需要给它们。您创建的方法也不是从double调用的,因此您不能说r1.findCircleWithRadius(); 此外,您需要使用int[]通过的findCircleWithRadius来获取CircleswapCircles。 因此,int[] rad1 = this.findCircleWithRadius(circles, r1); // Get the coordinates of the first circle by passing the 2D array, and the radius you're looking for. int[] rad2 = this.findCircleWithRadius(circles, r2); // Get the coordinates of the second circle by passing the 2D array, and the radius you're looking for. Circle radius1 = circles[rad1[0]][rad1[1]]; // Circle 1 is equal to the Circle in the array that has coordinates of the first index in the coordinates, and the second index of the coordinates. (circles[x, y]) Circle radius2 = circles[rad2[0]][rad2[1]]; // Circle 2 is equal to the Circle in the array that has coordinates of the first index in the coordinates, and the second index of the coordinates. (circles[x, y]) 中的第一行应为:

    public int[] void findCircleWithRadius(Circle[][] circles, double r) {
    
    for(int i = 0; i < circles.length; i++) { //search the row
        for(int j = 0; j < circles[i].length; j++) { //search each column
            double temp = circles[i][j].getRadius();
            if(temp == r)
            return {i, j};
        }
     }
     return {-1, -1};
     }
    
    public static void swapCircles(Circles[][] circles, double r1, double r2) {
    
    int[] rad1 = this.findCircleWithRadius(circles, r1);
    int[] rad2 = this.findCircleWithRadius(circles, r2);
    Circle radius1 = circles[rad1[0]][rad1[1]];
    Circle radius2 = circles[rad2[0]][rad2[1]];
    
    Circle temp2 = radius2;
    
    radius2 = radius1;
    radius1 = temp2;
    }
    

    总之,我修订的完整代码如下:

    {{1}}

    否则,其他一切看起来都不错!我希望你的测验做得好!如果您对我所说的任何事情有任何疑问,请告诉我,以便我确保您完全理解。