1
resposta

Uso de Array vetores e matrizes em um menu, como encerrar um for ou continuar o loop

Boa tarde meus amigos, estou criando uma lista de menu e tentando criar uma condição dentro do meu for, aonde grava a lista de pedidos do usuário neste caso, e no meio dele pergunte pro usuário caso ele deseja acrescentar mais itens ou encerrar o for e apresentar os pedidos deles, só não consegui fazer essa condição muito bem por não ter total conhecimento no método, se alguém puder me ajudar, agradeço! OBS: os uso dos vetores e a matriz que lista os pedidos são obrigatórios, pois é um projeto da aula.

 using System;

public class Program
{
    public static void Main()
    {
        String[] vetor = new String[5];

        vetor[0] = "Arroz - R$10,00";
        vetor[1] = "Feijão - R$20,00";
        vetor[2] = "Massa - R$12,00";
        vetor[3] = "Verdura - R$13,00";
        vetor[4] = "Bolo - R$15,00";

        String [,] nf = new string[3,3];


        int repita = 0;

        //Lista os itens dos pedidos pro usuário
        Console.WriteLine("*---------Menu-----------*");
        for (int i = 0; i < vetor.Length; i++) {

          Console.WriteLine(" " + i + " ->  "+ vetor[i]); 

        }    
        Console.WriteLine("*------------------------*");



            //Console.WriteLine("Deseja selecionar um prato? 1 para SIM ou 0 para NÃO");
            // repita = int.Parse(Console.ReadLine());

            //if (repita == 1){

            //Pede pro usuario digitar um código do menu e grava os pratos escolhidos na matriz e puxa o valor do vetor
                for (int indexA=0; indexA< nf.GetLength(0);indexA++){
                    for (int indexB=0; indexB< nf.GetLength(1);indexB++){
                        Console.WriteLine("Digite o código do prato selecionado");
                        nf[indexA,indexB] = vetor[int.Parse(Console.ReadLine())];

                        //criar condição se deseja solicitar novamente
                        //caso não, ele sai do loop e apresenta os pratos selecionados
                            Console.WriteLine("Deseja selecionar outro prato novamente? 1 para SIM ou qualquer número para NÃO");
                             repita = int.Parse(Console.ReadLine());

                            if (repita == 1){
                                return;
                            }else{
                                break;
                            }


                   }
                }           



        //}

        //Lista os pratos selecionados
        for (int indexA=0; indexA< nf.GetLength(0);indexA++){
            for (int indexB=0; indexB< nf.GetLength(1);indexB++){
                Console.WriteLine(nf[indexA,indexB]);
            }
        }


    }
}
1 resposta

Olá, existe algumas maneiras de solucionar esse "problema", uma delas é o uso do goto. Não sei o contexto e motivos de criar um array com 3 itens do pedido, por esse motivo coloquei uma validação na "impressão", para que não encha de linhas vazias na tela, lembrando que, da maneira que esta, a impressão vai percorrer o for 9 vezes, mesmo que só tenha um item. Cabe lembrar que se alguém selecionar uma opção fora do intervalo 0 e 4 vai estourar um erro, sugiro que faça sua validação para fins de treinamento.

Não alterei a primeira linha deste código, coloquei como referência do início de alteração.

       Console.WriteLine("Deseja selecionar outro prato novamente? 1 para SIM ou qualquer número para NÃO");
        int.TryParse(Console.ReadLine(), out int repita);// Alterei a conversão de valores para evitar erros
        if (repita == 1)
            break; // você inverteu o tipo de retorno.
        else
            goto ImprimirPedido;
     } // fecha bloco do segundo for
   } // fecha bloco do primeiro for

    ImprimirPedido:
        Console.WriteLine("\n*-------- Imprimindo Pedido --------*");
        //Lista os pratos selecionados
        for (int indexA = 0; indexA < nf.GetLength(0); indexA++)
        {
            for (int indexB = 0; indexB < nf.GetLength(1); indexB++)
            {
                string item = nf[indexA, indexB];
                if (!string.IsNullOrWhiteSpace(item))
                    Console.WriteLine(nf[indexA, indexB]);
            }
        }
    } // fechando método

Espero ter ajudado. Qualquer dúvida, posta aí.