我在做代码题时根据我的思路有一步要去掉数组最中间的元素,但自己写的代码出现问题,检查时相关代码处删去后输出的新数组有的是正确的,有的又是错误的,求求帮忙看看是为什么
public static int result(int[] re){
int num1=0;
int[] mid=new int[8];
//get new array
for(int i=0;i<8;i++){
if(i<4){
mid[i]=re[i];
}
else if(i>4){
mid[i]=re[i+1];
}
System.out.print(mid[i]+" ");//can
}
System.out.println();//can
int pur=re[4];
System.out.println("目标cell:"+pur);//can
//get the number of 1 and 0
for(int j=0;j<8;j++){
if(mid[j]==1){
num1++;//on
}
}
//change the element
if(pur==0){//dead cell
if(num1<2||num1>5){
pur=1;
}
}
else if(pur==1){//live cell
if(num1<3){
pur=0;
}
else if(num1>=3||num1<=6){
pur=1;
}
else if(num1>6){
pur=0;
}
}
System.out.println("LIVE CELL:"+num1);//CAN
return pur;
}
输出:
0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 1 0 1 0 0 0
0 0 0 1 0 0 0 0
就像这两组,第一组是理想的结果
第二组却不是
不太明白是这部分的问题还是其他部分的问题
完整代码如下:
import java.util.Scanner;
public class A2_CellularAutomaton2 {
//get a new array
public static int[][] get_result(int[][] arr,int m,int n,int s){
int[] re=new int[9];
int[][] middle =new int[m][n];
for(int v=0;v<s;v++){
for(int i =0;i<m;i++){
for(int j=0;j<n;j++){
//to get a new array
//for corner
if(i==0&j==0){
int[] a={0,0,0};
int[] b={0,arr[0][0],arr[0][1]};
int[] c={0,arr[1][0],arr[1][1]};
for(int k=0;k<9;k++){
if(k<3){
re[k]=a[k];
}
else if(k>=3&k<6){
re[k]=b[k-3];
}
else{
re[k]=c[k-6];
}
}
}
else if(i==0&j==n-1){
int[] a={0,0,0};
int[] b={arr[0][n-2],arr[0][n-1],0};
int[] c={arr[1][n-2],arr[1][n-1],0};
for(int k=0;k<9;k++){
if(k<3){
re[k]=a[k];
}
else if(k>=3&k<6){
re[k]=b[k-3];
}
else{
re[k]=c[k-6];
}
}
}
else if(i==m-1&j==0){
int[] a={0,arr[m-2][0],arr[m-2][1]};
int[] b={0,arr[m-1][0],arr[m-1][1]};
int[] c={0,0,0};
for(int k=0;k<9;k++){
if(k<3){
re[k]=a[k];
}
else if(k>=3&k<6){
re[k]=b[k-3];
}
else{
re[k]=c[k-6];
}
}
}
else if(i==m-1&j==n-1){
int[] a={arr[m-2][n-2],arr[m-2][n-1],0};
int[] b={arr[m-1][n-2],arr[m-1][n-1],0};
int[] c={0,0,0};
for(int k=0;k<9;k++){
if(k<3){
re[k]=a[k];
}
else if(k>=3&k<6){
re[k]=b[k-3];
}
else{
re[k]=c[k-6];
}
}
}//for margin
else if(i==0&j>0&j<n-1){
int[] a={0,0,0};
int[] b={arr[i][j-1],arr[i][j],arr[i][j+1]};
int[] c={arr[i+1][j-1],arr[i+1][j],arr[i+1][j+1]};
for(int k=0;k<9;k++){
if(k<3){
re[k]=a[k];
}
else if(k>=3&k<6){
re[k]=b[k-3];
}
else{
re[k]=c[k-6];
}
}
}
else if(i==m-1&j>0&j<n-1){
int[] a={arr[i-1][j-1],arr[i-1][j],arr[i-1][j+1]};
int[] b={arr[i][j-1],arr[i][j],arr[i][j+1]};
int[] c={0,0,0};
for(int k=0;k<9;k++){
if(k<3){
re[k]=a[k];
}
else if(k>=3&k<6){
re[k]=b[k-3];
}
else{
re[k]=c[k-6];
}
}
}
else if(j==n-1&i>0&i<m-1){
int[] a={arr[i-1][j-1],arr[i-1][j],0};
int[] b={arr[i][j-1],arr[i][j],0};
int[] c={arr[i+1][j-1],arr[i+1][j],0};
for(int k=0;k<9;k++){
if(k<3){
re[k]=a[k];
}
else if(k>=3&k<6){
re[k]=b[k-3];
}
else{
re[k]=c[k-6];
}
}
}
else if(j==0&i>0&i<m-1){
int[] a={0,arr[i-1][j],arr[i-1][j+1]};
int[] b={0,arr[i][j],arr[i][j+1]};
int[] c={0,arr[i+1][j],arr[i+1][j+1]};
for(int k=0;k<9;k++){
if(k<3){
re[k]=a[k];
}
else if(k>=3&k<6){
re[k]=b[k-3];
}
else{
re[k]=c[k-6];
}
}
}//for content
else if(i>0&i<m-1&j>0&j<n-1){
int[] a={arr[i-1][j-1],arr[i-1][j],arr[i-1][j+1]};
int[] b={arr[i][j-1],arr[i][j],arr[i][j+1]};
int[] c={arr[i+1][j-1],arr[i+1][j],arr[i+1][j+1]};
for(int k=0;k<9;k++){
if(k<3){
re[k]=a[k];
}
else if(k>=3&k<6){
re[k]=b[k-3];
}
else{
re[k]=c[k-6];
}
}
}
//can be deleted
for(int g =0;g<9;g++){
System.out.print(re[g]+" ");//can
}
System.out.println();//can
middle[i][j]=result(re);
System.out.println("value"+result(re));
}
}
}
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
arr[i][j]=middle[i][j];
}
}
return arr;
}
//to deal with the array
public static int result(int[] re){
int num1=0;
int[] mid=new int[8];
//get new array
for(int i=0;i<8;i++){
if(i<4){
mid[i]=re[i];
}
else if(i>4){
mid[i]=re[i+1];
}
System.out.print(mid[i]+" ");//can
}
System.out.println();//can
int pur=re[4];
System.out.println("目标cell:"+pur);//can
//get the number of 1 and 0
for(int j=0;j<8;j++){
if(mid[j]==1){
num1++;//on
}
}
//change the element
if(pur==0){//dead cell
if(num1<2||num1>5){
pur=1;
}
}
else if(pur==1){//live cell
if(num1<3){
pur=0;
}
else if(num1>=3||num1<=6){
pur=1;
}
else if(num1>6){
pur=0;
}
}
System.out.println("LIVE CELL:"+num1);//CAN
return pur;
}
public static void main(String[] args) {
// read the datas
Scanner input = new Scanner(System.in);
// m&n
int m = input.nextInt();
int n = input.nextInt();
//System.out.println(m + " " + n);
// get square
int[][] arr = new int[m][n];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
arr[i][j] = input.nextInt();
}
}
// get s steps
int s = input.nextInt();
//System.out.println(s);
//output
int[][] final_re =get_result(arr, m, n, s);
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(j<n-1){
System.out.print(final_re[i][j]+" ");
}
else{
System.out.print(final_re[i][j]);
}
}
System.out.println();
}
}
}