2012-06-26 16 views
5

Soy un nuevo estudiante de programación informática. Vi un video sobre Java, composición básica, y el hombre en el video hice un ejemplo sobre este tema como este:Nuevo programador Java, composición básica de Java

public class PaperTray 
{ 
    int pages = 0; 
    .... 
    public boolean isEmpty() 
    { 
    return pages > 0; 
    } 
} 

public class Printer extends Machine 
{ 
    private PaperTray paperTray = new PaperTray(); 
    .... 
    public void print(int copies) 
    { 
    .... 
    while(copies > 0 && !paperTray.isEmpty()) 
    { 
    System.out.println("some text to print"); 
    copies--; 
    } 
    if(paperTray.isEmpty()) 
    { 
    System.out.println("load paper"); 
    } 
} 

Mi pregunta es si la bandeja de papel está vacía, entonces en clase PaperTray el método isEmpty() devolverá falso. Por lo tanto, la instrucción if en la clase Impresora no se ejecutará. Y si la bandeja de papel no está vacía, el método es Vacío() en la clase PaperTray devolverá verdadero, por lo que la instrucción while en la clase Impresora no se ejecutará. ¿Estoy equivocado o el instructor del video cometió algunos errores?

Gracias

+0

ha nombrado el método en PaperTray como isEmpty(), por lo que, lógicamente, debe volverse verdadero cuando la bandeja está vacía. –

+0

Este código está escrito por el instructor llamado John Sonmez en la página PluralSight – ngunha02

+0

+1 para detectar el error :-) –

Respuesta

3

si la bandeja de papel está vacía, entonces en la clase PaperTray el método isEmpty() regresará false

Debe devolver true (para cualquier aplicación sensata, es decir :-) . Para un método llamado isEmpty(), el sentido común dicta que devuelve true cuando el objeto/colección de inclusión está vacío, y false cuando no está vacío.

En otras palabras, la implementación que muestra arriba tiene un error.

+0

por lo que el valor inicial de las páginas es 0, por lo que si la bandeja está vacía, lo que significa que las páginas son 0, 0 no pueden ser mayor que 0, por lo que el método esEmpty() debería devolver false ?? – ngunha02

+0

@JackyNguyen, de hecho lo hace - * ahora *. Es por eso que escribí que la implementación actual de 'isEmpty()' es incorrecta: debería devolver 'true' cuando - y solo cuando -' pages == 0'. –

5

La lógica de la isEmpty no tiene sentido: me harían lo esperaba, ya sea

public boolean isEmpty() { 
    return pages == 0; 
} 

o

public boolean isNotEmpty() { 
    return pages > 0; 
} 
+0

Lo cambié para devolver páginas == 0; y retorcido un poco en el ciclo while, funciona ahora. Gracias. – ngunha02

0

Si lo que dice es correcto. isEmpty() debería devolver verdadero cuando está vacío. Probablemente un error en la parte de instructores.

0

Falta algo en el código: cuando se realizan copias, solo se decrementa copies. Pero el código también debería disminuir el valor de pages en PaperTray; de lo contrario, no se utiliza ningún papel para hacer las copias.

Cuando eso sucede, el código está bien:

while(copies > 0 && !paperTray.isEmpty()) 
{ 
System.out.println("some text to print"); 
copies--; 
} 
if(paperTray.isEmpty()) 
{ 
System.out.println("load paper"); 
} 

Asimismo, mantendrá haciendo que el número de copias que desee, siempre y cuando no hay papel en la bandeja. Cuando ya no quede papel, el ciclo while saldrá. De cualquier manera, se realiza una comprobación al final para indicar al usuario que rellene la bandeja de papel cuando esté vacía.

+0

Sí, también hay un método para disminuir el valor de las páginas en PaperTray, pero mi punto aquí es si el instructor en el video cometió un error con el método isEmpty(), y si el método esEmpty() devuelve true si el papel la bandeja no está vacía – ngunha02

0

Parece que hay un par de problemas con este código:

public boolean isEmpty(){ 
    //return pages > 0; this doesnt make sense 
    return pages==0; 
} 

public void print(int copies){ 
    while(copies > 0 && !paperTray.isEmpty()){ 
     System.out.println("some text to print"); 
     pages--;//this is not enough. You need to decrement copies as well 
    } 

    if(paperTray.isEmpty()) 
     System.out.println("load paper"); 
} 
2

soy el instructor del vídeo. Gracias por detectar este error. Estás en lo correcto. En algún punto de la grabación del video, debo haber tenido el> 0 allí en lugar de < = 0.

Buena captura.Debe ser

public class PaperTray 
{ 
    int pages = 0; 
    .... 
    public boolean isEmpty() 
    { 
    return pages <= 0; 
    } 
} 

he comprobado el código de ejemplo para el supuesto que se puede descargar y es correcta y en todas partes esa clase aparece en el curso, por lo que debe haber sido sólo que un punto.

Gracias de nuevo por detectar ese error y mis disculpas por el error y la confusión que le costó. Es de esperar que aún pueda beneficiarse del curso.

+1

Hola John, me gusta mucho tu curso, es realmente útil especialmente la colección y el módulo genérico. Espero que publiques más cursos avanzados de Java, como programación en java con base de datos, ... De nuevo, gracias. – ngunha02

Cuestiones relacionadas