私はこの言語を学ぶ練習として、The Game of LifeをJavaで実装しようとしています。Javaと条件付きの問題
残念ながら、私はこのプログラムを正しく動かすことができないように私は問題があります。
私は問題はないとのトロイダル合計(プレーンドーナツです)実装:
int SumNeighbours (int i, int j) {
int value = 0;
value = world[(i - 1 + row ) % row][(j - 1 + column ) % column]+world[(i - 1 + row ) % row][j]+world[(i - 1 + row ) % row][(j + 1) % column];
value = value + world[i][(j - 1 + column ) % column] + world[i][(j + 1) % column];
value = value + world[(i + 1) % row][(j - 1 + column ) % column] + world[(i + 1) % row][j]+world[ (i+1) % row ][(j + 1) % column];
return value;
}
をそして、私はそれをテストするとき、それは正しく合計:
残念ながらvoid NextWorldTest() {
int count;
int [][] nextWorld = new int[row][row];
nextWorld = world;
for (int i=0; i<row; i++) {
for (int j=0; j<column; j++) {
count = SumNeighbours(i,j);
System.out.print(" " + count + " ");
}
System.out.println();
}
world=nextWorld;
}
私はの条件を追加します(生まれた/死んだ)生命のゲームは、プログラムが正しく動作しなくなり、もはや近隣の生存細胞を正確に数えることができなくなったように見えます。それは何も存在しない場合を数え、いくつかある場合はカウントしません。例:いくつかの生きている細胞の下のものを数えません。
これは非常に奇妙な動作で、3日間頭痛を与えています...変数について何か基本的なものがありませんか?
ここでクラスを見つけることができます。
void NextWorld() {
int count;
int [][] nextWorld = new int[row][column];
nextWorld = world;
for (int i=0; i<row; i++) {
for (int j=0; j<column; j++) {
count = SumNeighbours(i,j);
System.out.print(" " + count + " ");
if ( (world[i][j] == 0) && (count == 3) ) {
nextWorld[i][j] = 1;
} else if ((world[i][j] == 1) && ((count == 3) || (count == 2))) {
nextWorld[i][j] = 1;
} else {
nextWorld[i][j]=0;
}
}
System.out.println();
}
world=nextWorld;
}
}
私は何か間違っていますか?
以下は、完全なパッケージです。
package com.GaOL;
public class GameWorld {
int [][] world;
int row;
int column;
public int GetRow() {
return row;
}
public int GetColumn() {
return column;
}
public int GetWorld (int i, int j) {
return world[i][j];
}
void RandomGen (int size, double p1) {
double randomCell;
row = size;
column = size;
world = new int[row][column];
for (int i = 0; i<row; i++) {
for (int j = 0; j<column; j++) {
randomCell=Math.random();
if (randomCell < 1-p1) {
world[i][j] = 0;
} else {
world[i][j] = 1;
}
}
}
}
void printToConsole() {
double test = 0;
for (int i=0; i<row; i++) {
for (int j=0; j<column; j++) {
if (world[i][j] == 0) {
System.out.print(" ");
} else {
System.out.print(" * ");
test++;
}
}
System.out.println("");
}
System.out.println("ratio is " + test/(row*column));
}
int SumNeighbours (int i, int j) {
int value = 0;
value = world[(i - 1 + row ) % row][(j - 1 + column ) % column]+world[(i - 1 + row ) % row][j]+world[(i - 1 + row ) % row][(j + 1) % column];
value = value + world[i][(j - 1 + column ) % column] + world[i][(j + 1) % column];
value = value + world[(i + 1) % row][(j - 1 + column ) % column] + world[(i + 1) % row][j]+world[ (i+1) % row ][(j + 1) % column];
return value;
}
void NextWorldTest() {
int count;
int [][] nextWorld = new int[row][row];
nextWorld = world;
for (int i=0; i<row; i++) {
for (int j=0; j<column; j++) {
count = SumNeighbours(i,j);
System.out.print(" " + count + " ");
}
System.out.println();
}
world=nextWorld;
}
void NextWorld() {
int count;
int [][] nextWorld = new int[row][column];
nextWorld = world;
for (int i=0; i<row; i++) {
for (int j=0; j<column; j++) {
count = SumNeighbours(i,j);
System.out.print(" " + count + " ");
if ( (world[i][j] == 0) && (count == 3) ) {
nextWorld[i][j] = 1;
} else if ((world[i][j] == 1) && ((count == 3) || (count == 2))) {
nextWorld[i][j] = 1;
} else {
nextWorld[i][j]=0;
}
}
System.out.println();
}
world=nextWorld;
}
}
、ここでテストクラス:
package com.GaOL;
public class GameTestClass {
public static void main(String[] args) {
GameWorld prova = new GameWorld();
prova.RandomGen(10, 0.02);
for (int i=0; i<3; i++) {
prova.printToConsole();
prova.NextWorld();
}
}
}
あなたがあなたのコードを書式化した場合、あなたに答えるほうがずっと簡単です。 b)何が間違っているかの短い例を提示した。あなたが問題を実証する必要があるよりもはるかに多くのコードがここにあります、私は確信しています。 –
私は再フォーマットされました... StackOverflowエディタに問題がありました...条件付き演算子タグがあるのは、ifsを追加するとコードが破損するためです。 – Mascarpone
条件演算子に問題はないと思います。だから私はこのタグを削除しました。 –