Java-获取堆栈溢出错误
这是我的程序,我一直收到这个错误 线程“main”中出现异常 java.lang.StackOverflower错误 这是作业 说明Java-获取堆栈溢出错误,java,Java,这是我的程序,我一直收到这个错误 线程“main”中出现异常 java.lang.StackOverflower错误 这是作业 说明 对于该计划,您需要创建一个四分卫类。 这是一个简单的对象 代表NFL的四分卫。 您可以创建额外的私有资源 您认为有必要或需要的方法 有助于实现该类 司机来了 package quarterback; import java.util.Scanner; public class QBtester { public static void main(S
对于该计划,您需要创建一个四分卫类。 这是一个简单的对象 代表NFL的四分卫。 您可以创建额外的私有资源 您认为有必要或需要的方法 有助于实现该类 司机来了
package quarterback;
import java.util.Scanner;
public class QBtester {
public static void main(String[] args) {
// Create a Quarterback
Quarterback qb = new Quarterback ();
// Test OK quarterback
qb.setFirstName("qb");
qb.setLastName("ok");
qb.setAttempts(465);
qb.setCompletions(272);
qb.setYards(2972);
qb.setTouchdowns(18);
qb.setInterceptions(12);
if ("qb ok 79.6".equals(qb.toString())) {
System.out.println("Passed OK QB");
} else {
System.out.println("Failed OK QB");
System.out.println("Expected: qb ok 79.6");
System.out.println("Got: " + qb);
}
// Test max quarterback
qb.setFirstName("qb");
qb.setLastName("max");
qb.setAttempts(100);
qb.setCompletions(78);
qb.setYards(1275);
qb.setTouchdowns(12);
qb.setInterceptions(0);
if ("qb max 158.3".equals(qb.toString())) {
System.out.println("Passed max QB");
} else {
System.out.println("Failed max QB");
System.out.println("Expected: qb max 158.3");
System.out.println("Got: " + qb);
}
// Test completions too high
qb.setFirstName("qb");
qb.setLastName("comp2hi");
qb.setAttempts(100);
qb.setCompletions(78);
qb.setYards(1000);
qb.setTouchdowns(7);
qb.setInterceptions(5);
if ("qb comp2hi 110.8".equals(qb.toString())) {
System.out.println("Passed completions too high");
} else {
System.out.println("Failed completions too high");
System.out.println("Expected: qb comp2hi 110.8");
System.out.println("Got: " + qb);
}
// Test completions too low
qb.setFirstName("qb");
qb.setLastName("comp2low");
qb.setAttempts(100);
qb.setCompletions(25);
qb.setYards(1000);
qb.setTouchdowns(7);
qb.setInterceptions(5);
if ("qb comp2low 71.3".equals(qb.toString())) {
System.out.println("Passed completions too low");
} else {
System.out.println("Failed completions too low");
System.out.println("Expected: qb comp2low 71.3");
System.out.println("Got: " + qb);
}
// Test completions 0
qb.setFirstName("qb");
qb.setLastName("comp0");
qb.setAttempts(100);
qb.setCompletions(30);
qb.setYards(1000);
qb.setTouchdowns(7);
qb.setInterceptions(5);
if ("qb comp0 71.3".equals(qb.toString())) {
System.out.println("Passed completions 0");
} else {
System.out.println("Failed completions 0");
System.out.println("Expected: qb comp0 71.3");
System.out.println("Got: " + qb);
}
// Test yards too high
qb.setFirstName("qb");
qb.setLastName("yards2hi");
qb.setAttempts(100);
qb.setCompletions(50);
qb.setYards(1275);
qb.setTouchdowns(7);
qb.setInterceptions(5);
if ("qb yards2hi 98.3".equals(qb.toString())) {
System.out.println("Passed yards too high");
} else {
System.out.println("Failed yards too high");
System.out.println("Expected: qb yards2hi 98.3");
System.out.println("Got: " + qb);
}
// Test yards too low
qb.setFirstName("qb");
qb.setLastName("yards2low");
qb.setAttempts(100);
qb.setCompletions(50);
qb.setYards(250);
qb.setTouchdowns(7);
qb.setInterceptions(5);
if ("qb yards2low 58.8".equals(qb.toString())) {
System.out.println("Passed yards too low");
} else {
System.out.println("Failed yards too low");
System.out.println("Expected: qb yards2low 58.8");
System.out.println("Got: " + qb);
}
// Test yards 0
qb.setFirstName("qb");
qb.setLastName("yards0");
qb.setAttempts(100);
qb.setCompletions(50);
qb.setYards(300);
qb.setTouchdowns(7);
qb.setInterceptions(5);
if ("qb yards0 58.8".equals(qb.toString())) {
System.out.println("Passed yards 0");
} else {
System.out.println("Failed yards 0");
System.out.println("Expected: qb yards0 58.8");
System.out.println("Got: " + qb);
}
// Test td too high
qb.setFirstName("qb");
qb.setLastName("td2hi");
qb.setAttempts(100);
qb.setCompletions(50);
qb.setYards(1000);
qb.setTouchdowns(14);
qb.setInterceptions(5);
if ("qb td2hi 104.2".equals(qb.toString())) {
System.out.println("Passed td too high");
} else {
System.out.println("Failed td too high");
System.out.println("Expected: qb td2hi 104.2");
System.out.println("Got: " + qb);
}
// Test td 0
qb.setFirstName("qb");
qb.setLastName("td0");
qb.setAttempts(100);
qb.setCompletions(50);
qb.setYards(1000);
qb.setTouchdowns(0);
qb.setInterceptions(5);
if ("qb td0 64.6".equals(qb.toString())) {
System.out.println("Passed td 0");
} else {
System.out.println("Failed td 0");
System.out.println("Expected: qb td0 64.6");
System.out.println("Got: " + qb);
}
// Test int too low
qb.setFirstName("qb");
qb.setLastName("int2low");
qb.setAttempts(100);
qb.setCompletions(50);
qb.setYards(1000);
qb.setTouchdowns(7);
qb.setInterceptions(11);
if ("qb int2low 69.2".equals(qb.toString())) {
System.out.println("Passed int too low");
} else {
System.out.println("Failed int too low");
System.out.println("Expected: qb int2low 69.2");
System.out.println("Got: " + qb);
}
// Test int 0
qb.setFirstName("qb");
qb.setLastName("int0");
qb.setAttempts(1000);
qb.setCompletions(500);
qb.setYards(10000);
qb.setTouchdowns(70);
qb.setInterceptions(95);
if ("qb int0 69.2".equals(qb.toString())) {
System.out.println("Passed int 0");
} else {
System.out.println("Failed int 0");
System.out.println("Expected: qb int0 69.2");
System.out.println("Got: " + qb);
}
// Test copy and equals
Quarterback qbcopy = new Quarterback();
qbcopy = qb.copy();
if (qbcopy.equals(qb)) {
// copy and equals works
System.out.println("Passed qb copy and equals");
} else {
System.out.println("Failed qb copy and equals");
System.out.println("Original qb: " + qb);
System.out.println("Copied qb: " + qbcopy);
}
}
}
这段代码进入无限递归循环。移除新四分卫()代码>行
既然我们在做家庭作业
在publicbooleanequals(objecto)
中,如果任何字段相等,则返回true。更可能的情况是,在返回true之前,您希望确保所有字段相等(使用&&
运算符)
您的getRating
函数实际上不需要任何参数。您可以删除它们
与此相关的一点是,您的驱动程序将始终失败,因为无法计算通过率。删除getRating
的参数后,将passerRating
替换为Quarterback.toString()中的getRating()
,另一个问题是Quarterback
类toString()被递归调用,只需将其更改为返回预期字符串,如下所示:
public String toString() {
return this.firstName + " " + this.lastName + " " + getRating();
}
要复制四分卫对象的状态,无需编写单独的copy()
方法,只需覆盖clone()
方法,如下所示。。。在此之前,通过classQuarterback
实现Cloneable
接口
public Quarterback clone() throws CloneNotSupportedException {
Quarterback qb = (Quarterback) super.clone();
return qb;
}
在QBtester
中,将其称为
Quarterback qbCopy = null;
try {
qbCopy = qb.clone();
} catch (CloneNotSupportedException e) {
}
public Quarterback clone() throws CloneNotSupportedException {
Quarterback qb = (Quarterback) super.clone();
return qb;
}
Quarterback qbCopy = null;
try {
qbCopy = qb.clone();
} catch (CloneNotSupportedException e) {
}