Busca em vetor

Gostaria de uma ajuda com meu sistema. Consigo realizar cadastro normal no vetor mas queria que assim que quisesse cadastrasse novamente ele não contasse o vetor do inicio e sim perguntasse qual espaço do vetor desejo salvar. Segue código de cadastro abaixo:

switch (menu) {
                case 1:
                    opc_menu = Integer.parseInt(JOptionPane.showInputDialog("Quantos cadastros deseja realizar?: "));
                    for (i = 1; i <= opc_menu; i++) {
                        nome[i] = JOptionPane.showInputDialog("Nome: ");
                        endereco[i] = JOptionPane.showInputDialog(null, "Endereço: ");
                        email[i] = JOptionPane.showInputDialog(null, "Email: ");
                    }
                    break;
}
int posicao = Integer.parseInt(JOptionPane.showInputDialog("Qual espaço do vetor desejo salvar?: "));
nome[posicao] = JOptionPane.showInputDialog("Nome: ");
endereco[posicao] = JOptionPane.showInputDialog(null, "Endereço: ");
email[posicao] = JOptionPane.showInputDialog(null, "Email: ");

Ao invés de ter um array de objetos do tipo String para os nomes, um array de objetos do tipo String para os endereços e um array de objetos do tipo String para os emails, não seria melhor você ter apenas um array de objetos do tipo Cadastro?

2 curtidas

Ajudou muito essa ideia, o Array pensei em fazer como disse mas no trabalho passado pela instituição que faço parte o professor não permite ser implementado dessa forma. Salvando no vetor dessa forma eu poderia adicionar algo assim?

if(posicao == nome[posicao])
{
  JOptionPane.showMessageDialog("Espaço já preenchido: ");
}

Para poder dar condição de erro em caso de tentar sobrescrever ou adicionar em um cadastro que já exista.

Dessa forma você está comparando se um int é igual à um objeto String, isso não funciona.

Você pode fazer assim:

if (nome[posicao] != null) {
  JOptionPane.showMessageDialog("Espaço já preenchido: ");
}
2 curtidas

Então ficaria assim:

if (nome[posicao] != null) {
  JOptionPane.showMessageDialog("Espaço já preenchido: ");
}
else{
int posicao = Integer.parseInt(JOptionPane.showInputDialog("Qual espaço do vetor desejo salvar?: "));
nome[posicao] = JOptionPane.showInputDialog("Nome: ");
endereco[posicao] = JOptionPane.showInputDialog(null, "Endereço: ");
email[posicao] = JOptionPane.showInputDialog(null, "Email: ");
}

Assim eu consigo cadastrar digamos um valor na posicao 1 e quando for cadastrar de novo se eu colocar na posicao 1 ele exibe que ela já está preenchida? Porque estou tentando fazer algo assim dar certo.

Não, na verdade ficaria assim:

int posicao = Integer.parseInt(JOptionPane.showInputDialog("Qual espaço do vetor desejo salvar?: "));
if (nome[posicao] != null) {
    JOptionPane.showMessageDialog("Espaço já preenchido: ");
} else {
    nome[posicao] = JOptionPane.showInputDialog("Nome: ");
    endereco[posicao] = JOptionPane.showInputDialog(null, "Endereço: ");
    email[posicao] = JOptionPane.showInputDialog(null, "Email: ");
}
2 curtidas

No geral mesmo do sistema está assim:

for (i = 1; i <= opc_menu; i++) {
                        posicao = Integer.parseInt(JOptionPane.showInputDialog("Qual espaço do vetor desejo salvar?: "));
                        if (nome[posicao] == null) {
                            nome[posicao] = JOptionPane.showInputDialog("Nome: ");
                        } else if (nome[posicao] != null) {
                            JOptionPane.showMessageDialog(null, "Espaço já preenchido: ");
                        }
                    }

Queria teu auxílio de novo para fazer o posicao começar a partir do valor 1 pois quando salvo algum dado ele começa do 0 então se eu salvar na posição 2 assim dizendo eu só posso acessar se digitar o número 3. Tem como fazer isso?

Arrays são indexados a partir de 0.

Se você quer:

  • digitar 1 para a cessar a posição 0;
  • digitar 2 para a cessar a posição 1;
  • digitar 3 para a cessar a posição 2;

É só subtrair 1 da posição informada.

2 curtidas

Entendo, mas se eu quisesse deixar a posição [0] com algum valor tipo null talvez eu conseguiria fazer ele iniciar da posição 1?

Arrays tem tamanho estático, definido na hora da instanciação.
Eles são indexados em 0.

Porque você quer deixar a primeira posição null?

O que exatamente você quer fazer?

De alguma forma está dando para salvar no campo 1 e visualizar digitando 1, dessa forma:

    int n = 100;
        int posicao = n;
        String nome[] = new String[n];
for (i = 1; i <= opc_menu; i++) {
                            posicao = Integer.parseInt(JOptionPane.showInputDialog("Qual espaço do vetor desejo salvar?: "));
                            if (nome[posicao] == null) {
                                nome[posicao] = JOptionPane.showInputDialog("Nome: ");
                            } else if (nome[posicao] != null) {
                                JOptionPane.showMessageDialog(null, "Espaço já preenchido: ");
                            }
                        }

O que queria é fazer o que me auxiliou, só que é um trabalho escolar e queria fazer com que salvasse no campo 1 e fosse possível visualizar nele mesmo para não ter um “problema” de entendimento do sistema. Mas deu certo assim, muito obrigado pela ajuda.

Dessa forma você tem um problema de desperdício de memória, pois você está sempre ignorando a primeira posição do array.

Para não ter problemas de entendimento, é só usar nomes de variáveis legíveis:

String nomes[] = new String[100];
for (i = 1; i <= opc_menu; i++) {
    int posicaoDigitada = Integer.parseInt(JOptionPane.showInputDialog("Qual espaço do vetor desejo salvar?: "));
    int posicaoReal = posicaoDigitada - 1;
    if (nomes[posicaoReal] == null) {
        nomes[posicaoReal] = JOptionPane.showInputDialog("Nome: ");
    } else {
        JOptionPane.showMessageDialog(null, "Espaço já preenchido: ");
    }
}