日期:2014-05-18  浏览次数:20779 次

这个程序为什么出不了结果

public class H_620_1 {

public static void main(String[] args){
 int []q = new int[8];
 place(0,8,q);
System.out.println(); 
}

public static void place(int k, int n, int []q){
if(k>n)
  print(q);
else
for(int i =0;i<n;i++)
  if(find(i,k,q)){
     q[k]=i;
     place(k+1,n,q);
}
}
//====================================
public static boolean find(int i,int k,int []q){
int j=0;
while(j<k)
{ if((q[j]==i)||Math.abs(q[j]-i)==Math.abs(j-k))
    return false;
  j++;
}
return true;
}
//=============================================
public static void print(int []q){
int i,j;
for(i=0;i<8;i++)
  System.out.println(i+"   "+q[i]);
System.out.println();

for(i=0;i<8;i++){
 for(j=0;j<q[i];j++)
   System.out.print("| ");
System.out.print("|Q|");
for(j=q[i]+1;j<8;j++)
  System.out.print(" |");
System.out.println();
}
}

}

------解决方案--------------------
想出什么结果?你的place方法有输出吗?main函数的输出为空!你能得到什么结果?
------解决方案--------------------
public static void main(String[] args){
 int []q = new int[8];
 place(0,8,q);
System.out.println(); 
}

main方法中 首先最后一句输出为空,而其中调用的place(0,8,q); 这个方法又没有输出,所以这个程序当然没输出结果
------解决方案--------------------
find能进去吗,j = 0的话,while根本就进不去,你就一直在place自己调自己,最后结束
------解决方案--------------------
嗯,3楼的才是正确解释。
你的程序在逻辑上存在问题。
对于边界条件的检测没有考虑到,导致程序代码都是永远不会执行的废码。
所以永远不会你想要的输出。