cami-la / collections-java-api-2023

Este repositório é referente ao curso "Collection Framework API Java" e é uma valiosa contribuição para a comunidade de desenvolvedores Java, fornecendo exemplos práticos e recursos educacionais relacionados à poderosa API de coleções da linguagem Java.
https://web.dio.me/course/conhecendo-collections-java/learning/c5d6f4e1-6d05-4eea-93d8-d292c708999f
822 stars 595 forks source link

Erro no método pesquisarPorAutor #50

Closed HelintonAlves closed 2 months ago

HelintonAlves commented 2 months ago

Olá, prof Camila

No meu método de pesquisar por autor (pesquisaPorAutor()), no módulo Conhecendo Collections Java -> aula - List -> Pesquisa List. Fiz a implementação do método pesquisaPorAutor(), conforme mostrado na aula. Porém nos testes o sistema ignorou a pesquisa por autor trazendo todo os elementos da lista. Mesmo passando um valor que não estava na lista trazia alista completa. Esse comportamento ocorreu apenas neste métodos, os demais métodos por período de tempo e título funcionaram corretamente.

Teste aplicado:

`package list.Pesquisa;

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

public class CatalagoLivros {

private List<Livro> livroList;

public CatalagoLivros(){
    this.livroList = new ArrayList<>();
}

public void adicionarLivro(String titulo, String autor, int anoPublicacao){
    livroList.add(new Livro(titulo, autor, anoPublicacao));
}

public List<Livro> pesquisarPorAutor(String autor){
    List<Livro> livrosPorAutor = new ArrayList<>();
    if(!livroList.isEmpty()){
        for (Livro l : livroList){
            if(l.getAutor().equalsIgnoreCase(autor));{
                livrosPorAutor.add(l);
            }
        }
    }

    return livrosPorAutor;
}

public List<Livro> pesquisarPorIntervaloAno(int anoIncial, int anoFinal){
    List<Livro> livrosPorIntervaloAnos = new ArrayList<>();
    if (!livroList.isEmpty()){
        for (Livro l : livroList){
            if (l.getAnoPublicacao() >= anoIncial && l.getAnoPublicacao() <= anoFinal){
                livrosPorIntervaloAnos.add(l);
            }
        }
    }

    return livrosPorIntervaloAnos;
}

public Livro pesquisarPorTitulo(String titulo){
    Livro livroPorTitulo = null;
    if (!livroList.isEmpty()){
        for (Livro l : livroList){
            if (l.getTitulo().equalsIgnoreCase(titulo)){
                livroPorTitulo = l;
                break;
            }else{
                System.out.println("Esse título não foi encontrado na lista de livros");
                break;
            }
        }
    }

    return livroPorTitulo;
}

public static void main(String[] args) {
    CatalagoLivros catalagoLivros = new CatalagoLivros();
    catalagoLivros.adicionarLivro("Livro 1", "Autor 1", 2020);
    catalagoLivros.adicionarLivro("Livro 2", "Autor 2", 2023);
    catalagoLivros.adicionarLivro("Livro 1", "Autor 1", 2020);
    catalagoLivros.adicionarLivro("Livro 3", "Autor 3", 2024);
    catalagoLivros.adicionarLivro("Livro 4", "Autor 4", 2019);

    System.out.println(catalagoLivros.pesquisarPorAutor("Autor 1"));
    System.out.println(catalagoLivros.pesquisarPorTitulo("Livro 1"));
    System.out.println(catalagoLivros.pesquisarPorIntervaloAno(2019, 2021));

}

}

Resultado do teste:

"C:\Program Files\Java\jdk-17\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2024.1\lib\idea_rt.jar=49964:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2024.1\bin" -Dfile.encoding=UTF-8 -classpath D:\workspace\collections-java\ConhecendoCollectionsJava\out\production\ConhecendoCollectionsJava list.Pesquisa.CatalagoLivros [Livro{titulo=' Livro 1', autor=' Autor 1', anoPublicacao= 2020}, Livro{titulo=' Livro 2', autor=' Autor 2', anoPublicacao= 2023}, Livro{titulo=' Livro 1', autor=' Autor 1', anoPublicacao= 2020}, Livro{titulo=' Livro 3', autor=' Autor 3', anoPublicacao= 2024}, Livro{titulo=' Livro 4', autor=' Autor 4', anoPublicacao= 2019}] Livro{titulo=' Livro 1', autor=' Autor 1', anoPublicacao= 2020} [Livro{titulo=' Livro 1', autor=' Autor 1', anoPublicacao= 2020}, Livro{titulo=' Livro 1', autor=' Autor 1', anoPublicacao= 2020}, Livro{titulo=' Livro 4', autor=' Autor 4', anoPublicacao= 2019}] Process finished with exit code 0

Versão do Java:

`C:\Users\Soyo>java --version java 17.0.9 2023-10-17 LTS Java(TM) SE Runtime Environment (build 17.0.9+11-LTS-201) Java HotSpot(TM) 64-Bit Server VM (build 17.0.9+11-LTS-201, mixed mode, sharing)

C:\Users\Soyo>`

A versão da IDE

versao_intellij
GabrielPalitot commented 2 months ago

Olá Helinton. Eu não sou a professora, apenas mais um estudante, mas eu acho que identifiquei o problema. Se você olhar direitinho no seu método pesquisaPorAutor você acabou colocando um ";" no final do if. Olhe:

public List<Livro> pesquisarPorAutor(String autor){
    List<Livro> livrosPorAutor = new ArrayList<>();
    if(!livroList.isEmpty()){
        for (Livro l : livroList){
            if(l.getAutor().equalsIgnoreCase(autor))**;**{
                livrosPorAutor.add(l);
            }
        }
    }

    return livrosPorAutor;
}

Basta você retirar ele que o método irá funcionar perfeitamente. Além disso, use a IDE ao seu favor, erros assim ela pode acabar indicando e lhe ajudando. Caso não tenha ficado claro, pode perguntar.

HelintonAlves commented 2 months ago

Valeu Gabriel, realmente foi um erro de sintaxe mesmo. O estranho que a IDE não indicou o erro, mas observando hoje os Warnings tinha um alerta, mas acabei não percebendo.

cami-la commented 2 months ago

Obrigada, @GabrielPalitot pela ajuda na issue!

@HelintonAlves se tiver dúvidas é só ir falando. Às vezes demoro um pouco para responder, mas estou por aqui! (:

Bons estudos para nós!