因为刚刚开始写博客,所以先把自己比较菜鸟的代码贴上来,顺便也写上注释,不写注释的习惯在看程序的时候简直是要命,所以准备把还有一些技术含量的代码贴上来加上注释。把这个做成一个菜鸟代码系列,也希望给同是入门的JAVA新手带来一些灵感,也希望大家能够互相交流。其实这个代码感觉很乱,主要是因为在循环条件里面加了比较多的限制条件,所以代码很难看。慢慢来形成习惯吧,不过用n++这种标志量简直是不能舍得不用,主要原因可能还是自己很菜。自我反省很重要……下面上代码……
public class practice6_201
{
public static void main(String[] args)
{
int[] array = new int[8];
int p = 0;
for(int i = 11111111;i < 88888888;i++)//八位数的每一位代表该位行上皇后列位置
{
int m = i;
for(int j = 1;j <= 8;j++)
{
array[j - 1] = m % 10;
m /= 10;
} //将八位数字各位存入一维数组
if(check(array,8))//调用check函数
{
if(checkBias(array,8))//调用checkBias函数
{
int n = 0;
for(int k = 1;(k < 8) && (Math.abs(array[k] - array[k - 1]) != 1);k++)//把符合情况的存入数组array1
{
n++;
}
if(n == 7)
{
int[] array1 = new int[8];
for(int l = 0;l < 8;l++)
{
System.out.format("%d",array[l]);
}
p++;
System.out.format("\r");
for(int l = 0;l < 8;l++)
{
for(int j = 0;j < 8;j++)
{
if(j == array[l])
array1[j] = 1;
else
array1[j] = 0;
}
for(int k = 0;k < 8;k++)
{
if(array1[k] == 1)
System.out.format("|%c", 'Q');
else
System.out.format("| "); //用|间隔将Q代表的皇后表示出来
}
System.out.format("|\r");
}
}
}
}
}
System.out.println("The number of the EightQueens is:" + p); //总的解法数
}
public static boolean check(int[] array,int i)//检查行列有无漏洞
{
int k = 0;
for(int m = 0;m < i;m++)
{
for(int n = 0;(n < i) && (array[m] != 0) && (array[m] != 9) ;n++)
{
if((array[m] != array[n])&& (n != m))
k++;
}
}
if(k == i * (i - 1))
return true;
else
return false;
}
public static boolean checkBias(int[] array,int i)//检查斜线上有无漏洞
{
int k = 0;
for(int m = 0;m < i;m++)
{
for(int n = 0;n < i;n++)
{
if((n != m) && (Math.abs(array[m] - array[n]) != (Math.abs(m - n))))
{
k++;
}
}
}
if(k == i * (i - 1))
return true;
else
return false;
}
午安。