gpt4 book ai didi

java - Java 中的递归以及类(class)对象和先决条件

转载 作者:行者123 更新时间:2023-12-02 08:46:15 25 4
gpt4 key购买 nike

美好的一天,有没有比使用 switch 语句更有效的方法来解决这个递归问题。在我的类(class)类中,我有一个类(class)和先决条件的递归关联,然后在 PreReqs 类中设置 preReqs。当用户进入一个有 preReqs 的类(class)时,如何打印出该类(class)的所有 preReqs?现在我正在使用 switch 语句并单独打印每个 preReq,但是有没有更好的方法仍然使用递归来做到这一点?

举个例子:如果用户输入该类(class),所有的 preReqs 也将打印出来。

ACS-3947 Algorithm Design
prereq: ACS-2947 Data Structures and Algorithms
ACS-2947 Data Structures and Algorithms
prereq: ACS-1904 Programming Fundamentals II
ACS-1904 Programming Fundamentals II
prereq: ACS-1903 Programming Fundamentals I
ACS-1903 Programming Fundamentals I
no prereq

类(class)类别:

import java.util.*;
public class Course
{
protected String courseNumber;
protected String courseName;
protected Course prerequisite;

public Course(){
courseNumber = courseName = "Unknown";
prerequisite= null;
}

public Course (String cn, String num){
this.courseNumber=num;
this.courseName=cn;
}

public String getCourseNumber(){
return courseNumber;
}
public String getCourseName(){
return courseName;
}
public Course getPreReq(){
return prerequisite;
}

public void setCourseNumber(String courseNumber){
this.courseNumber=courseNumber;
}
public void setCourseName(String courseName){
this.courseName=courseName;
}
public void setPreReq(Course pr){
prerequisite =pr;
}

}

PreReq 类:

import java.util.*;
import java.io.*;
public class Prereqs
{
public static void main (String [] args){
Scanner kb = new Scanner (System.in);

Course nineteen03 = new Course ("Programming Fundamentals I","ACS-1903");
Course nineteen04 = new Course ("Programming Fundamentals II"," ACS-1904");
Course two47 = new Course ("Data Structures and Algorithms","ACS-2947 ");
Course three47 = new Course ("Algorithm Design","ACS-3947");
Course two09 = new Course ("Internet Programming","ACS-2909");
Course three09 = new Course ("Advanced Internet Programming ","ACS-3909");

nineteen04.setPreReq(nineteen03);
two47.setPreReq(nineteen04);
three47.setPreReq(two47);
two09.setPreReq(nineteen03);
three09.setPreReq(nineteen03);
System.out.println("Enter course number with the format: AAA-999");
String input = kb.next();

validate(input);
}

public static void course(Course nineteen04, Course nineteen03,Course two47, Course three47, Course two09, Course three09, String input ){
Course c1 = nineteen04.getPreReq();
Course c2 = two47.getPreReq();
Course c3 = three47.getPreReq();
Course c4 = two09.getPreReq();
Course c5 = three09.getPreReq();

switch (input){
case "ACS-1904":
System.out.println(nineteen04.getCourseName()+" "+nineteen04.getCourseNumber());
System.out.println("preReq: " + c1.getCourseName()+ " "+ c1.getCourseNumber());

}

}

public static String validate (String input)
{
String arg = input;

boolean valid = arg.length()==7;

if (!valid){
throw new IllegalArgumentException("Not the correct format: AAA-999");
}
valid = arg.charAt(3) == '-';
if(!valid) {
throw new IllegalArgumentException("Not the correct format: AAA-999");
}
for(int i=0; i < 3 && valid; i++){
valid = ((i == 3 && Character.isLetter(arg.charAt(i))));
}

for(int i=3; i < 3 && valid; i++){
valid = ((i==6 && Character.isDigit(arg.charAt(i))));
}
return arg;
}
}

最佳答案

递归方法需要包含终止递归的条件。您的类(class)列表及其先决条件让我想起了一个链接列表,其中每门类(class)都指向其先决条件。当我们到达没有先决条件的类(class)时,该列表终止。以下代码是您的Course类,添加了一个主方法(从您的 Prereqs 类导入)和我命名为 requirements() 的递归方法。我还添加了方法toString()使类(class)列表及其先决条件的显示更加“人类可读”。您可以通过更改传递给方法 requirements() 的初始调用的类(class)来进行实验。 .

public class Course {
protected String courseNumber;
protected String courseName;
protected Course prerequisite;

public Course(){
courseNumber = courseName = "Unknown";
prerequisite= null;
}

public Course (String cn, String num){
this.courseNumber=num;
this.courseName=cn;
}

public String getCourseNumber(){
return courseNumber;
}

public String getCourseName(){
return courseName;
}

public Course getPreReq(){
return prerequisite;
}

public void setCourseNumber(String courseNumber){
this.courseNumber=courseNumber;
}

public void setCourseName(String courseName){
this.courseName=courseName;
}

public void setPreReq(Course pr){
prerequisite =pr;
}

public String toString() {
return courseNumber + " " + courseName;
}

private static void requirements(Course c) {
if (c == null) {
return;
}
else {
System.out.println(c);
requirements(c.getPreReq());
}
}

public static void main(String[] args) {
Course nineteen03 = new Course ("Programming Fundamentals I","ACS-1903");
Course nineteen04 = new Course ("Programming Fundamentals II"," ACS-1904");
Course two47 = new Course ("Data Structures and Algorithms","ACS-2947 ");
Course three47 = new Course ("Algorithm Design","ACS-3947");
Course two09 = new Course ("Internet Programming","ACS-2909");
Course three09 = new Course ("Advanced Internet Programming ","ACS-3909");

nineteen04.setPreReq(nineteen03);
two47.setPreReq(nineteen04);
three47.setPreReq(two47);
two09.setPreReq(nineteen03);
three09.setPreReq(nineteen03);

requirements(three09);
}
}

运行上面的代码会显示以下内容:

ACS-3909 Advanced Internet Programming 
ACS-1903 Programming Fundamentals I

关于java - Java 中的递归以及类(class)对象和先决条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61065850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com