我需要帮助,我有几个案例,我想从一个案例返回另一个案例,但它一直返回到do菜单,例如我点击1然后1然后1然后程序返回第一个案例,登录案例,但我想返回可视化的
public static void main(String[] args) {
int op;
Scanner ler = new Scanner(System.in);
do
{
System.out.println("1 - Iniciar sessão");//login
System.out.println("0 - Terminar programa");//end program
System.out.print("OP-> ");
op = ler.nextInt();
switch(op)
{
case 1:
System.out.println("1 - Visualizar lista encomendas realizadas");//visualize
System.out.println("2 - Listar/adicionar/modificar/eliminar produtos");//modifie/remove/add product
System.out.println("3 - Listar/adicionar/modificar/eliminar clientes");//modifie/remove/add client
System.out.println("4 - Listar/adicionar/modificar/eliminar transporte");//modifie/remove/add transportation
System.out.println("5 - Terminar sessão");//end session
System.out.println("0 - Terminar programa");//end program
System.out.println("OP-> ");
op = ler.nextInt();
switch(op)
{
case 1:
System.out.println("1 - Voltar ao menu principal");//return to menu
System.out.println("OP-> ");
op = ler.nextInt();
break;
case 2:
System.out.println("1 - Listar produtos");
System.out.println("2 - Adicionar produtos");
System.out.println("3 - Modificar produtos");
System.out.println("4 - Eliminar produtos");
System.out.println("5 - Voltar");
System.out.println("OP-> ");
op = ler.nextInt();
switch (op)
{
case 1:
break;
case 2:
break;
default: System.out.println("Opção inválida");
}
break;
case 3:
System.out.println("1 - Listar clientes");
System.out.println("2 - Adicionar clientes");
System.out.println("3 - Modificar clientes");
System.out.println("4 - Eliminar clientes");
System.out.println("5 - Voltar");
System.out.println("OP-> ");
op = ler.nextInt();
switch (op)
{
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
default: System.out.println("Opção inválida");
}
break;
case 4:
System.out.println("1 - Listar transporte");
System.out.println("2 - Adicionar transporte");
System.out.println("3 - Modificar transporte");
System.out.println("4 - Eliminar transporte");
System.out.println("5 - Voltar");
System.out.println("OP-> ");
op = ler.nextInt();
switch (op)
{
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
default: System.out.println("Opção inválida");
}
break;
case 5:
break;
default: System.out.println("Opção inválida");
}
break;
default: System.out.println("Opção inválida");
}
}
while(op!=0);
}
}
答案 0 :(得分:1)
根据using labels in java without "loops"
您可以使用标签来定义要中断的位置。
然而,在紧密嵌套循环之外这样做是非常不正统的。
Scanner ler = new Scanner(System.in);
main:
do {
System.out.println("1 - login");
System.out.println("0 - end program");
System.out.print("OP-> ");
op = ler.nextInt();
switch(op) {
case 1:
menu:
do {
System.out.println("1 - visualise");
System.out.println("2 - modify/remove/add product");
System.out.println("3 - modify/remove/add client");
System.out.println("4 - modify/remove/add transportation");
System.out.println("5 - end session");
System.out.println("0 - end program");
System.out.println("OP-> ");
op = ler.nextInt();
switch(op)
{
case 1:
do{
System.out.println("1 - return to menu");
System.out.println("OP-> ");
op = ler.nextInt();
} while(op!=1)
break menu;
//SNIP
}
while(true)
答案 1 :(得分:1)
以下是如何将菜单拆分为方法并在正确的位置调用它们的示例。请注意,每个菜单都包含一个循环。此外,您的op
变量在所有菜单上都是相同的,这使它们无法正常工作。
static Scanner ler;
public static void menuClientes(){
int op= 0;
while (op!= 5){
System.out.println("1 - Listar clientes");
System.out.println("2 - Adicionar clientes");
System.out.println("3 - Modificar clientes");
System.out.println("4 - Eliminar clientes");
System.out.println("5 - Voltar");
System.out.println("OP-> ");
op = ler.nextInt();
switch (op) {
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
default:
System.out.println("Opção inválida");
}
}
}
public static void menuTransporte(){
int op= 0;
while (op!= 5){
System.out.println("1 - Listar transporte");
System.out.println("2 - Adicionar transporte");
System.out.println("3 - Modificar transporte");
System.out.println("4 - Eliminar transporte");
System.out.println("5 - Voltar");
System.out.println("OP-> ");
op = ler.nextInt();
switch (op) {
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
default:
System.out.println("Opção inválida");
}
}
}
public static void menuPrincipal(){
int op= 0;
while (op!= 5){
System.out.println("1 - Visualizar lista encomendas realizadas");// visualize
System.out.println("2 - Listar/adicionar/modificar/eliminar produtos");
System.out.println("3 - Listar/adicionar/modificar/eliminar clientes");
System.out.println("4 - Listar/adicionar/modificar/eliminar transporte");
System.out.println("5 - Terminar sessão");
System.out.println("0 - Terminar programa");
System.out.println("OP-> ");
op = ler.nextInt();
switch (op) {
case 1:break;
case 2:break;
case 3: menuClientes();break;
case 4: menuTransporte(); break;
case 5: return;
default:
System.out.println("Opção inválida");
}
}
}
public static void main(String[] args) {
int op;
ler = new Scanner(System.in); //the declarion of this variable was put on the class itself to be accessible by all methods
do {
System.out.println("1 - Iniciar sessão");// login
System.out.println("0 - Terminar programa");
System.out.print("OP-> ");
op = ler.nextInt();
switch (op) {
case 1: menuPrincipal();break;
default:
System.out.println("Opção inválida");
}
} while (op != 0);
}
答案 2 :(得分:0)
最好将每个switch语句分成它们自己的函数/方法。这样你就可以给它们适当的名字(即让它们更容易阅读每个开关选项的意图)。重新组织代码还可以让您更好地了解执行路径在返回时的位置,而不是使用您指示从所有开关退出并返回到do-while循环的break。
同样按照1,1,1的示例导致一个中断,退出该切换到另一个中断,这会中断到第三个中断,让你回到do-while循环中。因此,如果您需要重新显示第二个选项的选项,则需要另外一个循环。
e.g。 (为了让你开始。这也没有经过测试,只是为了大致了解将开关选项分成功能。)
public static void main(String[] args) {
int op;
Scanner ler = new Scanner(System.in);
do
{
System.out.println("1 - Iniciar sessão");//login
System.out.println("0 - Terminar programa");//end program
System.out.print("OP-> ");
op = ler.nextInt();
op = Login(op, ler);
}
while (op != 0);
}
public static int Login(int op, Scanner ler)
{
switch (op)
{
case 0: // terminate program
return 0;
case 1:
DisplayOptions(ler);
return 1;
}
}
public static int DisplayOptions(Scanner ler)
{
do
{
System.out.println("1: visualize");
System.out.println("2: modify");
... etc...
System.out.println("0: terminate program");
int op = ler.nextInt();
switch (op)
{
case 1:
op = Visualize(ler);
break;
case 2:
op = Modify(ler);
break;
case 0:
System.out.println("Exiting program");
break;
default:
System.out.println("invalid input");
}
}
while (op != 0);
}
public static int Visualize(Scanner ler)
... etc ...