Autor Tema: comprobar si se pueden formar palabras a partir de ciertas letras en Java  (Leído 5228 veces)

xeta21

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 11
    • Ver Perfil
Hola de nuevo.. T_T

Tengo este código:

Código: [Seleccionar]
package lletresdeparaulesaldiposit;

public class LletresdeParaulesAlDiposit { 
    public static void main(String[] args) {       
        LletresdeParaulesAlDiposit  prg = new LletresdeParaulesAlDiposit ();
        prg.proves();
    }
      private boolean lletresDeParaulesAlDiposit(String[] paraules, char[] diposit) {

      boolean result = false;
for (int i = 0; i < paraules.length; i++){
char[] caracteres = paraules[i].toCharArray();
for(int j = 0; j < caracteres.length; j++){
for(int k = 0; k < diposit.length; k++){
if ( caracteres[j] == diposit[k] ){
System.out.println("SI: " + caracteres[j] + " - " + diposit[k]);
result = true;
} else {
System.out.println("NO: " +  caracteres[j]+ " - " + diposit[k]);
result = false;
}
}
}
System.out.println("-----");
System.out.println();
}
return result;
   
      }
    private void proves() {
        char[] diposit = {'a', 'c', 'i','a','v','a','d','s', 'o','t','i'};
        String[] paraules = {"cas", "dit"};
        System.out.println("Son lletresAldiposit (si): ");
        System.out.println(lletresDeParaulesAlDiposit(paraules,  diposit ));
    }

 
}

Y no me hace la función que esperaba..

Os explico necesito que me verifique si la palabra cas y dit están en el deposito :   char[] diposit = {'a', 'c', 'i','a','v','a','d','s', 'o','t','i'};

si las palabras están en el deposito me de true sino false.

es decir:

Tengo los caracteres:

  char[] diposit = {'a', 'c', 'i','a','v','a','d','s', 'o','t','i'};

Si escribo  Hola que tal  ( DARA FALSE ya que no está la H, L, Q,U,E, L )

Si escribo cava  ( dara true ya que están los caracteres )

El problema es que si escribo por ejemplo cavav tendría que dar error ya que solo hay una V en el deposito no 2.

Por eso no sé como hacerlo.. Podéis ayudarme? :(
« Última modificación: 05 de Noviembre 2015, 19:21 por César Krall »

xeta21

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 11
    • Ver Perfil
Re:comparación de dos cadenas JAVA
« Respuesta #1 en: 04 de Noviembre 2015, 20:54 »
Sigo sin saber como hacerlo.. :(

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Re:comparación de dos cadenas JAVA
« Respuesta #2 en: 05 de Noviembre 2015, 00:13 »
Hola xeta21.

Retoqué un poco tu código, no se si será lo que buscas.

Código: [Seleccionar]
public class LletresdeParaulesAlDiposit { 
    public static void main(String[] args) {       
        LletresdeParaulesAlDiposit  prg = new LletresdeParaulesAlDiposit ();
        prg.proves();
    }

    private boolean lletresDeParaulesAlDiposit(String paraules, char[] diposit) {
        boolean result = false;
        int cont = 0;
        char[] diposit2 = diposit;               
        char[] caracteres = paraules.toCharArray();
        for(int j = 0; j < caracteres.length; j++){
            boolean coincidencia = false;
            int k = 0;
            while(!coincidencia){
                if (caracteres[j] == diposit2[k]){
                    System.out.println("SI: " + caracteres[j] + " - " + diposit[k]);
                    diposit2[k] = '*';
                    cont++;
                    coincidencia = true;
                } else {
                    System.out.println("NO: " +  caracteres[j]+ " - " + diposit[k]);
                }
                if(k < diposit2.length-1){
                    k++;
                }else{
                    coincidencia = true;
                }
            }     
        }
        System.out.println("-----");
        System.out.println();
        if (cont == caracteres.length){result = true;}
        return result;
    }

    private void proves() {
        char[] diposit = {'a','c','i','a','v','a','d','s','o','t','i'};
        String paraules = "cav";
        System.out.println("Son lletresAldiposit (si): ");
        System.out.println(lletresDeParaulesAlDiposit(paraules,  diposit ));
    }
}

Saludos.

xeta21

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 11
    • Ver Perfil
Re:comprobar si se pueden formar palabras a partir de ciertas letras en Java
« Respuesta #3 en: 05 de Noviembre 2015, 20:36 »
lo malo de tu programa que es que necesito que me compare varias palabras en este caso CAS , DIT.

necesito que esta parte:

    private void proves() {
        char[] diposit = {'a', 'c', 'i','a','v','a','d','s', 'o','t','i'};
        String[] paraules = {"cas", "dit"};
        System.out.println("Son lletresAldiposit (si): ");
        System.out.println(lletresDeParaulesAlDiposit(paraules,  diposit ));

sea así, si o si..

por eso no consigo que me salga el programa.. :(

Aparte debería de poder mostrar al final los caracteres que me quedan sin usar.. :(

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Re:comprobar si se pueden formar palabras a partir de ciertas letras en Java
« Respuesta #4 en: 06 de Noviembre 2015, 01:39 »
¿Y no podría quedar así?

Código: [Seleccionar]
private void proves() {
        String[] paraules = {"cas", "dit"};
        System.out.println("Son lletresAldiposit (si): ");
        for(String tmp : paraules){
            char[] diposit = {'a','c','i','a','v','a','d','s','o','t','i'};
            System.out.println(lletresDeParaulesAlDiposit(tmp,  diposit ));
            System.out.println("------------------------");
        }
    }
Una cosa no me quedó clara, después de hacer la primera comparación, la segunda palabra tiene que compararse con las letras que quedaron en el depósito después de comparar la primera palabra?, o se compara con el deposito con todas las letras?

y para mostrar los caracteres que te quedan sin usar añadir lo siguiente, en el método lletresDeParaulesAlDiposit, antes del return result;

Código: [Seleccionar]
if (result){
            String msg = "Caracteres que quedansin usar: ";
            for(char tmp : diposit2){
                if(!(tmp=='*')){msg += tmp + ",";}
            }
            System.out.println(msg);
        }
« Última modificación: 06 de Noviembre 2015, 02:04 por pedro,, »

xeta21

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 11
    • Ver Perfil
Re:comprobar si se pueden formar palabras a partir de ciertas letras en Java
« Respuesta #5 en: 06 de Noviembre 2015, 09:41 »
No al código no se le puede añadir nada.

Y si la idea es que cuando un carácter se use y quede gastado.. :(

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Re:comprobar si se pueden formar palabras a partir de ciertas letras en Java
« Respuesta #6 en: 06 de Noviembre 2015, 10:52 »
Bueno, aquí te dejo lo que conseguí, el método proves(), queda totalmente como dijiste.

Código: [Seleccionar]
public class LletresdeParaulesAlDiposit2 { 
    public static void main(String[] args) {       
        LletresdeParaulesAlDiposit2  prg = new LletresdeParaulesAlDiposit2 ();
        prg.proves();
    }

    private boolean lletresDeParaulesAlDiposit(String[] paraules, char[] diposit) {
        boolean result = false;
        char[] caracteres = {};
        int cont = 0;
        int contCaracteres = 0;
        for (String tmp : paraules){
            caracteres = tmp.toCharArray();
            System.out.println("La palabra buscada en el depósito será: " + tmp);
            contCaracteres += caracteres.length;
            for(int j = 0; j < caracteres.length; j++){
                boolean coincidencia = false;
                int k = 0;
                while(!coincidencia){
                    if (caracteres[j] == diposit[k]){
                        System.out.println("SI: " + caracteres[j] + " - " + diposit[k]);
                        diposit[k] = '*';
                        cont++;
                        coincidencia = true;
                    } else {
                        System.out.println("NO: " +  caracteres[j]+ " - " + diposit[k]);
                    }
                    if(k < diposit.length-1){
                        k++;
                    }else{
                        coincidencia = true;
                    }
                }     
            }
            System.out.println("-----\n\n");
        }
        if (cont == contCaracteres){
            String msg = "Caracteres que quedan sin usar en el depósito: ";
            for(char tmp2 : diposit){
                if(!(tmp2=='*')){msg += tmp2 + ",";}
            }
            System.out.println(msg + "\n");
            result = true;
        }
        System.out.println();
        return result;

    }

    private void proves() {
        char[] diposit = {'a','c','i','a','v','a','d','s','o','t','i'};
        String[] paraules = {"cas", "dit"};
        System.out.println("Son lletresAldiposit (si): ");
        System.out.println(lletresDeParaulesAlDiposit(paraules,  diposit ));
    }

}

Espero que este te solucione tus problemas. ;D

Saludos.
« Última modificación: 06 de Noviembre 2015, 10:54 por pedro,, »

xeta21

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 11
    • Ver Perfil
Re:comprobar si se pueden formar palabras a partir de ciertas letras en Java
« Respuesta #7 en: 06 de Noviembre 2015, 18:49 »
ooohh!! ya veo que has substituido los usados por *!!!

Ostras no había pensado en eso!!! gracias!!! gracias!!!!!!!

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".