11

これは私の最初の質問です。これら 2 つの作成方法の質問は、私が取ったクイズにありました。メソッドを作成して、半径を検索し、r を倍増させます。2 次元円配列から配列とそのインデックスを返します。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;
}
4

1 に答える 1

4

最初の例で修正すべき点がいくつかあります。

  1. 現時点でj < circles[0].lengthは、 column という 1 つの列のみが検索されていることを意味します0j < circles[i].lengthすべての列を行ごとに検索する必要があります。

  2. if (temp == r)Circleaと a を比較していることを意味しますdouble。circle クラスには詳しくありませんが、Circle temp = circles[i][j]withの代わりに置き換えたいと思うと思います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 よりも小さいということは 1 から値を引いた値を意味するため、必要ありません- 1i < circles.length - 1

2番目の例:

メソッドには aと afindCircleWithRadiusの 2 つのパラメーターがあります。つまり、それらを与える必要があります。作成したメソッドは double からも呼び出されないため、言うことはできません。さらに、これらの を取得するには、が渡す を 使用する必要があります。したがって、最初の行は次のようになります。Circle[][]doubler1.findCircleWithRadius();int[]findCircleWithRadiusCircleswapCircles

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;
}

そうでなければ、他のすべてはかなり良さそうです!クイズがうまくいったことを願っています。私が言ったことについてさらに質問がある場合はお知らせください。これを完全に理解できるようにします。

于 2013-08-06T05:06:08.497 に答える