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”.