Java 奇怪的错误-不';打破菜单后,我什么也不做

Java 奇怪的错误-不';打破菜单后,我什么也不做,java,switch-statement,Java,Switch Statement,这是课程作业。我建立了整个程序,它做的每件事都是正确的,除了这件事 我有一个叫做“Schedule”的类这个方法在Schedule的末尾: public void bookSeatMenu() { boolean leaveBookSeatMenu = false; String seatBookingMenuStr; int seatBookingMenuInt = 14; boolean isInteger = false;

这是课程作业。我建立了整个程序,它做的每件事都是正确的,除了这件事

我有一个叫做“Schedule”的类这个方法在Schedule的末尾:

public void bookSeatMenu()
    {   boolean leaveBookSeatMenu = false;
        String seatBookingMenuStr;
        int seatBookingMenuInt = 14;
        boolean isInteger = false;
        Scanner input = new Scanner(System.in);
        System.out.println("Press 1 to add an individual booking, 2 to cancel a booked seat or 3 to go back");

        seatBookingMenuStr = input.nextLine();
                  try {
                      seatBookingMenuInt = Integer.parseInt(seatBookingMenuStr);
                      isInteger = true;
                    }

                    catch (NumberFormatException e) {

                    }
                  switch (seatBookingMenuInt) {
                      case 1: 
                        bookSeat();
                        break;
                      case 2:
                        cancelSeat();
                        break;
                      case 3:
                        leaveBookSeatMenu = true;
                        break;
                      default:
                        System.out.println("Invalid Choice");
                    } while (leaveBookSeatMenu == false);

                } 
我知道你们都知道切换菜单是什么样子的,但我想我还是把它放进去吧,以防万一(请原谅我的双关语)我这里出了问题

接下来,我有了
bookSeat
方法,用户可以在这里预订座位(这很好)。然后,它会显示
bookSeatMenu()
,只显示菜单。但是它不会回到上一个

   public void bookSeat()
   {
       Scanner input = new Scanner(System.in);
       boolean isSeatBooked = true;
       showSeatPlan();
       int seatNum = 0;
       int rowNum = 90;
       int columnNum = 16;
       boolean isInt = false;

       while (isSeatBooked == true)
       {
           System.out.println("Please pick column of a seat to book");
           columnNum = input.nextInt();

           System.out.println("Please pick row of a seat to book");
           rowNum = input.nextInt();


           seatNum = (columnNum + ((rowNum) * 15));

           if (seats[seatNum] == false)
           {
               isSeatBooked = false;
           }
           else
           {
               System.out.println("This seat is already booked");
            }
       }

       seats[seatNum] = true;


       System.out.println("");
       bookSeatMenu();
   }
现在,无论是爱情还是金钱,我都无法让它在预定座位后回到上一份菜单

基本上,这个过程是:

预订座位-->转至书本菜单-->按4键返回-->到达上一菜单

如果我没有预订座位,程序会很高兴地返回到前面的菜单,但之后,它只会继续在命令提示符中进入新行,不做任何其他操作,没有错误等

我很想说这可能是BlueJ的一个问题,尽管一个坏工人责备他的工具,我不想成为“那个家伙”


我还需要做一个“测试班”——以前从未使用过“测试班”,而作业要求我们查看“教科书”,没有人愿意买,我其实不知道

没有
开关…while
所以我假设你的问题是一旦你选择了3,你就会进入
while(true)这是一个无限循环

正确的伪代码:

do {
   // read System.in

   // handle menu options with your switch
} while(...)
顺便说一句,设计很糟糕,你应该试着考虑一下你的模型(在你的例子中,我会看到像
房间
座位
调度程序
菜单
)并让这些对象相互作用:

public class Room {
    private Seat[][] seats;
    public String toString() {
        // like showSeatPlan() using toString() of Seat
    }
}

public class Seat {
    private int row, column;
    private boolean isBooked;
    public void book() { /* ... */ }
    public void cancel() { /* ... */ }
    public String toString() { /* "X" or " " */ }
}

public final class Scheduler {
   // "main class" with a "main" method
}

public class Menu {
    private Room room;
    public String toString() {
        // print out menu
    }
    public void bookSeat() { /* ... */ }
    public void cancelSeat() { /* ... */ }
}
(差不多)

对于测试零件,每个类别都有一个测试类别,每个方法都有一个测试方法,例如
座椅

public class Seat {
    public void book() { 
        if (this.isBooled) {
           throw new CannotBookException("seats is taken!");
        }
        this.isBooled = true;
    }
}

public class SeatTest {
    @Test // when I book a seat, it's markedas booked.
    public void testBook() {
        final Seat seat = new Seat();
        seat.book();
        assertTrue(seat.isBooked)
    }

    @Test(expected = CannotBookException.class) // when I book an already booked seat, I get an exception.
    public void testBookAlreadBooked() {
        final Seat seat = new Seat();
        // book the seat
        seat.book();
        assertTrue(seat.isBooked)

        // try to book again
        seat.book();
    }
}

没有
开关…while
所以我假设你的问题是一旦你选择了3,你就会进入
while(true)这是一个无限循环

正确的伪代码:

do {
   // read System.in

   // handle menu options with your switch
} while(...)
顺便说一句,设计很糟糕,你应该试着考虑一下你的模型(在你的例子中,我会看到像
房间
座位
调度程序
菜单
)并让这些对象相互作用:

public class Room {
    private Seat[][] seats;
    public String toString() {
        // like showSeatPlan() using toString() of Seat
    }
}

public class Seat {
    private int row, column;
    private boolean isBooked;
    public void book() { /* ... */ }
    public void cancel() { /* ... */ }
    public String toString() { /* "X" or " " */ }
}

public final class Scheduler {
   // "main class" with a "main" method
}

public class Menu {
    private Room room;
    public String toString() {
        // print out menu
    }
    public void bookSeat() { /* ... */ }
    public void cancelSeat() { /* ... */ }
}
(差不多)

对于测试零件,每个类别都有一个测试类别,每个方法都有一个测试方法,例如
座椅

public class Seat {
    public void book() { 
        if (this.isBooled) {
           throw new CannotBookException("seats is taken!");
        }
        this.isBooled = true;
    }
}

public class SeatTest {
    @Test // when I book a seat, it's markedas booked.
    public void testBook() {
        final Seat seat = new Seat();
        seat.book();
        assertTrue(seat.isBooked)
    }

    @Test(expected = CannotBookException.class) // when I book an already booked seat, I get an exception.
    public void testBookAlreadBooked() {
        final Seat seat = new Seat();
        // book the seat
        seat.book();
        assertTrue(seat.isBooked)

        // try to book again
        seat.book();
    }
}

你发了很多代码,但只有半句关于这个问题的话。请描述什么不起作用。如果您认为代码不相关,请将其删除。我以前从未使用过
扫描仪
,但我可以想象您不想创建多个绑定到
系统中的。创建一个,并将其传递给您的方法。@Greg我现在对这个问题又添加了一点,尽管我很难解释这个错误。我没有收到任何错误或类似的,只是它没有做我需要的事情,即在预订座位后返回上一个菜单。扫描器不必出现在每种方法中,但在这方面仍有大量的简化工作要做。您发布了很多代码,但关于这个问题只有半句话。请描述什么不起作用。如果您认为代码不相关,请将其删除。我以前从未使用过
扫描仪
,但我可以想象您不想创建多个绑定到
系统中的。创建一个,并将其传递给您的方法。@Greg我现在对这个问题又添加了一点,尽管我很难解释这个错误。我没有收到任何错误或类似的,只是它没有做我需要的事情,即在预订座位后返回上一个菜单。扫描器不必在每种方法中都使用,但在这方面仍有大量的简化工作要做。哦,很好的发现!-除非您的意思是
while(true)-
while(false)
是一个非常短的循环。编辑:事实上,
while(false)
由于无法访问代码而产生编译错误。完全相同的解决方案在同一程序的不同菜单中工作,执行类似的操作,我完全理解您的意思,它对案例1和案例2都是如此!非常非常感谢你的帮助,我错过了一个“doa”{a方法的顶部!结果是46小时不睡觉,对我不太好!哦,很好地发现了!-除了你的意思是
while(true);
--
while(false)
是一个很短的循环。编辑:事实上,
while(false);
由于无法访问代码而产生编译错误。完全相同的解决方案在同一程序的不同菜单中工作,执行类似的操作,但我完全理解您的意思,它在案例1和案例2中都会这样做!非常感谢您的帮助,我错过了一个“do”{a最好的方法!结果是46小时不睡觉,对我不太好!