Atividade Java

Boa tarde galera, estou com dificuldade para concluir essa atividade em java, alguém poderia me ajudar?

Uma loja comercial deseja armazenar os dados de seus clientes para envio de mala direta. Você precisa desenvolver uma aplicação para esta loja. O armazenamento dos dados dos clientes será na memória principal do computador usando vetores e os campos são: nome, e-mail, cidade. O aplicativo deverá ter as seguintes funcionalidades disponível em um menu:
a. (1,0 ponto) Cadastrar os dados dos clientes (tamanho máximo de vetor é 1000);
b. (1,0 pontos) Listar os nomes dos clientes que moram em uma determinada cidade;
c. (1,0 pontos) Mostrar o e-mail de um determinado cliente.

Outras pontuações:
(1,0 ponto) método main com uso de menu para a chamada dos métodos.
(1,0 ponto) passagem de parâmetros corretamente.

Isso é o que eu consegui fazer até agora.

package prova;

import java.util.Scanner;

public class AvaliaçãoSubstitutiva {

static Scanner teclado = new Scanner(System.in);

public static void main(String[] args) {

	final int tam = 3;
	String [] nome = new String[tam];
	String [] email = new String[tam];
	String [] cidade = new String[tam];
	char opcao;
	do{
		System.out.println("1. Cadastrar dados dos clientes\n"
				+ "2. Listar nomes dos clientes\n"
				+ "3. Mostrar e-mail de um cliente\n"
				+ "4. Sair");
		opcao = teclado.next().charAt(0);
		switch (opcao){
		case '1':
			cadastrarDados(nome, email, cidade);
			break;
		case '2':
			listarNomesClientes(nome, cidade);
			break;
		case '3':
			mostrarEmailCliente(nome, email);
			break;
		case '4':
			System.out.println("Fim do programa!");
			break;
		default:
			System.out.println("Opção inválida. Tente novamente.");
		}
	}while (opcao != '4');
}
static void cadastrarDados(String [] n, String [] e, String [] c){
	for(int i=0; i<n.length; i++){
		System.out.println("Informe o nome: ");
		n[i] = teclado.next();
		System.out.println("Informe o e-mail: ");
		e[i] = teclado.next();
		System.out.println("Informe a cidade: ");
		c[i] = teclado.next();
	}
}
static void listarNomesClientes(String [] n, String [] c){


}

static void mostrarEmailCliente(String [] n, String [] e){


}

}

1 curtida

Os outros 2 métodos eu não tenho ideia de como fazer.

O melhor seria que vc não usasse arrays separados para nomes, emails e cidades.

E ao invés disso, que criasse uma classe tipo essa:

class Cliente {
  public String nome;
  public String email;
  public String cidade;

  public Cliente(String nome, String email, String cidade) {
    this.nome = nome;
    this.email = email;
    this.cidade = cidade;
  }
}

Assim vc só teria um array tipo esse:

Cliente[] clientes = new Cliente[1000];

Mas seguindo seu raciocinio, o código poderia ser assim:

import java.util.Scanner;

public class Main {
  private static final int MAXIMO_DE_CLIENTES = 1000;

  private static final Scanner teclado = new Scanner(System.in);

  private static int quantidadeDeClientes = 0;

  private static String[] nomes = new String[MAXIMO_DE_CLIENTES];
  private static String[] emails = new String[MAXIMO_DE_CLIENTES];
  private static String[] cidades = new String[MAXIMO_DE_CLIENTES];

  public static void main(String... args) {
    while (true) {
      System.out.println("1. Cadastrar dados dos clientes\n2. Listar nomes dos clientes\n3. Mostrar e-mail de um cliente\n4. Sair");

      final char opcao = teclado.nextLine().charAt(0);

      switch (opcao) {
        case '1':
          cadastrarDados();
          break;
        case '2':
          listarNomesClientes();
          break;
        case '3':
          mostrarEmailCliente();
          break;
        case '4':
          System.out.println("Fim do programa!");
          return;
        default:
          System.out.println("Opção inválida. Tente novamente.");
      }
    }
  }

  static void cadastrarDados() {
    System.out.println("\nCADASTRANDO CLIENTES");

    System.out.println("Informe o nome: ");
    nomes[quantidadeDeClientes] = teclado.nextLine();
    System.out.println("Informe o e-mail: ");
    emails[quantidadeDeClientes] = teclado.nextLine();
    System.out.println("Informe a cidade: ");
    cidades[quantidadeDeClientes] = teclado.nextLine();

    quantidadeDeClientes++;

    System.out.println("CADASTRO REALIZADO COM SUCESSO\n");
  }

  static void listarNomesClientes() {
    System.out.println("\nLISTANDO NOMES DOS CLIENTES");

    for (int i = 0; i < quantidadeDeClientes; i++) {
      System.out.printf("%d: %s\n", i, nomes[i]);
    }

    System.out.println("FIM DA LISTA\n");
  }

  static void mostrarEmailCliente() {
    if (quantidadeDeClientes > 0) {
      System.out.print("\nMOSTRAR EMAIL\nDigite o id do cliente que deseja mostrar: ");

      while (true) {
        try {
          int id = Integer.parseInt(teclado.nextLine());

          if (id >= 0 && id < quantidadeDeClientes)
            System.out.printf("O email do cliente escolhido é: %s\n\n", emails[id]);
          else
            System.out.println("Cliente não encontrado!\n");
          return;
        } catch (NumberFormatException e) {
          System.out.printf("Digite um número válido de 0 até %d: ", quantidadeDeClientes - 1);
        }
      }
    } else {
      System.out.println("Não há clientes cadastrados\n");
    }
  }
}

Quando for pedir o nome de alguma coisa, nunca use o método next(), use sempre o nextLine(), isso porque o next() não lida com nomes que contém espaços, então se vc digitar “Ana Paula”, ele só pegaria o “Ana”.

1 curtida