Ayuda con codigo Java

Iniciado por paablitto10, 26 Abril 2019, 14:13 PM

0 Miembros y 1 Visitante están viendo este tema.

paablitto10

no se como realizar un codigo en java. Tengo un String o ArrayList llamando Poderes donde estan dentro : Arco,Inteligencia,fuerza y pocima. Otro String o ArrayList llamado Miguel con : inteligencia,paciencia. Y por ultimo uno llamado Agus con : pocima,inteligencia y invisibilidad.

Tengo que comparar el primer string sobre los otros dos y debe salir esto por pantalla:

Arco-Apariciones : 0, Fuerza-Apariciones : 0, Inteligencia-Apariciones : 2, Pocima-Apariciones : 1

srWhiteSkull

Lo mejor Pablito es que aprendas fundamentos de la programación y luego programación orientada a objetos aplicado a Java.

Quizás es mejor que aprendas Python y luego cuando sepas programar bien Python saltes a otros lenaguajes con Java o C++ si estás pensando en el desarrollo de aplicaciones de escritorio o programación de videojuegos.


WHK

Cada jugador supongo que debiera estar en una lista de tipo List<>(), entonces para sumar haces una iteración por cada uno y sumas las propiedades, donde la suma total es almacenada en una variable de la clase actual que está procesando todo, así obtendrás las sumas de manera dinámica.

Saludos.

Beginner Web

A mi me surgió una duda acerca de su problema, soy novata en Java y queria saber si se puede modificar el valor de un objeto sin Generics en ArrayList por ejemplo esto

Código (java) [Seleccionar]
List lista = new ArrayList();

lista.add(1);//<-¿Este valor se puede incrementar?
lista.add(cualquierCosa);





Y con respecto al problema en general si debería leer algo de Programación Orientada a Objetos, yo igual soy novata asi que hice esto

Código (java) [Seleccionar]
package aplicacion.test;

import aplicacion.modelo.dominio.Habilidad;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
*
* @author Ana Kéldysh
*/
//Clase Principal que contiene el método main
public class Principal {
    //Declaración del método main
    public static void main(String[] args) {
        List<Habilidad> poderes = new ArrayList<>();
        List Miguel = new ArrayList();
        List Agus = new ArrayList();
       
        poderes.add(new Habilidad("Arco", 0));
        poderes.add(new Habilidad("Inteligencia", 0));
        poderes.add(new Habilidad("Fuerza", 0));
        poderes.add(new Habilidad("Pocima", 0));
       
        Miguel.add("Inteligencia");
        Miguel.add("Paciencia");
       
        Agus.add("Pocima");
        Agus.add("Inteligencia");
        Agus.add("Invisibilidad");
       
        Principal.compararListas(poderes, Miguel);
        Principal.compararListas(poderes, Agus);
        Principal.mostrarLista(poderes);
    }
   
    public static void compararListas(List poderes, List personaje) {
        for (int i = 0; i < poderes.size(); i++) {
            for (int j = 0; j < personaje.size(); j++) {
                Habilidad a = (Habilidad) poderes.get(i);
                if (a.getNombre().equals(personaje.get(j))) {
                    a.setApariciones(a.getApariciones() + 1);
                }
            }
        }
    }
   
    public static void mostrarLista(List poderes) {
        for (int i = 0; i < poderes.size(); i++) {
            if (i < poderes.size() - 1) {
                System.out.print(poderes.get(i) + ", ");
            } else {
                System.out.println(poderes.get(i));
            }
        }
    }
   
}



Código (java) [Seleccionar]
package aplicacion.modelo.dominio;

/**
*
* @author Ana Kéldysh
*/
public class Habilidad {
    private String nombre;
    private int apariciones;
   
    public Habilidad(){
    }

    public Habilidad(String nombre, int apariciones) {
        this.nombre = nombre;
        this.apariciones = apariciones;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public int getApariciones() {
        return apariciones;
    }

    public void setApariciones(int apariciones) {
        this.apariciones = apariciones;
    }

    @Override
    public String toString() {
        return nombre + "-Apariciones: " + apariciones;
    }

   
       
}


7w7

WHK

Con respecto a:

    List lista = new ArrayList();
     
    lista.add(1);//<-¿Este valor se puede incrementar?
    lista.add(cualquierCosa);


Puedes hacer un:

lista.set(0, ++lista.get(0));

Donde set actualiza el valor siempre y cuando sepas cual es el índice de tu item, en mi caso puse 0 porque es el primer item, luego obtiene el item y le hace un ++ al lado derecho. Podría haber hecho un .get(0) + 1 pero era más elegante y usaba menos caracteres hacer un incremento de valor y retorno simultáneo. Cuando defines un valor++ autoincrementa el valor sobre si mismo, pero cuando haces un ++valor retorna el valor sumado.

Saludos.

rub'n

#5
Cita de: Beginner Web en 27 Abril 2019, 05:19 AM
A mi me surgió una duda acerca de su problema, soy novata en Java y queria saber si se puede modificar el valor de un objeto sin Generics en ArrayList por ejemplo esto

Código (java) [Seleccionar]
List lista = new ArrayList();

lista.add(1);//<-¿Este valor se puede incrementar?
lista.add(cualquierCosa);


Si podrías incrementarlo como lo tienes en el código con

Código (java) [Seleccionar]
listaInteger.set(0, listaInteger.get(0) + 1);

O, tomando lo que dice WHK, pero no exactamente así, sino

Código (java) [Seleccionar]
Integer value = (Integer) listaInteger.get(0); //cast debido a falta de tipo parametrizado
++value;  //Operador de preincremtento, tambien con postIncremento value++;
listaInteger.set(0, value);


Importante

en versiones anteriores a java 5, tu podías escribir tranquilamente ese tipo de lineas

Código (java) [Seleccionar]
List lista = new ArrayList();

y tener la esperanza de que los programadores que usen tu código, recuerden que tu quieres, únicamente Objetos Integer en ella.

Eso requiere un poco de análisis mental y tiempo, no se tendría una vía especifica para conocer el nombre esperado, es decir, si sera un Integer, Double, o hasta, String a StringBuilder.

desde Java 5, tu puedes documentar logrando una interpretación mas fácil a los demás, ese feature se llama generics, el compilador incluso ayuda a que cumplas esa suposición

quedando


Código (java) [Seleccionar]
List<Integer> lista = new ArrayList<Integer>();

Cuando la versión java 7 se libero, se logro una versión mas corta,

Código (java) [Seleccionar]
List<Integer> lista = new ArrayList<>();

la forma resumida, utiliza el operador diamante, se llama así porque <>, parece un diamante si inclinas tu cabeza a un lado.


Mira la diferencia, de esta linea

Código (java) [Seleccionar]
final HashMap<String, HashMap<String, String>> map1 = new HashMap<String, HashMap<String, String>>();

A esta linea

Código (java) [Seleccionar]
final HashMap<String, HashMap<String, String>> map2 = new HashMap<>();

Ambas declaraciones contienen maps anidados, la segunda linea es mas fácil de leer, porque no contiene información redundante.


El uso de tipos parametrizados

Código (java) [Seleccionar]
public static void mostrarNombres(List lista) {
      for(int f=0; f<lista.size(); f++) {
           final String nombre = (String) lista.get(f);//java.lang.ClassCastException
           System.out.println(nombre);
       }

   }

 public static void main(String ...blabla) {
      List lista = new ArrayList();
      lista.add(new StringBuilder("Ana Kéldysh"));

       mostrarNombres(lista);
 }


Si recuerdas cuando hablamos de especificar el tipo de dato, aka tipo parametrizado en la lista, para saber de que tipo sera nuestra lista, que es lo correcto de hacer

En el ejemplo de arriba la linea 3 arroja java.lang.ClassCastException , porque en la linea 12, le añadimos un StringBuilder, esperando en realidad un String en la 3, dando la excepción, todo porque la lista no contiene nada, no especifica nada.

Los Generics fixean eso, permitiendo que escribas el tipo parametrizado, de que deseas una Lista de String, logrando que el compilador tenga información para prevenir que tu causes ese problema en primer lugar;


Código (java) [Seleccionar]
List<String> names = new ArrayList<String>();
names.add(new StringBuilder("Ana Kéldysh")); // no compilara  


Tendríamos un error del compilador(tiempo de compilación) lo cual es bueno, porque te ayudara a detectar de inmediato el error, a diferencia de descubrir ese error luego.



rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen

Beginner Web

#6
Me sale un error con esto

Código (cpp) [Seleccionar]
List lista = new ArrayList();
lista.add(1);
lista.set(0, ++lista.get(0));



Código (cpp) [Seleccionar]
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - incompatible types: java.lang.Object cannot be converted to java.lang.Integer
at aplicacion.test.Principal.main(Principal.java:29)
 :huh:

Lo solucioné asi

Integer value = (Integer) lista.get(0);
7w7

srWhiteSkull

Indícale que vas a trabajar con enteros.

ArrayList<Integer>()

Beginner Web

Esta bien lo que dices pero yo quiero trabajar sin Generics  :laugh:
7w7