,而我正在运行以下源代码
import java.util.Stack;
public class Assignment3 {
boolean conflict, complete = false;
public static int solve(int n) {
int solution = 0;
int nextQueen = 0;
boolean problem = false;
s.push(0);
do{
for(int i = 0; i < s.size(); i++)
{
if(s.get(i) == nextQueen){
problem = true;
break;
}
else if(s.get(i) - i == nextQueen - s.size()){
problem = true;
break;
}
else if(s.get(i) + i == nextQueen + s.size()){
problem = true;
break;
}
}
if(problem = false){
s.push(nextQueen);
nextQueen = 0;}
else{
nextQueen++;
}
if(nextQueen == n){
if(s.peek() == n){
s.pop();
nextQueen = s.pop()+ 1;
}
else{
nextQueen = s.pop()+ 1;
}
}
}while(s.size() != n);
printSolution(s);
solution++;
return solution;
}
private static void printSolution(Stack<Integer> s) {
for (int i = 0; i < s.size(); i ++) {
for (int j = 0; j < s.size(); j ++) {
if (j == s.get(i))
System.out.print("Q ");
else
System.out.print("* ");
}
System.out.println();
}
System.out.println();
}
// ----- the main method -----
// (you shouldn't need to change this method)
public static void main(String[] args) {
int n = 8;
// pass in parameter n from command line
if (args.length == 1) {
n = Integer.parseInt(args[0].trim());
if (n < 1) {
System.out.println("Incorrect parameter");
System.exit(-1);
}//if
}//if
int number = solve(n);
System.out.println("There are " + number + " solutions to the " + n + "-queens problem.");
}
}
获得以下错误。帮我澄清一下:
Exception in thread "main" java.util.EmptyStackException
at java.util.Stack.peek(Stack.java:79)
at Assignment3.solve(Assignment3.java:40)
at Assignment3.main(Assignment3.java:87)
答案 0 :(得分:2)
根据API文档,如果堆栈为空,peek()
方法将抛出EmptyStackException
。
在从中查看值之前,您必须检查堆栈是否为空。有一个empty()
方法返回一个布尔值取决于堆栈
移除此堆栈顶部的对象并将该对象返回为 这个函数的价值。
<强>返回:强>
此堆栈顶部的对象(
Vector
的最后一项 对象)。<强>抛出:强>
EmptyStackException
- 如果此堆栈为空。
答案 1 :(得分:0)
一个可能的原因可能是if条件有if(problem = false){
(实际应该是problem==false
或更好!problem
)。语句problem = false
的输出将始终为false
,因此条件每次都会失败,并且Stack
没有添加任何内容(开头的s.push(0)
除外)。现在,您尝试从peek()
中提取(Stack
)某些内容,Stack
为空,这样您就会获得异常。最佳做法是在从中拉出物品之前始终检查堆栈是否为空。您可以使用Stack.isEmpty()
来实现此目的。我没有测试过,但problem = false
肯定是错误的。