How do I show the book with the most pages?

Asked

Viewed 52 times

0

I’ve tried a lot of stuff and it’s just this Option case 4 which is to show the book with the most amount of pages that is missing.

If you have someone to help me in this option I thank you because it is difficult.

package projeto;
import java.util.ArrayList;
import java.util.Scanner;

public class Sistema {

    public static void main(String[] args) {
        Scanner ler = new Scanner(System.in);
        ArrayList<Cadastro> vetor = new ArrayList<Cadastro>();
        int codigoDoLivro,paginas,qntdEmEstoque, opcao;
        String titulo,autor,categoria;
        double valorDoLivro;
        Cadastro cadastro;

        do {
            System.out.println("Segue lista de opções");
            System.out.println("1 - Cadastrar Livro\n" + "2 - Editar Dados Pelo Código\n" + "3 - Listar Livros por Categoria\n" + "4 - Livro com Maior Quantidade de Páginas\n" + "5 - Valor total dos Livros em Estoque\n" + "6 - Média do Valor de todos os Livros\n" + "7 - Sair");
            opcao = ler.nextInt();

            switch(opcao){
            case 1:
                System.out.println("Entre com o Código do Livro");
                codigoDoLivro = ler.nextInt();
                System.out.println("Entre com a Quantidade de Páginas");
                paginas = ler.nextInt();
                System.out.println("Entre com a Quantidade em Estoque");
                qntdEmEstoque = ler.nextInt();
                System.out.println("Entre com o Nome do Livro");
                titulo = ler.next();
                System.out.println("Entre com o Nome do Autor do Livro");
                autor = ler.next();
                System.out.println("Entre com a Categoria do Livro (Ex: Administração, direito, ficção)");
                categoria = ler.next();
                System.out.println("Entre com o Valor deste Livro");
                valorDoLivro = ler.nextDouble();

                vetor.add(new Cadastro(codigoDoLivro, paginas, qntdEmEstoque, titulo, autor, categoria, valorDoLivro));
                break;
            case 2:
                System.out.println("Entre com o Código do Livro");
                codigoDoLivro = ler.nextInt();

                for (int i = 0; i < vetor.size(); i++) {
                    Cadastro aux = vetor.get(i);

                if(codigoDoLivro == aux.getCodigoDoLivro()) {
                    System.out.println("Entre com a Quantidade de Páginas");
                    aux.setPaginas(ler.nextInt());
                    System.out.println("Entre com a Quantidade em Estoque");
                    aux.setQntdEmEstoque(ler.nextInt());
                    System.out.println("Entre com o Nome do Livro");
                    aux.setTitulo(ler.next());
                    System.out.println("Entre com o Nome do Autor do Livro");
                    aux.setAutor(ler.next());
                    System.out.println("Entre com a Categoria do Livro");
                    aux.setCategoria(ler.next());
                    System.out.println("Entre com o Valor do Livro");
                    aux.setValorDoLivro(ler.nextDouble());
                    } else {
                        System.out.println("Nenhum Registro Encontrado\n");
                    }

                aux.print();

                }
                break;
            case 3:
                System.out.println("Entre com a Categoria");
                categoria = ler.next();

                for(int i2 = 0; i2 < vetor.size(); i2++) {
                    Cadastro aux3 = vetor.get(i2);

                    if(categoria.equals(aux3.getCategoria())) {
                        aux3.print();
                    } else {
                        System.out.println("Nenhum Registro Encontrado\n");

                    }
                }
                break;
            case 4:
                Cadastro teste = vetor.get(0);

                for(int i3 = 0; i3 < vetor.size(); i3++) {
                    Cadastro aux2 = vetor.get(i3);
                    if(aux2.getPaginas() > teste.getPaginas()) {
                        System.out.println("O Livro é: " + aux2.getTitulo());
                    } else {
                        System.out.println("Nenhum Registro Encontrado");
                    }
                }
                break;

            case 5:
                int soma = 0;

                for (int i=0; i < vetor.size(); i++) {
                    Cadastro aux4 = vetor.get(i);
                    soma += aux4.getQntdEmEstoque();
                }

                if (soma != 0){
                    System.out.println("O número de livros em estoque é: " + soma);
                } else {
                    System.out.println("Nenhum Registro Encontrado");
                }

                break;
                case 6:
                double media = 0;
                int soma2 = 0;
                for (int i=0; i < vetor.size(); i++) {
                    Cadastro aux4 = vetor.get(i);
                    soma2 += aux4.getValorDoLivro();
                    media = soma2/vetor.size();
                }

                if (media > 0){
                    System.out.println("A média dos valores dos livros: " + media);
                } else {
                    System.out.println("Nenhum Registro Encontrado");
                }

                break;

            }

       } while (opcao != 7);
   }
}

1 answer

1

Failed to update the book with more pages inside the if, and the else it also makes no sense to be otherwise the message "Nenhum Registro Encontrado" can appear several times. For the same reason the larger message should only be shown after the for break up.

Do it like this:

case 4: 
    if (vetor.size() == 0){
        System.out.println("Nenhum Registro Encontrado");
    }
    else {
        Cadastro maior = vetor.get(0); //assume-se que o maior é o primeiro

        for(int i3 = 1; i3 < vetor.size(); i3++) {
            Cadastro corrente = vetor.get(i3);

            if(corrente.getPaginas() > maior.getPaginas()) {
                maior = corrente;
            }
        }

        System.out.println("O Livro é: " + maior.getTitulo());
    }  
    break;

Note that the for starts right at the 1, for if the 0 is initially considered the largest there is no need to re-test this element.

I also changed the names of the variables. Good programming practices say that variable names should be evident and representative of what they hold. A name like teste or aux2 little or nothing says and makes the code difficult to read if not cryptic. Imagine what it was to assign as variable names a, b, c, ... Not even the author of the code will know what they were for after a while.

When you have variables with names repeated over several cases, such as the i, can use { } in each case that solves the problem, and avoid having to invent alternative names.

  • Thank you so much for the explanation it never occurred to me this whole semester of my college to put a go on Else.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.