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