Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Usuario Invitado

#471
NOTA: He publicado la respuesta cuando habías puesto el link, por lo que no vi tu actualización hasta ahora.

Coloca el código que no cumple su trabajo aquí. Primero porque así ayudará a personas que tengan el mismo problema y segundo, porque casi nadie se tomará la molestia de crear un proyecto y agregar las clases y demás que ha descargado.

Por lo que dices aquí supongo que estás trabajando con listas para simular una BBDD, ¿cierto?:

Citarcantidad de productos de cada tipo.
total de dinero en artículos.
porcentaje de artículos de tipo 2.
Y articulo con el precio mas elevado.

Ok, vamos por partes como dijo Jack el destripador ^^. Primer, creamos un Value Object que representa a un producto:

Código (java) [Seleccionar]
public class ProductVO {
   private Integer id;
   private String name;
   private String description;
   private Double price;
   private Integer category;
   
   public ProductVO() {}
   
   public ProductVO(Integer id, String name, String description, Double price, Integer category) {
       this.id = id;
       this.name = name;
       this.description = description;
       this.price = price;
       this.category = category;
   }
   /*public ProductVO(Object... data) {
       
       for(byte i=0; i<data.length; i++) {
           String curObjectClassName = data[i].getClass().getSimpleName();
           switch(curObjectClassName.toLowerCase()) {
               case "byte": this.id = (Byte) id;
               case "string":
                   switch(i) {
                       case 1: this.name = (String) data[i]; break;
                       case 2: this.username = (String) data[i]; break;
                       case 4: this.category = (String) data[i]; break;
                   }; break;
               case "double": this.price = (Double) price; break;
           }
       }
   }*/
   
   public Integer getId() { return id; }
   
   public void setId(Integer id) { this.id = id; }
   
   public String getName() { return name; }
   
   public void setName(String name) { this.name = name; }
   
   public String getDescription() { return description; }
   
   public void setDescription(String description) { this.description = description; }
   
   public Double getPrice() { return price; }
   
   public void setPrice(Double price) { this.price = price; }
   
   public Integer getCategory() { return category; }
   
   public void setCategory(Integer category) { this.category = category; }
   
}


Luego, creamos el objeto encargado de manejar las consultas e inicializar la lista:

Código (java) [Seleccionar]
import java.util.Collections;
import java.util.List;
import java.util.ArrayList;


public class ProductQuery {
   private static List<ProductVO> productsList = new ArrayList<>();
   
   static {
       Collections.addAll(productsList,
           new ProductVO(1, "Cepillo Colgate super", "Cepillo de dientes extra duradero", 18.5d, 1),
           new ProductVO(2, "Jarabe para tos", "Jarabe para la tos sabor miel", 25.90d, 2),
           new ProductVO(3, "Aspirina", "Pastilla para el dolor de cabeza", 4.3d, 2)
       );
   }
   
   public int[] getProductExistencesByCategory(int category) {
       final int SEARCH_ALL = -1;
       final int GROOMING_CATEGORY = 1;
       final int MEDICINE_CATEGORY = 2;
       int groomingCategoryExistences = 0; // cantidad de productos en aseo personal
       int medicineCategoryExistences = 0; // cantidad de productos en medicina
       int requestCategoryExistences = 0;
       
       for(ProductVO product : productsList) {
           if(category != SEARCH_ALL) {
               if(product.getCategory() == category) {
                   requestCategoryExistences++;
               }
           } else {
               if(product.getCategory() == GROOMING_CATEGORY)
                 groomingCategoryExistences++;
               if(product.getCategory() == MEDICINE_CATEGORY)
                 medicineCategoryExistences++;
           }
       }
       if(category != SEARCH_ALL)
           return new int[] { requestCategoryExistences };
       else
           return new int[] {groomingCategoryExistences, medicineCategoryExistences};    
   }
   
   public Double getTotalAmountOfProducts() {
       Double totalAmount = 0d;
       
       for(ProductVO product : productsList) {
           totalAmount += product.getPrice();
       }
       return totalAmount;
   }
   
   public ProductVO getMostValuedProduct() {
       ProductVO mostValued = productsList.get(0);
       
       for(ProductVO product : productsList) {
           if(product.getPrice() > mostValued.getPrice())
               mostValued = product;
       }
       
       return mostValued;
   }
   
   
}


El código entre static {}, se ejecutará cuando el ClassLoader cargue la clase, es decir, se ejecutará de forma simultánea a la compilación. Esto para que la lista de productos esté disponible ni bien ejecutamos la aplicación.

Por último, hacemos pruebas:

Código (java) [Seleccionar]
public class ProductsTest{

    public static void main(String []args){
       ProductQuery query = new ProductQuery();
       int[] categoryExistences = query.getProductExistencesByCategory(-1);
       int[] medicineCategoryExistences = query.getProductExistencesByCategory(2);
       ProductVO mostValuedProduct = query.getMostValuedProduct();
       Double totalAmount = query.getTotalAmountOfProducts();
       
       System.out.println("Products existences by category: ");
       printArray(categoryExistences);
       System.out.println("Products existences by medicine category: ");
       printArray(medicineCategoryExistences);
       System.out.println("Most valued product: "+mostValuedProduct.getName());
       System.out.println("Total amount of products: "+totalAmount);
    }
   
    public static void printArray(int[] array) {
      for(int value : array)
        System.out.println(value);
    }
     
}




Resutados:

Products existences by category:
1
2
Products existences by medicine category:
2
Most valued product: Jarabe para tos
Total amount of products: 48.699999999999996



Si tienes alguna duda, no dudes en preguntar.
#472
Java / Re: Meter un Set en un Map
27 Febrero 2015, 15:23 PM
Dado que una Map trabaja con objetos, puedes en primer lugar agregar al mapa solo las provincias e inicializar sus poblaciones con null:

Código (java) [Seleccionar]
private void fillProvinces(String... provincesNames) {
for(String provinceName : provincesNames)
provinces.add(provinceName, null);
}


Luego procedemos a agregar las poblaciones a las provincias. Si el Mapa no contiene la provincia, retorna false. Pero si contiene la provincia, realizamos algunos pasos:

  • Obtener la población asociada a dicha provincia.

    Ésto nos permite hacer dos cosas:

  • Si devuelve null, quiere decir que no hay población para dicha provincia y procedemos a crear un nuevo HashSet, agregamos los valores al HashSet población y lo agregamos al Map.

  • Si no devuelve null, quiere decir que ya existe población y entonces, obtenemos la población de la provincia y le agregamos más poblaciones, en lugar de crear otra porque sobre-escribiría el antiguo HashSet.

    Código (java) [Seleccionar]
    public boolean addPopulationToProvince(String provinceName, IPopulation population) {
    boolean success = false;
    if(!provinces.containsValue(provinceName)) {
    System.out.println("La provincia no existe, créela antes de añadir la polación");
                   return success;
    }
    if(provinces.get(provinceName) == null) {
    Set<IPopulation> population = new HashSet<>();
           population.add(population);
            provinces.add(provinceName, population);
                   success = true;
    } else {
    Set<IPopulation> population = getPopulationFromProvince(provinceName);
    population.add(population);
                   success = true;
    }
           return success;
    }


    Éste método devuelve el HashSet población asociado a dicha provincia para poder agregarle elementos:

    Código (java) [Seleccionar]
    private Set<IPopulation> getPopulationFromProvince(String provinceName) {
    Set<IPopulation> population = null;
    for(Map.Entry<String, Set<IPopulation> entry : provinces.entrySet()) {
    if(entry.getKey().equals(provinceName))
    population = entry.getValue();
    }
    return population;
    }


    Un saludo.
#473
No es correcto lo que piensas hacer. En primer lugar porque esos detalles son de su pareja y no importa si el no los tiene con ella. Si te consideras su amigo, lo mejor que puedes hacer es hablar con él y aconsejarle para que pueda seguir con su relación (es lo que uno quiere para sus amigos no? que sean felices).

Luego pueden pasar dos cosas:

A) Que la chica retome el interés en él y en su relación.
B) Que la chica ya haya perdido total interés en él.

A pesar de todo, si fuera mi caso, aunque terminen, no tendría nada con la chica. Cuestión de principios personales, como siempre, todo depende de la persona. Pero si al tipo no le incomoda que su ex salga con su amigo, no veo inconveniente para proceder a conocerse mejor.
#474
Foro Libre / Re: El vestido del infierno!
27 Febrero 2015, 14:47 PM
Creo que @engel lex se refiere a que se está jugando con la mente de las personas, aunque en el ajedrez lo que se busca es destruir la mente del oponente :xD.

Yo lo veo blanco y dorado.
#475
Java / [JavaEE | HTML5] Minichat con WebSockets
27 Febrero 2015, 07:46 AM

JwsChat - Minichat con WebSockets y HTML5






Descripción: Éste sencillo chat demuestra lo fácil que es la comunicación bidireccional con la nueva API para WebSockets de Java EE 7 combinado con el poder de HTML5.

Funcionalidades:

  • Elegir un nombre de usuario (único por sesión).
  • Personalizar el chat eligiendo un color proveído.
  • Desconectar/Reconectar manteniendo las preferencias.
  • Ver la lista de usuarios conectados.


    Imágenes







    Código fuente



    El código fuente lo pueden encontrar en mi Github: JwsChat



    By Gus.
#476
Según lo que he investigado, para leer un archivo a bytes en Android, se hace así:

Código (java) [Seleccionar]
public void readFile(InputStream inStream) throws IOException {
    byte[] buffer = new byte[8192];
    int bytesRead;
    while ((bytesRead = inStream.read(buffer)) > 0) {
        // proceso aquú
    }
}
#477
Java / Re: Filtro en J2ME
26 Febrero 2015, 17:35 PM
Eso ya depende de tu lógica de negocio ^^. Sólo una observación, sería más lógico inicializar pass en null, cosa que luego comparamos if(getClientPass(username) == null) para saber si se ha encontrado el cliente, en lugar de if(getClientPass(username).isEmpty()).

El resto, lo veo bien. Si fui de ayuda y resolviste tu problema, por favor marca el título del tema con un check verde. ¡Un saludo!
#478
¿No es open source dicha librería? Así puedes ver el source para estudiarlo.
#479
Java / Re: Filtro en J2ME
26 Febrero 2015, 17:17 PM
Por lo visto JavaME no soporta el método split de String. Pero siempre podemos improvisar ;)

Código (java) [Seleccionar]
int separator = client.indexOf(":");
    String username = client.substring(0,separator);
    String password = client.substring(separator+1);
#480
Java / Re: Filtro en J2ME
26 Febrero 2015, 16:45 PM
No he tocado en mi vida Java ME :xD, pero por lógica viendo el código y lo que me has enseñado (gracias ^^), obtendría los detalles del cliente seleccionado así:

Código (java) [Seleccionar]
public String getClientDetails(String name) {
try {
           stock = RecordStore.openRecordStore("Clientes", true);
           enumeracion=almacen.enumerateRecords(null, null, true);
           int clients = 0;
           
           while(enumeracion.hasNextElement()){
              // int id=enumeracion.nextRecordId();
               String client =new String(enumeracion.nextRecord());
String[] clientData = client.split(":");
if(clientData[0].equals(name)) {
return client;
}
               clients++;

           }
         
       } catch (RecordStoreException ex) {
           ex.printStackTrace();
       } finally {
           almacen.closeRecordStore();
}

}


Donde:

  • String[] clientData = client.split(":") -> Divide el texto obenido desde el enumerador por medio del separador ":". Es decir, que busca el separador ":" y parte el texto anterior al separador y posterior. Por lo que:

    Si el cliente actual es por ejemplo: "Pepito:12345", el método split devuelve:

    Código (java) [Seleccionar]
    clientData[0] = "Pepito";
    clientData[1] = "12345";


  • Teniendo el nombre, lo comparo con el nombre proporcionado:

    Código (java) [Seleccionar]
    if(clientData[0].equals(name))

    Si hay match es porque se ha encontrado al usuario y se devuelve al método encargado de mostrar los detalles.

    NOTA: Siempre se debe cerrar las conexiones en el finally ya que, si ocurre alguna excepción nunca se cerrará la conexión. Todo lo que se coloca en el finally se ejecuta sí o sí.

    Salu2.