How do I display the book with the most pages?

0

I've tried a lot of things 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 with this option, I thank you for making it 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);
   }
}
    
asked by anonymous 11.11.2017 / 06:24

1 answer

1

Failed to update book with more pages within if , and else also does not make sense to be otherwise "Nenhum Registro Encontrado" message may appear multiple times. For the same reason, the bulk message should only be shown after for is finished.

Do this before:

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 for starts soon in 1 , because if 0 is initially considered the largest, there is no need to re-test this element.

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

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

    
11.11.2017 / 15:26