Como eu poderia resolver esse erro quando eu volto para o menu depois de ter cadastrado uma placa.
package POO;
import java.util.Scanner;
public class Estacionamento {
public static void main(String[] args) {
MenuEstacionamento();
}
static void MenuEstacionamento() {
Object matriz[][] = new Object[10][4];
Scanner input = new Scanner(System.in);
System.out.println("Iniciando");
boolean flag = true;
int opcao;
while (flag) {
System.out.println("Opcoes");
System.out.println("1 - Cadastrar vaga");
System.out.println("2 - Encerrar vaga");
System.out.println("0 - Sair");
System.out.print("Informe a opcao desejada: ");
opcao = input.nextInt();
switch (opcao) {
case 1: {
CadastrarVaga(matriz);
break;
}
case 2: {
ListarVagas(matriz);
break;
}
case 0: {
flag = false;
break;
}
default: {
System.out.println("Opcao invalida");
break;
}
}
}
input.close();
}
static void ListarVagas(Object matriz[][]) {
;
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 3; j++) {
System.out.println("Vaga: " + (i + 1) + " Placa: " + matriz[i][0]);
}
}
}
static void CadastrarVaga(Object matriz[][]) {
Scanner input = new Scanner(System.in);
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 2; j++) {
if (matriz[i][0] == null) {
System.out.println("Vaga " + (i + 1) + " disponivel");
System.out.print("Informe sua placa: ");
matriz[i][0] = input.next().toUpperCase();
} else if (matriz[i][1] == null) {
System.out.print("Informe a hora: ");
}
}
int opcao;
System.out.println("Opcoes");
System.out.println("1 - continuar");
opcao = input.nextInt();
if (opcao == 1) {
continue;
} else {
break;
}
}
input.close();
}
}
Não testei mais acho que são seus BREAK se você rodar e ele sair do programa é certeza que é os BREAK tira fora.
Fiz algumas mudanças e comentários no seu código, não aprofundei nas melhorias por que o intuito não é esse, tendo dúvidas só postar certo? abraços
*Detalhe importante, estude sobre colisões em posições de array, seu algoritmo esta travado quando a isso e vai dar erro.
*Outro detalhe é que após você entender colisões e como tratar, você deve inserir elementos na sua matriz em posições de forma dinâmica e não fixa como fez, quando coloca isso: matriz[i][0]
*Deixei o código comentando um pouco para seu entendimento
boa sorte…
public class Estacionamento {
public static void main(String[] args) {
MenuEstacionamento();
}
static void MenuEstacionamento() {
Object matriz[][] = new Object[10][4];
Scanner input = new Scanner(System.in);
System.out.println("Iniciando");
boolean flag = true;
int opcao;
while (flag) {
System.out.println("Opcoes");
System.out.println("1 - Cadastrar vaga");
System.out.println("2 - Encerrar vaga");
System.out.println("0 - Sair");
System.out.print("Informe a opcao desejada: ");
opcao = input.nextInt();
switch (opcao) {
case 1: {
CadastrarVaga(matriz);
break;
}
case 2: {
ListarVagas(matriz);
break;
}
case 0: {
flag = false;
break;
}
default: {
System.out.println("Opcao invalida");
break;
}
}
}
input.close();
}
static void ListarVagas(Object matriz[][]) {
;
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 3; j++) {
System.out.println("Vaga: " + (i + 1) + " Placa: " + matriz[i][0]);
}
}
}
static void CadastrarVaga(Object matriz[][]) {
Scanner input = new Scanner(System.in);
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 2; j++) {
if (matriz[i][0] == null) {
System.out.println("Vaga " + (i + 1) + " disponivel");
System.out.print("Informe sua placa: ");
matriz[i][0] = input.next().toUpperCase();
} else if (matriz[i][1] == null) {
//Aqui coloquei a informação da hora em uma posição vazia da matriz checando colisão(bem simples você deve aprimorar)
//para isso foi usado while (Você não estava fazendo nada após o system.out.println. de Informe a hora
System.out.print("Informe a hora: ");
boolean horaCadastrada = false;
int posicao = 1;
while(!horaCadastrada && matriz[i+posicao++][i] == null){
matriz[i][i] = input.next().toUpperCase();
horaCadastrada = true;
}
}
}
//TODO Avalie este trecho de código
//Pergunta: Qual o intuito do fluxo do sistema solicitar se quer continuar ou não?
//Consideração: Você deve voltar ao menu principal após realizar a operação de cadastrar vaga ou
//usuário permanecer cadastrando novas vagas (faria mais sentindo)
//para isso seu metódo teria de ser recursivo ou implementa-lo usando while
/* FIXME Trecho comentando - Revisar
int opcao;
System.out.println("Opcoes");
System.out.println("1 - continuar");
opcao = input.nextInt();
if (opcao == 1) {
continue;
} else {
break;
}*/
//TODO Nova implementação - Avalie e mude oque julgar necessário a te ajudar.
boolean cadastrarVagas = false;
while(!cadastrarVagas){
System.out.print("\nCadastrar mais vagas? [Sim] - [Não]: ");
String cadastrar = input.next().toUpperCase();
//Validando null point
if(cadastrar != null){
//Verificando variações da opção não
if("Não".toUpperCase().equals(cadastrar.toUpperCase())
|| "N".toUpperCase().equals(cadastrar.toUpperCase())
|| "Nao".toUpperCase().equals(cadastrar.toUpperCase())){
//Como o usuário informou que não quer cadastrar mais vagas (volta ao menu principal)
System.out.print("\n");
MenuEstacionamento();
//Verificando variações da opção sim
}else if("Sim".toUpperCase().equals(cadastrar.toUpperCase())
|| "S".toUpperCase().equals(cadastrar.toUpperCase())){
//Como ele deseja cadastrar novas vagas, então chama-se o metódo novamente para cadastrar vagas.
System.out.print("\n");
CadastrarVaga(matriz);
}else{
//Caso não digite uma opção válida ficará enternamente no loop while.
System.out.print("Opção invalida.");
}
cadastrar = null;
}
}
}
input.close();
}
}