Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

[Projeto] Adicionando nomes com Scanner

Fiz o código considerando a entrada dos nomes pelo usuário :)

Tem como otimizar esse código?

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

public class AddElementosNaLista {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        List<String> listaNomes = new ArrayList<>();

        System.out.println("Escreva os nomes de cada funcionário (Digite 0 para sair): ");
        String nomeFunc = input.nextLine();

        while (!nomeFunc.equals("0")) {
            listaNomes.add(nomeFunc);
            System.out.println("Escreva os nomes de cada funcionário (Digite 0 para sair): ");
            nomeFunc = input.nextLine();
        }

        System.out.println("Lista de funcionários: " + listaNomes);
    }
}
4 respostas

Isso ai Yasmin.

Continue assim!

solução!

Seu código está bom, Yasmin. Contudo, há algumas melhorias que podem ser aplicadas para deixá-lo mais otimizado em termos de legibilidade e manutenção. No seu código atual, você fere um dos princípios mais importantes: o DRY (Don't Repeat Yourself), que significa "Não se repita". Isso é prejudicial do ponto de vista da manutenção, pois, ao invés de alterar algo em um único local, você precisaria modificar cada ocorrência duplicada — o que é custoso.

Isso acontece no seu código com as seguintes instruções:
System.out.println("Escreva os nomes de cada funcionário (Digite 0 para sair): ");
e
String nomeFunc = input.nextLine();
que se repetem nas linhas 12 e 13, e novamente nas linhas 17 e 18.

Para resolver isso, você pode utilizar uma estrutura do-while, que sempre executa o bloco ao menos uma vez antes de fazer a verificação condicional.

Aqui estão duas formas que propus para tornar o seu código mais fácil de manter e, principalmente, mais legível:

Do While

package com.github.rickmvi.challenge18;

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

public class AddElementList {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        List<String> listaNomes = new ArrayList<>();

        do {
            System.out.println("Escreva os nomes de cada funcionário (Digite 0 para sair): ");
            String nome = input.nextLine();
            if (nome.equals("0"))
                break;
            listaNomes.add(nome);
        } while (true);

        System.out.println("\nLista de Funcionarios");
        listaNomes.forEach(nome -> System.out.println("- " + nome));
        input.close();
    }
}

While

package com.github.rickmvi.challenge18;

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

public class AddElementList2 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        List<String> listaNomes = new ArrayList<>();

        while (true) {
            System.out.println("Escreva os nomes de cada funcionário (Digite 0 para sair): ");
            String nomeFunc = input.nextLine();
            if (nomeFunc.equals("0")) break;
            listaNomes.add(nomeFunc);
        }

        System.out.println("\nLista de funcionários:");
        listaNomes.forEach(nome -> System.out.println("- " + nome));
        input.close();
    }
}

Dessa forma, se o nome do funcionário for igual a "0", o loop é encerrado imediatamente, evitando a repetição desnecessária de código.

Mais uma dica: sempre que finalizar um programa, é recomendado fechar o Scanner utilizando .close() no final, para evitar que ele continue consumindo recursos desnecessariamente e para que o programa seja encerrado de forma correta.