首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >方法在同一方法中调用

方法在同一方法中调用
EN

Stack Overflow用户
提问于 2016-03-03 14:50:04
回答 1查看 55关注 0票数 0

我正在工作的一个小应用程序,将允许学生加入一个班级时,选择。我希望用户能够按ID选择一个学生,按ID选择一个类,并将用户添加到该类中。这是可行的,但在学生被添加之后,我希望程序能够询问学生是否想参加另一个班,而不是重新设置整个程序,然后必须返回。

我想我已经接近解决方案了,但是不知道如何让我的方法(signUp())回到方法的一半。这有道理吗?一旦学生被输入一个班级,并选择了“加入另一个类”,我想返回到代码中的粗体注释。

对不起,如果这是长篇大论和混乱,我是新手,所以我感谢你的耐心!

代码语言:javascript
运行
复制
static void signUp() {
        System.out.println("\nSign Up For a Class\n");
        try {
          Scanner input = new Scanner(System.in);
          System.out.println("Enter Student ID: ");
          String user_entered_student_id = input.nextLine();

          Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/ClassSelector?autoReconnect=true&useSSL=false", "", "");
          Statement myStmt = con.createStatement();
          Statement myStmt2 = con.createStatement();
          Statement myStmt3 = con.createStatement();

          ResultSet rs;
          rs = myStmt.executeQuery("SELECT student_name FROM ClassSelector.students WHERE student_id = " + user_entered_student_id);
          while (rs.next()) {
            String userEnterId = rs.getString("student_name");
            System.out.println("Is " + userEnterId + " the correct student? (Y/N)");
            String confirm = input.nextLine();

            if (confirm.equals("Y") || confirm.equals("y")) {
              ResultSet rs2 = myStmt2.executeQuery("SELECT * FROM ClassSelector.classes");
              while (rs2.next()) {
                String avlClasses = rs2.getString("class_id") + "\t" + rs2.getString("classname") + "\t" + rs2.getString("description");
                System.out.println(avlClasses);
              }
            } else if (confirm.equals("N") || confirm.equals("n")) {
              System.out.println("Oops, let start over");
              return;
            }
    **//RETURN TO THIS SECTION OF CODE AND PROCEEED**
            System.out.println("Enter Class ID from Classes Listed Above to Join: ");
            String selectedClass = input.nextLine();
            ResultSet rs3 = myStmt3.executeQuery("SELECT * FROM ClassSelector.classes WHERE class_id = " + selectedClass);
            while (rs3.next()) {
              String innerJoin = (userEnterId + " has been added to " + rs3.getString("classname") + " " + rs3.getString("class_id"));
              System.out.println(innerJoin);
              String student_classJoin = "INSERT IGNORE INTO student_x_class" + "(student_id,student_name, class_id, classname)" + "VALUES (?, ?, ?, ?)";
              PreparedStatement pStmt = con.prepareStatement(student_classJoin);
              pStmt.setString(1, user_entered_student_id);
              pStmt.setString(2, userEnterId);
              pStmt.setString(3, rs3.getString("class_id"));
              pStmt.setString(4, rs3.getString("classname"));
              pStmt.executeUpdate();
              System.out.println("Would you like to enroll " + userEnterId + " into another class? (Y/N)");
              String additionalClass = input.nextLine();
              if(additionalClass.equals("Y") || additionalClass.equals("y")){
                  signUp();
              }
            }
          }
        } catch (java.sql.SQLException SQL) {
          SQL.printStackTrace();
        } catch (Exception EXC) {
          EXC.printStackTrace();
        }

      }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-03 15:02:43

这段代码非常混乱。但是让我们后退一步,看看一些伪代码,它可能代表您要寻找的那种结构。

让我们从正在执行的操作开始。就像这样:

代码语言:javascript
运行
复制
studentID = prompt("enter a student ID");
student = get_from_data(studentID);
courseID = prompt("enter a course ID");
course = get_from_data(courseID);
insert_in_data(studentID, courseID);

细节非常特定于实现,但一般来说,您的主要逻辑方法在语义上应该非常类似于此。实际上,将代码提取到小的单独方法中通常是一个非常好的主意,在这些方法中,方法名描述正在执行的操作。然后,整个步骤序列读起来就像一个描述业务流程的简短故事。

现在,你想重复这个结构吗?这就是循环的作用。就像这样:

代码语言:javascript
运行
复制
while(!someTerminatingCondition) {
    // the steps above
}

现在我们只需要定义这个条件。它是基于用户输入的,对吗?所以就像这样:

代码语言:javascript
运行
复制
shouldContinue = true;
while(shouldContinue) {
    // the steps above
    shouldContinue = prompt("continue?");
}

为了给谷歌提供一些东西,你所描述的通常被称为“游戏循环”。这个想法是,整个过程应该一次又一次地重复,直到满足某些特定的条件。(在一场比赛中,这个条件就是胜利者的决心。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35775379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档