Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Curso Avanzado de Java SE

Curso Avanzado de Java SE

Anahí Salgado Díaz de la Vega

Anahí Salgado Díaz de la Vega

Instanciando clases estáticas anidadas

14/39
Recursos

Aportes 18

Preguntas 4

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Faltó validar que cuando se esté en la primera pagina del libro y el usuario marque la opción 1, que aunque no se muestre en pantalla la opción, igual la marque no disminuya en uno a i ya que tomará valor de -1 y esto generará una Exception al leer el ArrayList.

int response = AmazonUtil.validateUserResponseMenu(0, 2);
if(response == 2){
     i++;
 } 
//faltó poner que esto se haga mientras i sea mayor a 0
else if(response == 1 && i>0){       
     i--;
 } else if(response == 0){
     break;
 }

Acá dejo mi versión del la clase Book, yo preferí manejar un método makePagesForBook() dentro de la clase Page ya que en mi opinión es mejor manejar lo más desacopladas posible las clases. Igual es solo otra forma de hacerlo.
Book

import com.erosennin.amazonviewer.utils.Utils;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class Book extends Publication implements Visualizable {

    private int id;
    private String isbn;
    private ArrayList<Page> pages;
    private Date startDate;

    public Book(String title, String editorial, String[] authors, Date publicationDate, String isbn, boolean readed,
                ArrayList<Page> pages) {
        super(title, editorial, authors, publicationDate);
        super.setReaded(readed);
        this.isbn = isbn;
        this.pages = pages;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getId() {
        return id;
    }

    public String getIsbn() {
        return isbn;
    }

    public static List<Book> makeBooksList() {
        List<Book> books = new ArrayList<>();
        String[] authors = new String[3];
        for (int i = 1; i < authors.length; i++) {
             authors[i] = "Author " + i;
        }
        for (int i = 1; i < 6; i++) {
            books.add(new Book("Book " + i, "Editorial " + i, authors, new Date(),"ISBN " + i,
                    false, Page.makePagesForBook()));
        }
        return books;
    }

    public int getLastPageReaded() {
        int lastPageReaded = 0;
        for (int i = 0; i < pages.size(); i++) {
            if (pages.get(i).isReaded().equals("No")) {
                lastPageReaded = pages.get(i).getNumber() - 1;
                if (i != 0) {
                    lastPageReaded--;
                }
                break;
            } else if (i == pages.size() - 1) {
                lastPageReaded = pages.size() - 1;
            }
        }
        return lastPageReaded;
    }

    public void view() {
        startToSee(new Date());
        int lastPageReaded = getLastPageReaded();
        System.out.println(lastPageReaded);
        do {
            System.out.println("\n :: " + getTitle() + " :: ");
            System.out.println("\n...Page " + pages.get(lastPageReaded).getNumber() + "...");
            System.out.println(".........");
            System.out.println(pages.get(lastPageReaded).getContent());
            System.out.println(".........\n");
            pages.get(lastPageReaded).setReaded(true);
            if (lastPageReaded != 0) {
                System.out.println("1. Previous Page");
            }
            System.out.println("2. Next Page");
            System.out.println("0. Close Book");
            String option = Utils.validateUserResponseMenu(2);
            switch (option) {
                case "2":
                    lastPageReaded++;
                    break;
                case "1":
                    if (lastPageReaded != 0) {
                        lastPageReaded--;
                    } else {
                        System.out.println("\nThat option doesn't exist, please choose another.\n");
                    }
                    break;
                case "0":
                    lastPageReaded = pages.size();
                    break;
            }
        } while (lastPageReaded < pages.size());
        stopToSee(new Date());
        System.out.println("\n::YOU JUST SAW::\n" + toString());
        setReaded(true);
    }

    @Override
    public String toString() {
        StringBuilder printerAuthors = new StringBuilder();
        String[] authors = getAuthors();
        for (String author : authors) {
            printerAuthors.append(author).append(", ");
        }
        printerAuthors.delete(printerAuthors.length() - 2, printerAuthors.length() - 1);
        return "\n::BOOK::" +
                "\nTitle: " + getTitle() +
                "\nPublisher: " + getEditorial() +
                "\nAuthors: " + printerAuthors +
                "\nPublication Date: " + new SimpleDateFormat("dd/MM/yyyy").format(getPublicationDate()) +
                "\nISBN: " + getIsbn() +
                "\nReaded: " + isReaded() +
                "\nPages: " + pages.size();
    }

    @Override
    public void startToSee(Date startDate) {
        this.startDate = startDate;
    }

    @Override
    public void stopToSee(Date endDate) {
        if (startDate.getTime() < endDate.getTime()) {
            setTimeReaded((int) (endDate.getTime() - startDate.getTime()));
        } else {
            setTimeReaded(0);
        }
    }

    @Override
    public void setReaded(boolean readed) {
        super.setReaded(readed);
        for (Page page : pages) {
            if (page.isReaded().equals("No")) {
                super.setReaded(false);
                break;
            }
        }
    }


    public static class Page {

        private int id;
        private int number;
        private String content;
        private boolean readed;

        public Page(int number, String content) {
            this.number = number;
            this.content = content;
        }

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        public int getNumber() {
            return number;
        }

        public String getContent() {
            return content;
        }

        public String isReaded() {
            return (readed) ? "Yes" : "No";
        }

        public void setReaded(boolean readed) {
            this.readed = readed;
        }

        public static ArrayList<Page> makePagesForBook() {
            ArrayList<Page> pages = new ArrayList<>();
            for (int i = 1; i < 7; i++) {
                pages.add(new Page(i, "Content...\nContent...\nContent...\nContent..."));
            }
            return pages;
        }
    }
}

Y acá dejo mi clase Utils para referencia:
Utils

package com.erosennin.amazonviewer.utils;

import java.util.Scanner;
import java.util.concurrent.TimeUnit;

public class Utils {

    public static boolean isNotNumber(String string) {
        boolean res = false;
        if (string.length()==0){
            res = true;
        }
        for (int i = 0; i < string.length(); i++) {
            if (!Character.isDigit(string.charAt(i))){
                res = true;
                break;
            }
        }
        return res;
    }

    public static String validateUserResponseMenu(int size) {
        Scanner scanner = new Scanner(System.in);
        String option = scanner.next();
        if (Utils.isNotNumber(option)) {
            System.out.println("\nThat option doesn't exist, please choose another.\n");
            option = "";
        } else if (Integer.parseInt(option) < 0 || size < Integer.parseInt(option)) {
            System.out.println("\nThat option doesn't exist, please choose another.\n");
            option = "";
        }
        return option;
    }

    public static void timeDelay(int seconds) {
        try {
            TimeUnit.SECONDS.sleep(seconds);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

Y acá dejo mi proyecto completo en GitHub para los que los quieran revisar:
https://github.com/shiroukamui/JavaSE-Basico

Las clases anidadas nos ofrecen una buena legibilidad de código, ¿como? se preguntaran.

Existen clases que inevitablemente van a trabajar o a estar fuertemente relacionadas con otras clases, si bien podemos crear estas clases en otro lugar e igualmente funcionarían, anidar clases te permite agrupar aquellas que trabajan juntas.

En lo personal creo que un buen programador se da la oportunidad de probar la herramienta antes de criticarla y decidir no usarla.

¡Muy buen curso Anahí!

Excelente implementación de las clases estáticas anidadas.

Que fácil hace las clases Ann, excelente explicación.

excelente explicación!!!1

Que buena clase, gracias annCode

Buenas comunidad, si buscan la clase de amazonUtil, posiblemente la conseguiran en extension .class, asi que las voy a dejar en extension .java para que la puedan descargar.

https://mega.nz/#!dYRDUIgI!YP6KK0ro92-_RBi0tYIn8g4QHUGZwg7UW6wq4XEc3N0

Mencionan demasiado " la logica de negocio " Alguien tiene algun libro/guia de ejercicios con " logica de negocio " cosa de practicar?

Profe que rápido ud lee jajaj, genial esa didáctica para el uso de la clase estática

Que mentirota no hicieron la clase AmazoUtil! en el curso anterior 😠

Aquí esta el código de AmazonUtil.java

<package com.anncode.util;

import java.util.Scanner;

public class AmazonUtil {
	
	public static int validateUserResponseMenu(int min, int max) {
		//Leer la respuesta del usuario
		Scanner sc = new Scanner(System.in);
		
		//Validar respuesta int
		while(!sc.hasNextInt()) {
			sc.next();
			System.out.println("No ingresaste una opción válida1");
			System.out.println("Intenta otra vez1");
		}
		
		int response = sc.nextInt();
		
		//Validar rango de respuesta
		while(response < min || response > max) {
			//Solicitar de nuevo la respuesta
			System.out.println("No ingresaste una opción válida");
			System.out.println("Intenta otra vez");
			
			while(!sc.hasNextInt()) {
				sc.next();
				System.out.println("No ingresaste una opción válida");
				System.out.println("Intenta otra vez");
			}
			response = sc.nextInt();
		}
		System.out.println("Tu Respuesta fue: " + response + "\n");
		return response;
	}

}>

Excelente presentación

Muy interesante

Muchas gracias por mostrarnos el uso de las clases estáticas anidadas instructora Anahí.

Excelente explicación 😃 gracias anncode

Genial.

No nos quejemos de lo de AmazonUtil, veamoslo como una oportunidad para aprender. Yo cree un paquete y dentro del paquete la clase que hacia falta. El codio le puedes dar copy and paste si lo quieres poner en tu codigo , sino usa el de Ana.