Java-获取堆栈溢出错误

Java-获取堆栈溢出错误,java,Java,这是我的程序,我一直收到这个错误 线程“main”中出现异常 java.lang.StackOverflower错误 这是作业 说明 对于该计划,您需要创建一个四分卫类。 这是一个简单的对象 代表NFL的四分卫。 您可以创建额外的私有资源 您认为有必要或需要的方法 有助于实现该类 司机来了 package quarterback; import java.util.Scanner; public class QBtester { public static void main(S

这是我的程序,我一直收到这个错误

线程“main”中出现异常 java.lang.StackOverflower错误

这是作业

说明
对于该计划,您需要创建一个四分卫类。 这是一个简单的对象 代表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()
方法,如下所示。。。在此之前,通过class
Quarterback
实现
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) {
}