地形表現を使用してフェンスを作成しています。ここで、1はフェンスの土地で、0は空白です。ここでは例えばマップのようになります。地形表現を使用したフェンスの中間部分
1101のコードがどのように動作する
は、それがどのように多くのコーナーと1の側面とカウントをスキャンしていますあなたが必要とするフェンスのメートル、1のすべての側面は2.5メートルです。 j変数はx値に似ていて、iはy値です。私はサイドとコーナーの作業コードを持っています。私が助けが必要なのは、forループの中心にforループを設定する方法です。フェンス。ここに私の作業コードです:
package workspace;
public class Fencing {
public static void main(String[] args) {
boolean b = true;
double corner = 0;
double center = 0;
double side = 0;
int i = 0;
int j = 0;
int[][] map = {
{ 0, 1, 1, 0 },
{ 1, 1, 1, 1 },
{ 1, 1, 1, 1 },
{ 1, 1, 0, 1 }
};
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
if (map[i][j] != 1 && map[i][j] != 0) {
b = false;
System.out.println("--> A value of " + map[i][j] + " was found at " + i + "," + j);
}
}
}
if (b == false && i == 3) {
System.out.println("The map is invalid");
return;
} else {
System.out.println("Map is valid");
}
if (map[0][0] == 1) {
corner += 5;
if (map[1][0] == 1 && map[0][1] == 1) {
corner += 0;
}
if (map[1][0] != 1 && map[0][1] != 1) {
corner += 5;
}
if (map[1][0] != 1 && map[0][1] == 1 || map[1][0] == 1 && map[0][1] != 1) {
corner += 2.5;
}
} else {
corner += 0;
}
if (map[0][3] == 1) {
corner += 5;
if (map[1][3] == 1 && map[0][2] == 1) {
corner += 0;
}
if (map[1][3] != 1 && map[0][2] != 1) {
corner += 5;
}
if (map[1][3] != 1 && map[0][2] == 1 || map[1][3] == 1 && map[0][2] != 1) {
corner += 2.5;
}
} else {
corner += 0;
}
if (map[3][0] == 1) {
corner += 5;
if (map[3][1] == 1 && map[2][0] == 1) {
corner += 0;
}
if (map[3][1] != 1 && map[02][0] != 1) {
corner += 5;
}
if (map[3][1] != 1 && map[2][0] == 1 || map[3][1] == 1 && map[2][0] != 1) {
corner += 2.5;
}
} else {
corner += 0;
}
if (map[3][3] == 1) {
corner += 5;
if (map[3][2] == 1 && map[2][3] == 1) {
corner += 0;
}
if (map[3][2] != 1 && map[2][3] != 1) {
corner += 5;
}
if (map[3][2] != 1 && map[2][3] == 1 || map[3][2] == 1 && map[2][3] != 1) {
corner += 2.5;
}
} else {
corner += 0;
}
System.out.println("Corner fencing = " + corner);
i = 0;
j = 0;
for (j = 1; j < 3; j++) { // Top
if (map[0][j] == 1) {
side += 2.5;
if (map[0][j + 1] == 1 && map[0][j - 1] == 1) {
side += 0;
}
if (map[0][j + 1] != 1 || map[0][j - 1] != 1) {
side += 2.5;
}
if (map[0][j + 1] != 1 && map[0][j - 1] != 1) {
side += 5;
}
} else {
side += 0;
}
}
System.out.println("After the first row, fencing = " + side);
i = 0;
j = 0;
for (j = 1; j < 3; j++) { // Bottom
if (map[3][j] == 1) {
side += 2.5;
if (map[3][j + 1] == 1 && map[3][j - 1] == 1) {
side += 0;
}
if (map[3][j + 1] != 1 || map[3][j - 1] != 1) {
side += 2.5;
}
if (map[3][j + 1] != 1 && map[3][j - 1] != 1) {
side += 5;
}
} else {
side += 0;
}
}
System.out.println("After the bottom row, fencing = " + side);
i = 0;
j = 0;
for (i = 1; i < 3; i++) {// Right
if (map[i][3] == 1) {
side += 2.5;
if (map[i + 1][3] == 1 && map[i - 1][3] == 1) {
side += 0;
}
if (map[i + 1][3] != 1 || map[i - 1][3] != 1) {
side += 2.5;
}
if (map[i + 1][3] != 1 && map[i - 1][3] != 1) {
side += 5;
}
} else {
side += 0;
}
}
System.out.println("After the first column, fencing = " + side);
i = 0;
j = 0;
for (i = 1; i < 3; i++) {// Left
if (map[i][0] == 1) {
side += 2.5;
if (map[i + 1][0] == 1 && map[i - 1][0] == 1) {
side += 0;
}
if (map[i + 1][0] != 1 || map[i - 1][0] != 1) {
side += 2.5;
}
if (map[i + 1][0] != 1 && map[i - 1][0] != 1) {
side += 5;
}
} else {
side += 0;
}
}
System.out.println("After the last column, fencing = " + side);
}
}
私もコアをスキャンするforループを使用する場合、私はわからないんだけど、私はそれが側ループのようなものになるだろうと想像。誰でもコードがどのように見えるのか考えていますか?
この例の出力は何ですか? –
特定のマップについては、配列の1つと同じものですが、中心に0が1つしかないので、2.5となります。 –
codereview.stackexchangeでこの質問をすると.com、彼らはそれを書くよりはるかにクリーンな方法を提案するので、理解しやすく短くて簡単です。コピーペーストには多くのことがあります。コードをコピー&ペーストするときはいつでも、より良い方法があります。 – tucuxi