【问题标题】:Infinite loop issue with SQLSQL 的无限循环问题
【发布时间】:2019-05-10 19:54:22
【问题描述】:

我的搭档早些时候问过,但没有运气,所以我想我会试试。我们在这里有一个程序,我们正在处理它导致我们无法解决的无限循环问题。基本上,该程序适用于电影租赁店员工,他被问到 8 个不同的选项,他可以选择一个作为回报将执行特定路径的代码。提示之一是“退出”选项,简而言之,我们希望员工继续提示他想要的选项,这些选项将执行任何代码,直到该员工选择提示 8 退出并因此终止程序。相反,我们在员工选择的每个选择中都会收到一个无限循环。例如,如果他选择提示 1 来显示所有电影,它只会无休止地一遍又一遍地显示电影。任何有关如何解决此问题的建议将不胜感激。

import java.sql.*;
import java.util.Scanner;

public class MovieRentalDatabase {

   public static void main(String[]args){

      Scanner input = new Scanner(System.in);

      Connection conn = null;

      try 
      {
         conn =
            DriverManager.getConnection("jdbc:mysql://cs.neiu.edu:3306/18f315_Cody?serverTimezone=UTC&" +
                                   "user=18f315_Cody&password=");

         Statement stmt = conn.createStatement();



         System.out.println();
         System.out.println("Welcome To Windy City Video Employee Portal");
         System.out.println();



         System.out.println("Menu Choices: ");
         System.out.println("1. List All Movies Available");
         System.out.println("2. List All Customers From Rental Database");
         System.out.println("3. Add a New Movie To List");
         System.out.println("4. Enroll a New Member");
         System.out.println("5. Search Movies");
         System.out.println("6. Delete Movies From Store"); 
         System.out.println("7. Search For A Member ");
         System.out.println("8. Quit.");
         System.out.println();
         System.out.print("Enter your choice: ");
         int a = input.nextInt();
         System.out.println();
         int countmin =13;
         int countmax = 15;

         while(a != 8)
         {


         while(a < 1 || a > 8)
         {
            System.out.println("Choice Entered is Invalid!");
            System.out.println("Please Try Again");
            System.out.print("Enter your choice: ");
            a = input.nextInt();
            System.out.println();  
         }


         //If user input is 1
         if(a == 1)
         {
            String sql3 = "SELECT * FROM Movie";
            ResultSet rs = stmt.executeQuery(sql3);


            while(rs.next()){

               int movieID = rs.getInt("MovieID");
               String movieName = rs.getString("MovieName");
               Date release = rs.getDate("releaseDate");

            //display values from the sql statements from above
               System.out.println("MovieID: " + movieID);
               System.out.println("Movie Name: " + movieName);
               System.out.println("Release Date: " + release);
               System.out.println();
            } 
            rs.close();

         }


         //If user input is 2
         if(a == 2)
         {

            String sql4 = "SELECT * FROM MemberSignUp";
            ResultSet rs1 = stmt.executeQuery(sql4);

            while(rs1.next()){

               int memberID = rs1.getInt("MemberID");
               String firstName = rs1.getString("FirstName");
               String lastName = rs1.getString("LastName");

            //display values from the sql statements from above
               System.out.println("MemberID: " + memberID);
               System.out.println("First Name: " + firstName );
               System.out.println("Last Name: " + lastName);
               System.out.println();
            } 
            rs1.close();

         }

         //If user input is 3
         if(a == 3)
         {
            input.nextLine();
            System.out.print("Enter a New MovieID Number: ");
            String sql5 = input.nextLine();


            System.out.print("Enter The Movie Name: ");
            String sql6 = input.nextLine();

            System.out.print("Enter The Release Date: ");
            String sql7 = input.nextLine();

            String sql8 = "INSERT INTO Movie VALUES(" + sql5 + "," + "'" + sql6 + "'" + "," + "'" + sql7 + "');";


            stmt.executeUpdate(sql8);

         } 

         //If user input is 4
         if(a == 4)
         {
            input.nextLine();
            System.out.print("Enter a New MemberID Number: ");
            String sql9 = input.nextLine();
            int result = Integer.parseInt(sql9);


            while(result <= countmin || result >= countmax)
            {
               System.out.println();
               System.out.println("You Have Entered a MemberID That Already Exists!");
               System.out.println("Please use " + (countmin + 1) + " as the new MemberID");
               System.out.println();

               System.out.print("Enter a New MemberID Number: ");
               sql9 = input.nextLine();
               result = Integer.parseInt(sql9);
            }   


            System.out.print("Enter First Name: ");
            String sql10 = input.nextLine();

            System.out.print("Enter Last Name: ");
            String sql11 = input.nextLine();

            String sql12 = "INSERT INTO MemberSignUp VALUES(" + sql9 + "," + "'" + sql10 + "'" + "," + "'" + sql11 + "');";


            stmt.executeUpdate(sql12);
            countmin++;
            countmax++;

         } 

         //If user input is 5
         if(a == 5)
         {
            input.nextLine();

            System.out.print("Enter MovieID Number: ");
            String sql15 = input.nextLine();


            System.out.print("Enter Movie Name: ");
            String sql14 = input.nextLine();
            System.out.println();

            String sql16 = "Select MovieID, MovieName, releaseDate from Movie Where MovieName = " + "'"  + sql14 + "'" + "or MovieID = " + "'" + sql15 + "'" ;
            ResultSet rs2 = stmt.executeQuery(sql16);

            while(rs2.next()){

               int mID = rs2.getInt("MovieID");
               String mName = rs2.getString("MovieName");
               Date release1 = rs2.getDate("releaseDate");

               System.out.println("MovieID: " + mID);
               System.out.println("Movie Name: " + mName);
               System.out.println("Release Date: " + release1);
               System.out.println();

            } 
            rs2.close();
         }

         //If user input is 6
         if(a == 6)
         {
            input.nextLine();

            System.out.print("Enter MovieID Number: ");
            String sql17 = input.nextLine();


            System.out.print("Enter Movie Name: ");
            String sql18 = input.nextLine();

            System.out.println();
            System.out.println("Movie Sucessfully Deleted!");

            String sql19 = "DELETE FROM Movie Where MovieID = " + "'" + sql17 + "' AND MovieName = '" + sql18 + "'";
            stmt.executeUpdate(sql19);

         }

         //if user input is 7
         if(a == 7)
         {
            input.nextLine();

            System.out.print("Enter MemberID Number: ");
            String sql20 = input.nextLine();


            System.out.print("Enter First Name: ");
            String sql21 = input.nextLine();

            System.out.print("Enter Last Name: ");
            String sql22 = input.nextLine();

            String sql23 = "Select MemberID, FirstName, LastName from MemberSignUp Where MemberID = " + "'"  + sql20 + "'" + "or FirstName = " + "'" + sql21 + "'" + "or LastName = " + "'" + sql22 + "'" ;
            ResultSet rs3 = stmt.executeQuery(sql23);

            System.out.println();
            while(rs3.next()){

               int member = rs3.getInt("MemberID");
               String memberName = rs3.getString("FirstName");
               String memberLast = rs3.getString("LastName");

               System.out.println("MemberID: " + member);
               System.out.println("First Name: " + memberName);
               System.out.println("Last Name: " + memberLast);
               System.out.println();

            } 
            rs3.close();

         }


         //If user input is 8
         if(a == 8)
         {
            System.out.println();
            System.out.println("Enjoy The Rest Of Your Day!");
            System.exit(0);
         }

         }

      }catch (SQLException ex) 
      {
         // handle any errors
         System.out.println("SQLException: " + ex.getMessage());
         System.out.println("SQLState: " + ex.getSQLState());
         System.out.println("VendorError: " + ex.getErrorCode());
      }

   }
}

【问题讨论】:

  • 代码太多,试试去掉无用的打印等,因为现在很难
  • @azro 如果有帮助的话,可以减少一点
  • 什么情况下会出现这个死循环,你给什么输入?而且菜单选择没有循环,所以你不能选择第二个菜单
  • @JoakimDanielson 允许我编辑我没有正确插入的代码。
  • @JoakimDanielson 循环发生在 int countmax 变量之后,例如,如果用户输入提示 1 以显示数据库中的所有电影。它应该转到 a == 1 的 if 语句,执行该 if 语句中的代码完成该 if 语句,然后询问用户另一个选择。但是在这种情况下,如果用户输入选项 1,它将继续循环并显示所有电影,或者如果用户输入选项 2,它将继续循环并一遍又一遍地显示所有成员。

标签: java sql loops while-loop


【解决方案1】:

移动所有这些行:

    System.out.println("Menu Choices: ");
    System.out.println("1. List All Movies Available");
    System.out.println("2. List All Customers From Rental Database");
    System.out.println("3. Add a New Movie To List");
    System.out.println("4. Enroll a New Member");
    System.out.println("5. Search Movies");
    System.out.println("6. Delete Movies From Store");
    System.out.println("7. Search For A Member ");
    System.out.println("8. Quit.");
    System.out.println();
    System.out.print("Enter your choice: ");
    a = input.nextInt();  
    System.out.println();

紧接着:

while (a != 8) {

所以在每次迭代开始时,都会向用户呈现菜单。
在while循环之前初始化变量a

int a = 0;

int a = input.nextInt(); 中删除int
您的代码太长,无法测试,但我认为这将解决无限循环问题。

【讨论】:

  • 我认为这解决了它!我将对其进行更多测试并让您知道。谢谢!
猜你喜欢
  • 2018-09-24
  • 1970-01-01
  • 2023-03-28
  • 2014-09-03
  • 2021-09-02
  • 2020-09-09
  • 2021-09-11
  • 1970-01-01
相关资源
最近更新 更多