Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: xeta21 en 03 de Noviembre 2015, 12:51

Título: comprobar si se pueden formar palabras a partir de ciertas letras en Java
Publicado por: xeta21 en 03 de Noviembre 2015, 12:51
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? :(
Título: Re:comparación de dos cadenas JAVA
Publicado por: xeta21 en 04 de Noviembre 2015, 20:54
Sigo sin saber como hacerlo.. :(
Título: Re:comparación de dos cadenas JAVA
Publicado por: pedro,, 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.
Título: Re:comprobar si se pueden formar palabras a partir de ciertas letras en Java
Publicado por: xeta21 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.. :(
Título: Re:comprobar si se pueden formar palabras a partir de ciertas letras en Java
Publicado por: pedro,, 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);
        }
Título: Re:comprobar si se pueden formar palabras a partir de ciertas letras en Java
Publicado por: xeta21 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.. :(
Título: Re:comprobar si se pueden formar palabras a partir de ciertas letras en Java
Publicado por: pedro,, 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.
Título: Re:comprobar si se pueden formar palabras a partir de ciertas letras en Java
Publicado por: xeta21 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!!!!!!!