一个简单的JAVA代码问题

来源:百度知道 编辑:UC知道 时间:2024/06/21 17:37:44
本人不懂编程,但是想用计算机算一下一个简单幻方的小问题,就是一个四边形,四条边共有8个方块,往里面填入1到8,不许重复,并且任意一条边的和相加等于15,我大致翻了翻java教程,也就看了几页,然后写出了下面这个东东,结果运算出来了,是正确的,但我觉得很变扭,希望java高手给予代码上更优化的指点,谢谢。
public class Nine {

public static void main(String[] args) {
int a, b, c, d, e, f, g, h;
for (a = 1; a <= 8; a++) {
for (b = 1; b <= 8; b++) {
for (c = 1; c <= 8; c++) {
for (d = 1; d <= 8; d++) {
for (e = 1; e <= 8; e++) {
for (f = 1; f <= 8; f++) {
for (g = 1; g <= 8; g++) {
for (h = 1; h <= 8; h++) {
if (a + b + c == 15 & a + d + f == 15 & f + g + h == 15 & c + e + h == 15 & a != b & a != c & a != d & a != e & a != f & a != g & a != h & b != c & b != d & b != e & b != f & b != g & b != h & c != d & c != e & c != f & c !=

利用全排列就可以不用去判断是否重复了
public class Nine {
void range(int[] a,int i){
if(i==a.length){
if(a[0]+a[1]+a[2]==15&&a[2]+a[3]+a[4]==15&&a[4]+a[5]+a[6]==15&&a[6]+a[7]+a[0]==15)
System.out.println(a[0]+" "+a[1]+" "+a[2]+"\n"+a[7]+" "+a[3]+"\n"+a[6]+" "+a[5]+" "+a[4]+"\n");
return;
}
for(int j=i;j<a.length;j++){
swap(a,i,j);
range(a,i+1);
swap(a,i,j);
}
}
void swap(int[] a,int i,int j){
int t=a[j];
a[j]=a[i];
a[i]=t;
}
public static void main(String[] args) {
int[] a={1,2,3,4,5,6,7,8};
Nine nine=new Nine();
nine.range(a,0);
}
}

1. for循环中修改 (为了保证数字不重复)
a<=8 (意思是A有8中取值)
b<=7 (若A已经选定,则B只有7中取值了)
c<=6 (若A,B都已经选定,则C有6中取值)
.
.
h<=1

if语句中使用 &&
短路与,如果前面一个表达式错误,就不会运算后面的,更节省时间

我以初学者的眼光提点小意见。我感觉你虽