Foros del Web » Programación para mayores de 30 ;) » Java »

metodos en java

Estas en el tema de metodos en java en el foro de Java en Foros del Web. Hola comunidad soy nueva en el foro, Estoy desarrollando un proyecto en java pero me acabo de encontrar con un problema: tengo un metodo que ...
  #1 (permalink)  
Antiguo 15/04/2011, 10:57
 
Fecha de Ingreso: octubre-2009
Mensajes: 21
Antigüedad: 14 años, 6 meses
Puntos: 0
Información metodos en java

Hola comunidad soy nueva en el foro,

Estoy desarrollando un proyecto en java pero me acabo de encontrar con un problema: tengo un metodo que me busca un numero si es que existe y lo almacena en una variable global.. pero cuando invoco el metodo y uso la variable siempre esta en cero...y lo que yo quiero es que me almacene el valor!!


//declaracion variable
private int estado;

//creacion del metodo
public void searchValue(int y, int v) {

for (int m = 0; m < y; m++) {
if (arrayRam.get(m) == v) {
estado = m;
}
}
}

//llamada a metodo
searchValue(i, block_number);
int valor = estado;
if (block_number == arrayRam.get(valor)) {
cache[block_loc] = block_number;
CouTotalMissConfl++;

} else {
cache[block_loc] = block_number;
CouTotalMissCom++;

}
  #2 (permalink)  
Antiguo 15/04/2011, 11:48
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: metodos en java

No sé si tienes claro el concepto de variable "global" (en java no se usa ese término)

Tal y como tienes el código, creas un objeto de la clase que contiene el código que has puesto, ejecutas el método searchValue de dicho objeto y luego lees la variable de instancia de ese objeto. Así que si creas otro objeto de esa clase, la variable estará a cero, ya que es otro objeto o instancia.

Me da la impresión de que tú lo que quieres es usar una variable de clase o static.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #3 (permalink)  
Antiguo 15/04/2011, 11:55
 
Fecha de Ingreso: noviembre-2010
Mensajes: 40
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: metodos en java

Podrías declarar la variable estática y probar si esto te funciona.
  #4 (permalink)  
Antiguo 15/04/2011, 20:36
 
Fecha de Ingreso: octubre-2009
Mensajes: 21
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: metodos en java

Xerelo;
lo siento es que programo en diferentes lenguajes.. bueno gracias por tu ayuda..pero la verdad no te entendi mucho..nose si puedes ayudarme poniendo el codigo por favor lo apreciaria bastante!!
  #5 (permalink)  
Antiguo 15/04/2011, 20:37
 
Fecha de Ingreso: octubre-2009
Mensajes: 21
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: metodos en java

Viri31;
gracias por tu contribucion pero no funciona :(
  #6 (permalink)  
Antiguo 15/04/2011, 22:11
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: metodos en java

Hola,

Cita:
Iniciado por kyc212 Ver Mensaje
... tengo un metodo que me busca un numero si es que existe y lo almacena en una variable global..
Y que seguridad tienes que existe, sino existe no se le asigna nada a la variable.

Saludos,
  #7 (permalink)  
Antiguo 15/04/2011, 22:25
 
Fecha de Ingreso: octubre-2009
Mensajes: 21
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: metodos en java

hola si tengo la seguridad porque le hecho un seguimiento y ademas lo lee de un archivo donde los numeros se repiten..encuentra el numero pero nunca guarda el valor.. esto lo obtiene de un arrayList .. crees que sera por el tipo de dato??


gracias por tu ayuda!!
  #8 (permalink)  
Antiguo 15/04/2011, 23:12
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: metodos en java

Cita:
Iniciado por kyc212 Ver Mensaje
hola si tengo la seguridad porque le hecho un seguimiento y ademas lo lee de un archivo donde los numeros se repiten..encuentra el numero pero nunca guarda el valor.. esto lo obtiene de un arrayList .. crees que sera por el tipo de dato?? ...
Si fuera por el tipo de dato almacenado en el ArrayList, entonces es exactamente lo que estoy diciendo. No lo encuentra, no está, posiblemente está otra cosa.

Pero con el fragmento de código que pusiste no se puede adivinar nada, sino dices que es un ArrayList me podría imaginar que es cualquier otra cosa, inclusive una clase tuya que también tiene un método que por conveniencia también se llama get().

Primero que todo el método searchValue(int y, int v) recibe en Y la cantidad de valores donde debe buscar.

Evidentemente si arrayRam tiene 100 datos, pero le mandas en Y el valor 10, solamente va a buscar en los primeros 10, y aunque haya leído un millón de datos solamente va a buscar en los primeros 10.

Usa el método clásico que usa usa globalmente, perdón, que se usa en todos los lenguajes de programación. Si no aparece en la pantalla 'SI FUE ENCONTRADO', entonces no lo encontró y hay un error de lógica en tu programa.

Código:
public void searchValue(int y, int v) {
  for (int m = 0; m < y; m++) {
    if (arrayRam.get(m) == v) {
      estado = m;
      System.out.println("SI FUE ENCONTRADO");
    }
  }
}
Si es un ArrayList implementa la inteface List.
Y esta ya tiene un método para buscar muy bueno.

Saludos,
  #9 (permalink)  
Antiguo 15/04/2011, 23:52
 
Fecha de Ingreso: octubre-2009
Mensajes: 21
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: metodos en java

GRACIAS HackmanC: PERO NO SE DONDE ESTA MI ERROR!! AQUI TE DEJO MI CODIGO A VER SI PUEDES AYUDARME TOY FUERA DE JAVA 5 ANOS!!

package asscsa;

import java.util.ArrayList;
import java.io.*;

/**
*
* @author Kathy: creando mis mtds
*/
public class CacheClass {
private int estado;
private int nelem;
private ArrayList<Integer> arrayRam;
private int[] cache;
private int CouTotalMiss;//total of misses = com+ cap+ conflic
private int CouTotalMissCom = 0;//total of compulsory miss
private int CouTotalMissCap;//total of capacity miss
private int CouTotalMissConfl = 0;//total miss Conflict
private int cacheSize;//tamano de mi cache en bytes
private int block_size; //tamano de cada bloque en bytes
private int typeAssocia;// tipo de asociatividad 2, 4, 6, 8 , fully
private int typeReplace;//tipo de politica de reemplazo
private int totalHit; //# de aciertos
private int CSize;
//private//detectar si un valor estuvo antes ahi

public CacheClass() {
//creamos nuestro array
arrayRam = new ArrayList();
//inicialisamos nuestra varfiable con 0
nelem = 0;
}

public void listarCache() {
//creamos un for para recorrer e ir listando cada elemento
for (int i = 0; i < arrayRam.size(); i++) {
// System.out.print(arrayRam.get(i) + "\n");
System.out.print("*****");
}
}

public void insertarValores(int value) {
//aqui le damos el valor o elemento y lo insertamos
arrayRam.add(value);
//incrementamos el valor de nuestro elemento cada ves que inserta
//ya que tambien lo estamos utilizando como indice o posicion del array
nelem++;
}

public void getEnterValues() throws IOException {

BufferedReader enter = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter Cache size en Kbytes: ");
cacheSize = (Integer.parseInt(enter.readLine()) * 1024);
System.out.print("Enter Block size en Bytes: ");
block_size = Integer.parseInt(enter.readLine());
System.out.print("Enter Associative Type: ");
typeAssocia = Integer.parseInt(enter.readLine());
System.out.print("Enter Replecement Policy: ");
typeReplace = Integer.parseInt(enter.readLine());
}

public void imprimir() {
System.out.print(cacheSize + "**\n");
System.out.print(block_size + "***\n");
System.out.print(typeAssocia + "****\n");
System.out.print(typeReplace + "*****\n");
System.out.print("___");
crearCache();
}

public void crearCache() {
int cSize = cacheSize / block_size;
cache = new int[cSize];
for (int i = 0; i < cSize; i++) {
cache[i] = 0;
System.out.print(cache[i] + "\n");
}
System.out.print(cSize + "___");
}

public void copyValuesCache() {
int cSize = cacheSize / block_size;
int block_loc;
int block_number;
for (int i = 0; i < arrayRam.size(); i++) {

block_number = arrayRam.get(i) / block_size;
System.out.print(i+")"+block_number+ "\n");
if (typeAssocia == 1) {
block_loc = block_number % (cSize / typeAssocia);
if (cache[block_loc] == 0) {
cache[block_loc] = block_number;
CouTotalMissCom++;
} else if (cache[block_loc] == block_number) {
totalHit++;
} else if (cache[block_loc] != block_number && cache[block_loc] != 0) {
searchValue(i, block_number);
if (block_number == arrayRam.get(estado)) {
cache[block_loc] = block_number;
CouTotalMissConfl++;

} else {
cache[block_loc] = block_number;
CouTotalMissCom++;

}


}
} else if (typeAssocia == 2) {

}
}

System.out.print(CouTotalMissCom + "Compuls\n");
System.out.print(CouTotalMissConfl + "Conflict\n");
System.out.print(totalHit + "Hits**\n");
}
//BUSCAR SI EL VALOR ESTUVO ANTES

public void searchValue(int y, int v) {

for (int m = 0; m < y; m++) {
if (arrayRam.get(m) == v) {
estado = m;
System.out.println("si hay un valor");
System.out.println(estado+"\n");

}
}
}


}

YO CREO Q EL TIPO DE DATO ES EL MISMO.. MIL GRACIAS!!
  #10 (permalink)  
Antiguo 16/04/2011, 00:59
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: metodos en java

Hola,

No entiendo, ese código lo hiciste tú? Como se te puede pasar por alto algo tan simple, después de escribir ese sistema de cache?

Cita:
Iniciado por kyc212 Ver Mensaje
YO CREO Q EL TIPO DE DATO ES EL MISMO.. MIL GRACIAS!!
¿Que tiene que ver el tipo de dato?

Cita:
Iniciado por Xerelo Ver Mensaje
No sé si tienes claro el concepto de variable "global" (en java no se usa ese término)

Tal y como tienes el código, creas un objeto de la clase que contiene el código que has puesto, ejecutas el método searchValue de dicho objeto y luego lees la variable de instancia de ese objeto. Así que si creas otro objeto de esa clase, la variable estará a cero, ya que es otro objeto o instancia.
Pero creo que Xerelo no estaba lejos de darte la respuesta. Porque seguramente estas usando una variable diferente "estado" que según tu concepto es una variable global.

Código:
 * @author Kathy: creando mis mtds
 */
public class CacheClass {

    private int estado;
    public int getEstado() {
        return estado;
    }
    
.....
    public void getEnterValues() throws IOException {

        BufferedReader enter = new BufferedReader(new InputStreamReader(System.in));
        System.out.print("Enter Cache size en Kbytes: ");
        cacheSize = 4 * 1024; // (Integer.parseInt(enter.readLine()) * 1024);
        System.out.print("Enter Block size en Bytes: ");
        block_size = 4; // Integer.parseInt(enter.readLine());
        System.out.print("Enter Associative Type: ");
        typeAssocia = 1; // Integer.parseInt(enter.readLine());
        System.out.print("Enter Replecement Policy: ");
        typeReplace = 1; // Integer.parseInt(enter.readLine());
    }
.....
Código Java:
Ver original
  1. package asscsa;
  2.  
  3. import java.io.IOException;
  4.  
  5. public class M extends Thread {
  6.  
  7.     @Override
  8.     public void run() {
  9.         CacheClass cache = new CacheClass();
  10.         try {
  11.             cache.getEnterValues();
  12.         } catch (IOException ex) {
  13.             System.err.println(ex);
  14.         }
  15.         for (int i = 0; i < 4101; i++)
  16.             cache.insertarValores(i);
  17.         cache.crearCache();
  18.         for (int i = 0; i < 4; i++)
  19.             cache.copyValuesCache();
  20.         System.out.println("El estado es : " + String.valueOf(cache.getEstado()));
  21.     }
  22.  
  23.  
  24.     public static void main(String[] args) throws IOException {
  25.         new M().start();
  26.     }
  27.  
  28. }

Cita:
El estado es : 1025
Da igual, no sé porque dices que siempre tiene 0.

Saludos,
  #11 (permalink)  
Antiguo 16/04/2011, 03:28
 
Fecha de Ingreso: octubre-2009
Mensajes: 21
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: metodos en java

Gracias por su ayuda la verdad como ya dije antes he programado en otros lenguajes que a veces confundo los conceptos ..ahora gracias a uds pude solucionar este dilema..es aveces duro comenzar de nuevo!!..una ultima duda me dejaste pensando acerca de mi codigo esta tan mal porque me dices que no entiendes..haber si me sugieres algo para mejorarlo ..gracias!!
  #12 (permalink)  
Antiguo 16/04/2011, 08:21
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: metodos en java

Cita:
Iniciado por kyc212 Ver Mensaje
... una ultima duda me dejaste pensando acerca de mi codigo esta tan mal porque me dices que no entiendes..haber si me sugieres algo para mejorarlo ...
Cita:
Iniciado por HackmanC Ver Mensaje
... No entiendo, ese código lo hiciste tú?
Lo que no entiendo es que para escribir ese código hay que tener un nivel bastante alto de programación, y a un programador de cierto nivel no se le olvida nunca el ámbito de las variables, aun trabaje en 14 lenguajes de programación diferentes.

Ahora para mejorarlo podría mencionar muchas cosas, la primera sería que no uses un lenguaje como que fuera otro. Si vas a usar Java aprende a usarlo 'como se debe' y no como que fuera C++. Usando Java se puede optimizar y mejorar bastante mas, pero eso ya es tu trabajo,

Saludos,
  #13 (permalink)  
Antiguo 16/04/2011, 21:25
 
Fecha de Ingreso: octubre-2009
Mensajes: 21
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: metodos en java

gracias HackmanC, no pense que lo errores costaran tanto!! pero bueno gracias por tus criticas constructivas (eso creo :P) definitivamente tienes razon no me debo olvidar!! pero deberias cultivar un poco mas tu paciencia te lo digo en buenas vibras..gracias :)

saludos....
  #14 (permalink)  
Antiguo 17/04/2011, 10:15
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: metodos en java

Hola,

Cita:
Iniciado por kyc212 Ver Mensaje
... pero deberias cultivar un poco mas tu paciencia te lo digo en buenas vibras..gracias :) ...


Tienes toda la razón, pero a veces te encuentras con personas todavía mas intolerantes y me acostumbre a eso, aunque voy a intentar seguir tu consejo.

Saludos,

Etiquetas: metodos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:09.