Implementação de Gerenciamento de Identificadores com ArrayList em Java

Requisitos do Desafio

O objetivo deste exercício é desenvolver um sistema de gerenciamento de números de identificação (IDs) utilizando a estrutura de dados ArrayList em Java. O programa deve processar uma série de comandos de entrada para manipular a lista de identificadores.

  1. add: Seguido por um inteiro n, indicando a quantidade de IDs a serem inseridos. Antes da inserção, o sistema deve validar o ID (após remover espaços em branco nas extremidades, o comprimento da string deve ser exatamente 18). Se o ID for válido e não estiver na lista, ele é adicionado ao final. Se já existir, nanhuma ação de inserção é tomada.
  2. del: Seguido por uma string idStr, solicitando a remoção deste ID da lista.
  3. search: Seguido por uma string idStr, solicitando a busca deste ID. Se encontrado, o programa deve exibir seu índice; caso contrário, deve exibir -1.
  4. info: Exibe a quantidade total de elementos na lista, seguido pela impressão de cada elemento em uma nova linha.
  5. clear: Remove todos os elementos armazenados na lista.

Exemplo de Entrada

add
8
330226196605054190
34080019810819327X
330226196605054190
34080019810819327X
   653222196603062607   
   2312
 653222196603062607 
    444444444444444
info
del
330226196605054191
del
330226196605054190
search
330226196605054191
search
34080019810819327X
clear
info
end

Exemplo de Saída

exist
exist
exist
3 add success
3
330226196605054190
34080019810819327X
653222196603062607
del failed
del success
-1
0
0

Aspectos Técnicos Fundamenatis

  • Validação de Dados: Durante a operação de adição, é crucial sanitizar a string removendo espaços em branco (trim()) e verificar se o comprimento resultante é igual a 18. Além disso, deve-se verificar a duplicidade antes de inserir o registro.
  • Operações com ArrayList: Aproveitar os métodos nativos da classe ArrayList, como contains() para verificação de duplicidade, remove() para exclusão e indexOf() para busca de índices, otimizando a legibilidade e a performance do código.
  • Processamento de Fluxo de Entrada: Utilizar a classe Scanner para ler comandos e parâmetros de forma sequencial, estruturando o fluxo de controle com blocos switch ou condicionais encadeadas para tratar cada operação de forma isolada.

Estratégia de Implementação

A solução é construída em torno de um loop principal que lê os comandos até encontrar a palavra-chave de encerramento (end). Para o comando add, a lógica de validação foi estruturada para ignorar strings com comprimento inválido, sinalizar com "exist" caso o ID já esteja presente na coleção, e apenas incrementar o contador de sucessos quando uma nova inserção for efetivada. Os demais comandos mapeiam diretamente para as operações correspondentes da interface List do Java.

Código-Fonte Completo

import java.util.Scanner;
import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        Scanner reader = new Scanner(System.in);
        ArrayList<String> records = new ArrayList<>();
        
        while (reader.hasNext()) {
            String action = reader.next();
            
            if ("end".equals(action)) {
                break;
            }
            
            switch (action) {
                case "add":
                    int quantity = reader.nextInt();
                    int successCount = 0;
                    for (int i = 0; i < quantity; i++) {
                        String rawId = reader.next().trim();
                        
                        if (rawId.length() != 18) {
                            continue;
                        }
                        
                        if (records.contains(rawId)) {
                            System.out.println("exist");
                        } else {
                            records.add(rawId);
                            successCount++;
                        }
                    }
                    System.out.println(successCount + " add success");
                    break;
                    
                case "del":
                    String targetDel = reader.next();
                    if (records.remove(targetDel)) {
                        System.out.println("del success");
                    } else {
                        System.out.println("del failed");
                    }
                    break;
                    
                case "search":
                    String targetSearch = reader.next();
                    System.out.println(records.indexOf(targetSearch));
                    break;
                    
                case "info":
                    System.out.println(records.size());
                    for (String record : records) {
                        System.out.println(record);
                    }
                    break;
                    
                case "clear":
                    records.clear();
                    break;
                    
                default:
                    break;
            }
        }
        reader.close();
    }
}

Tags: java ArrayList Scanner Estruturas de Dados Validação de Strings

Publicado em 10-2 02:45