Ver Mensaje Individual
  #6 (permalink)  
Antiguo 08/02/2011, 14:09
Avatar de jcMouse
jcMouse
 
Fecha de Ingreso: noviembre-2009
Ubicación: Bolivia
Mensajes: 116
Antigüedad: 14 años, 5 meses
Puntos: 9
Respuesta: Novato en Java

vamos por partes dijo jack el destripador

lo primero que debes saber es que en la programacion orientada a objetos, haces eso, utilizas objetos y cada objeto tiene sus propios metodos lo que lo diferencia de la programacion estructura

ahora el applet esta bien y hace lo que tiene que hacer, lo que tu debes hacer es analizar el codigo parte por parte, debes comprender que es lo que hace:

Código java:
Ver original
  1. public class applet extends Applet  {
  2.    int n;
  3.    contador laCuenta;
  4.  
  5.   // Constructor…
  6.   public applet () {
  7.       //se crea el objeto, el valor es 0
  8.     laCuenta = new contador();
  9.   }
  10.  
  11.   public void paint (Graphics g) {
  12.     g.drawString ("Contando", 20, 20);
  13.     //se obtiene y se pinta el valor del objeto = 0
  14.     g.drawString (String.valueOf(laCuenta.getCuenta()), 20, 35 );
  15.     //se incrementa el valor de la cuenta = 1 y se asiga a la variable "n"
  16.     n = laCuenta.incCuenta();
  17.     //se pinta el nuevo valor = 1 que esta en la variable "n"
  18.     g.drawString (String.valueOf(n), 20, 50 );
  19.     //se incrementa el valor de la cuenta = 2
  20.     laCuenta.incCuenta();
  21.     //se pinta el valor = 2
  22.     g.drawString (String.valueOf(laCuenta.getCuenta()), 20, 65 );
  23.     //se incrementa y se pinta el valor = 3
  24.     g.drawString (String.valueOf(laCuenta.incCuenta()), 20, 80 );
  25.   }
  26.  
  27. }

hasta aqui el objeto contador tiene el valor de 3

el metodo PAINT pinta lo que ves en el applet una y otra vez, y por tanto ejecuta todo el codigo que este dentro del PIANT una y otra vez, es por eso que al redimensionar el applet se ejecuta el codigo del objeto "cuenta", pero no desde cero, ¿porque? porque no estas creando el objeto de nuevo, sino estas utilizando el mismo objeto y como este objeto tenia el valor 3, comienza desde ahi, en el siguiente ciclo, este tendra el valor de 6,9,12, etc

si no quieres que eso suceda, lo unico que tienes que hacer es CREAR EL OBJETO DE NUEVO

el codigo queda de la siguiente forma:

Código PHP:
public class applet extends Applet  {
   
int n;
   
contador laCuenta;

  
// Constructor…
  
public applet () {
    
  }
  
  public 
void paint (Graphics g) {
    
//se crea el objeto, el valor es 0
    
laCuenta = new contador();
    
g.drawString ("Contando"2020);
    
//se obtiene y se pinta el valor del objeto = 0
    
g.drawString (String.valueOf(laCuenta.getCuenta()), 2035 );
    
//se incrementa el valor de la cuenta = 1 y se asiga a la variable "n"
    
laCuenta.incCuenta();
    
//se pinta el nuevo valor = 1 que esta en la variable "n"
    
g.drawString (String.valueOf(n), 2050 );
    
//se incrementa el valor de la cuenta = 2
    
laCuenta.incCuenta();
    
//se pinta el valor = 2
    
g.drawString (String.valueOf(laCuenta.getCuenta()), 2065 );
    
//se incrementa y se pinta el valor = 3
    
g.drawString (String.valueOf(laCuenta.incCuenta()), 2080 );
  }


asi no importa cuantas veces redimensiones el applet, siempre pintara los valores 0,1,2,3 porque estas creando el objeto cada vez, esto claro no es lo mas eficiente, otra forma es modificar el codigo de la clase "contador" e implementr un metod que reinicie el contador a CERO

Código PHP:
public class contador {            
  
int cnt;    
  public 
contador() {            
      
cnt 0;                    
  }

  public 
int incCuenta() {            
      
cnt++;                
            return 
cnt;                
      }
  public 
int getCuenta() {        
      return 
cnt;                
      }  
  
//NUEVO METODO
 
public void reiniciar(){
    
cnt 0;
 } 
 

y el applet queda
Código PHP:
public class applet extends Applet  {
   
int n;
   
contador laCuenta;

  
// Constructor…
  
public applet () {
    
//se crea el objeto, el valor es 0
    
laCuenta = new contador();
  }
  
  public 
void paint (Graphics g) {    
    
g.drawString ("Contando"2020);
    
//se obtiene y se pinta el valor del objeto = 0
    
g.drawString (String.valueOf(laCuenta.getCuenta()), 2035 );
    
//se incrementa el valor de la cuenta = 1 y se asiga a la variable "n"
    
laCuenta.incCuenta();
    
//se pinta el nuevo valor = 1 que esta en la variable "n"
    
g.drawString (String.valueOf(n), 2050 );
    
//se incrementa el valor de la cuenta = 2
    
laCuenta.incCuenta();
    
//se pinta el valor = 2
    
g.drawString (String.valueOf(laCuenta.getCuenta()), 2065 );
    
//se incrementa y se pinta el valor = 3
    
g.drawString (String.valueOf(laCuenta.incCuenta()), 2080 );
    
//se reinicia el contador a CERO
    
laCuenta.reiniciar();
  }


y listo

se malo, malisimo
__________________
Problem?
Estoy aquí
Foro Code Army