elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


  Mostrar Mensajes
Páginas: 1 [2]
11  Programación / Java / Re: Encontrar un String en un Vector de String en: 2 Mayo 2017, 17:22 pm
Con este codigo funciona, pero no es lo que busco, me gustaria hacerlo con un bucle para cualquier tipo de longitud del vector. Este solo funcionaria para este caso.
Código
  1. public static String estacion(String[] linia, String estacion) {
  2.        String sucursal="";
  3.            if(estacion.equals(linia[0])||estacion.equals(linia[1])||estacion.equals(linia[2])){
  4.                sucursal="La Sagrera";
  5.            }else if(estacion.equals(linia[3])||estacion.equals(linia[4])||estacion.equals(linia[5])){
  6.                sucursal="Gorg";
  7.            }else{
  8.                sucursal="";
  9.            }            
  10.        return sucursal;
  11.    }
12  Programación / Java / Encontrar un String en un Vector de String [JAVA] en: 2 Mayo 2017, 16:43 pm
Hola compañeros, tengo una duda espero que entre todos podamos resolverla.
Dice así:
tengo un vector de estaciones:
Código
  1.        String[] linia = new String[6];
  2.        linia[0] = "La Sagrera";
  3.        linia[1] = "Onze de Setembre";
  4.        linia[2] = "Bon Pastor";
  5.        linia[3] = "Llefiá";
  6.        linia[4] = "La Salut";
  7.        linia[5] = "Gorg";
Se introduce por teclado el nombre de una estación y tengo que averiguar la sucursal que queda más cerca de la estación que he introducido.
Las sucursales están colocadas en los extremos del vector: linia[0] y linia.length-1
Código
  1. String sucursal0 = estacion(linia,"La Salut");
  2. System.out.println("La sucursal mas cercana es: "+sucursal0);
  3. String sucursal1 = estacion(linia,"Onze de Setembre");
  4. System.out.println("La sucursal mas cercana es: "+sucursal1);
  5. String sucursal2 = estacion(linia,"Bon Pastor");
  6. System.out.println("La sucursal mas cercana es: "+sucursal2);
  7. String sucursal3 = estacion(linia,"Llefiá");
  8. System.out.println("La sucursal mas cercana es: "+sucursal3);
  9. String sucursal4 = estacion(linia,"La Sagrera");
  10. System.out.println("La sucursal mas cercana es: "+sucursal4);
  11. String sucursal5 = estacion(linia,"Gorg");
  12. System.out.println("La sucursal mas cercana es: "+sucursal5);
Tanto si  el valor introducido no es válido (no se reconoce dentro del vector), o el valor introducido es una de las Sucursales. Se devolverá una cadena vacía.

Si el valor es válido y no es una de las sucursales, se devolverá el nombre de la sucursal más cercana (Aquí esta la parte que no entiendo, ya que me cuesta mucho tratar con vectores de String al no saber comparar bien los elementos entre ellos...)

Cómo podria solucionar el tema de comparar los Strings, la verdad estoy muy verde con ese tema, esta es mi funcion(sin terminar):
Código
  1.    public static String estacion(String[] linia, String estacion) {
  2.        String sucursal="";
  3.        for(int i=0;i<linia.length/2;i++){
  4.            if(estacion.equals(linia[i+1])||estacion.equals(linia[i+2])){//esta parte del codigo es muy chapucera, ya que si tuviera un vector mas grande no funcionaria bien con esto...
  5.                sucursal="La Sagrera";
  6.            }else if(estacion.equals(linia.length-1)){
  7.                sucursal="Gorg";
  8.            }else if(estacion.equals(linia[0])){
  9.                sucursal="La Sagrera";
  10.            }else if(){//aqui viene el condicional que necesito
  11.                sucursal="";
  12.            }            
  13.        }
  14.        return sucursal;
  15.    }
Gracias por vuestra ayuda!
13  Programación / Java / Re: Recorrer y sustituir en matriz JAVA en: 2 Mayo 2017, 00:19 am
characterFor

Es el nombre que le puse a ese ciclo. Es como una etiqueta, para referirme a ese ciclo en un futuro (tengo entendido que no es muy buena practica hacerlo de esta forma, pero es fácil de implementar).

Por tanto cuando yo abajo pongo: continue characterFor, le estoy diciendo que termine de hacer lo que esta haciendo y que continue con la siguiente iteracion del ciclo llamado de esa forma.

Código
  1. nombreCiclo : for(int i = 0;i<10; i++) {
  2.  
  3. }
  4.  

Ya entiendo, pues muchas gracias por tu ayuda compañero! He aprendido mucho.

PD: Cómo se cierra un tema? Aquí sigo con mis novatadas :P
14  Programación / Java / Re: Recorrer y sustituir en matriz JAVA en: 1 Mayo 2017, 12:19 pm
Solo aclárame una cosa: ¿Si yo ingresara "SABR" en vez de "ABRS" el resultado seria el mismo?
EDITO:

Como no me respondiste, esto es lo que creo que quieres:
Código
  1. public static char[][] sustituir(char[][] sopa, String palabra) {
  2.        characterFor : for (int c = 0; c < palabra.length(); c++) {
  3.            for (int i = 0; i < sopa.length; i++) {
  4.                for (int j = 0; j < sopa[i].length; j++) {
  5.                    if(sopa[i][j] == palabra.charAt(c)) {
  6.                        sopa[i][j] = '*';
  7.                        continue characterFor;
  8.                    }
  9.                }
  10.            }
  11.        }
  12.        return sopa;
  13.    }

Si no entiendes algo, dime.
Ah vale, perfecto, gracias.
Es que soy nuevo con los foros jeje :P

Sí, el resultado sería el mismo.

La verdad me has solucionado perfectamente la duda.
Pero ahora tengo otra:
"characterFor :"
Qué es exactamente? y cómo se utiliza?

Por otro lado muchas gracias por la ayuda, aqui dejo el codigo final por si alguien tiene curiosidad o lo necesita
Código
  1. package Mezcladitos;
  2. import java.util.*;
  3. /**
  4.  *
  5.  * @author anton
  6.  */
  7. public class Sustituir {
  8.  
  9.    public static void main(String[] args) {
  10.        int dimension=demanarDimensio();
  11.        char[][] vectorCuadro = genCuadro(dimension);
  12.        char[][] sustituido;
  13.        mostrarInstruccions();
  14.        boolean continuar;
  15.        int puntuacio=0;
  16.        do{
  17.            mostrarSopaLletres(vectorCuadro);
  18.            String palabra=pedirPalabra();
  19.            sustituido = sustituir(vectorCuadro, palabra);
  20.            puntuacio=puntuacio+calcularPuntuacio(palabra,queden(sustituido),vectorCuadro.length);
  21.            System.out.println("Tu puntuacion obtenida es: "+puntuacio);
  22.            System.out.println("----------------------------");
  23.            mostrarSopaLletres(sustituido);
  24.            continuar = preguntarContinuar();  
  25.        }while (calcularLletresQueQueden(vectorCuadro) > 1 && continuar);
  26.        mostrarCredits();
  27.        System.out.println("Tu putnuación final es: "+puntuacio);
  28.    }
  29.    public static void mostrarCredits() {
  30.        System.out.println("Gracias por participar en la comprobación de funcionamiento de la sopa de letras de Antonio Gonzalez la Carrubba");
  31.        System.out.println("Autor:");
  32.        System.out.println("Antonio Gonzalez la Carrubba");
  33.    }
  34.    public static boolean preguntarContinuar(){
  35.        Scanner entrada = new Scanner(System.in);
  36.        System.out.println("Quieres continuar: ");
  37.        String cont=entrada.next().toLowerCase();
  38.        if(cont.equals("si")){
  39.            return true;
  40.        }else{
  41.            return false;            
  42.        }
  43.    }
  44.    public static boolean continuar(boolean continuar) {
  45.        if (continuar) {
  46.            return true;
  47.        } else {
  48.            return false;
  49.        }
  50.    }
  51.    public static int calcularLletresQueQueden(char[][] tauler) {
  52.        int cont = 0;
  53.        for (int n = 0; n < tauler.length; n++) {
  54.            for (int o = 0; o < tauler[n].length; o++) {
  55.                if (tauler[n][o] != '*') {
  56.                    cont++;
  57.                }
  58.            }
  59.        }
  60.        return cont;
  61.    }
  62.    public static int demanarDimensio() {
  63.        Scanner entrada = new Scanner(System.in);
  64.        System.out.println("Introduce dimension: ");
  65.        int dimension=entrada.nextInt();
  66.        return dimension;
  67.    }
  68.    public static void mostrarInstruccions() {
  69.        System.out.println("Sopa de Letras v.1");
  70.        System.out.println("Reglas del juego");
  71.        System.out.println("Se mostrará un cuadro con letras desordenadas");
  72.        System.out.println("con las cuales el jugador debera formar palabras hasta que se terminen las letras del tablero");
  73.        System.out.println("Al final del juego se mostrará la puntuación obtenida.");
  74.    }
  75.    public static String pedirPalabra(){
  76.        Scanner entrada = new Scanner(System.in);
  77.        System.out.println("Introduce palabra: ");
  78.        String palabra=entrada.next().toUpperCase();
  79.        return palabra;
  80.    }
  81.  
  82.    public static void mostrarSopaLletres(char[][] tauler) {
  83.        for (int n = 0; n < tauler.length; n++) {
  84.            for (int o = 0; o < tauler[n].length; o++) {
  85.                System.out.printf("%2c", tauler[n][o]);
  86.            }
  87.            System.out.println();
  88.        }
  89.    }
  90.  
  91.    public static char[][] generarSopaLletres(int dimensio) {
  92.        char[][] vectorGen = new char[dimensio][dimensio];
  93.        for (int i = 0; i < dimensio; i++) {
  94.            for (int j = 0; j < dimensio; j++) {
  95.                vectorGen[i][j] = (char) (Math.random() * (90 - 65 + 1) + 65);
  96.            }
  97.        }
  98.        return vectorGen;
  99.    }
  100.  
  101.    public static char[][] genCuadro(int cantVal) {
  102.        char[][] vectorGen = new char[cantVal][cantVal];
  103.        for (int i = 0; i < cantVal; i++) {
  104.            for (int j = 0; j < cantVal; j++) {
  105.                vectorGen[i][j] = (char) (Math.random() * (90 - 65 + 1) + 65);
  106.            }
  107.        }
  108.        return vectorGen;
  109.    }
  110.    public static char[][] sustituir(char[][] sopa, String palabra) {
  111.        characterFor : for (int c = 0; c < palabra.length(); c++) {
  112.            for (int i = 0; i < sopa.length; i++) {
  113.                for (int j = 0; j < sopa[i].length; j++) {
  114.                    if(sopa[i][j] == palabra.charAt(c)) {
  115.                        sopa[i][j] = '*';
  116.                        continue characterFor;
  117.                    }
  118.                }
  119.            }
  120.        }
  121.        return sopa;
  122.    }
  123. //    Fórmula = longitud de la paraula multiplicat per (la quantitat total de
  124. //     * lletres del tauler - les que queden)
  125.    public static int calcularPuntuacio(String par, int queden, int dimensio) {
  126.        int puntuacio;
  127.        puntuacio = (par.length() * (dimensio - queden));
  128.        return -puntuacio;
  129.    }
  130.    public static int queden(char [][] sopa){
  131.        int queden=0;
  132.        for (int i = 0; i < sopa.length; i++) {
  133.                for (int j = 0; j < sopa[i].length; j++) {
  134.                    if(sopa[i][j] != '*'){
  135.                        queden++;
  136.                    }
  137.                }
  138.            }
  139.        return queden;
  140.    }
  141. }
  142.  
15  Programación / Java / Re: Recorrer y sustituir en matriz JAVA en: 1 Mayo 2017, 10:29 am
No entiendo tu código ya que si bien el "char[][] m" puede ser tu sopa de letras y el "String s" puede ser la palabra que agregas... en ningún momento dices donde agregarla.

Entiendo que tu función es algo como esto:

Entradas: char[][] m (Sopa), String s (Palabra)
Proceso: Remplazar en la sopa de letras los espacios vacíos por las letras de la palabra agregada.
Salida: char[][] m (Sopa con las letras agregadas).

Y al menos yo no veo forma de conseguir esa salida con las entradas que me das. Por tanto,  que tal si agregamos tres entradas mas: int ix (Punto x inicial), int iy (Punto y inicial) y boolean isHorizontal (Para saber si tengo que agregar la palabra en horizontal o vertical).

Con estos tres parámetros mas podrás saber en donde empezar a agregar y hacia donde agregarlo.

Normalmente no pondría todo el código, peor hoy me siento bondadoso (o malo, depende de como lo mires).

Suerte! (Cualquier cosa nos dices, seguro yo o alguien mas te responderá... me demore en responder ya que vi que no estaba en Java y quería esperar que lo cambiaran  :xD solo por joder.)
Hola, gracias por responder.
Realmente no llega a ser una sopa de letras, digamos que tenemos una matriz de char generados aleatoriamente. Yo le introduzco una cadena, no necesariamente tiene que estar la cadena ordenada dentro de la matriz. Y mi función debería encontrar 1 coincidencia por cada elemento del String, y esa única coincidencia sustituirla por un [ * ] .

Dicho esto, solucioné el problema que había con el OutOfBoundsException con el siguiente
Código:
public static char[][] sustituir(char[][] m, String s) {
        for (int a = 0; a < s.length(); a++) {
            for (int i = 0; i < m.length; i++) {
                for (int j = 0; j < m[i].length; j++) {
                    if (s.charAt(a) == m[i][j]) {
                        m[i][j]='*';
                    }
                }
            }
        }
        return m;
Ahora el problema está en que tengo que sustituir una única vez cada caracter de la matriz por cada caracter de la cadena. Es decir si tengo la matriz:

A B C D E F G
H I J K L M N
O P Q R S T U
A I P T R A Z
S Z A J K P N

Y tengo la cadena ABRS quedaría así:

* * C D E F G
H I J K L M N
O P Q * * T U
A I P T R A Z
S Z A J K P N

PD: Siento lo de donde puse el post, no estoy acostumbrado a postear en foros y no vi donde iba... Gracias!

Este es el codigo de mi programa:
Código:
public class Sustituir {

    public static void main(String[] args) {
        int dimension=demanarDimensio();
        char[][] vectorCuadro = genCuadro(dimension);
        char[][] sustituido;
        mostrarInstruccions();
        boolean continuar;
        do{
            mostrarSopaLletres(vectorCuadro);
            String palabra=pedirPalabra();
            sustituido = sustituir(vectorCuadro, palabra);
            System.out.println("----------------------------");
            mostrarSopaLletres(sustituido);
            continuar = preguntarContinuar();
        }while (calcularLletresQueQueden(vectorCuadro) > 1 && continuar);
        mostrarCredits();
    }
    public static void mostrarCredits() {
        System.out.println("Gracias por participar en la comprobación de funcionamiento de la sopa de letras de Antonio Gonzalez la Carrubba");
        System.out.println("Autor:");
        System.out.println("Antonio Gonzalez la Carrubba");
    }
    public static boolean preguntarContinuar(){
        Scanner entrada = new Scanner(System.in);
        System.out.println("Quieres continuar: ");
        String cont=entrada.next().toLowerCase();
        if(cont.equals("si")){
            return true;
        }else{
            return false;           
        }
    }
    public static boolean continuar(boolean continuar) {
        if (continuar) {
            return true;
        } else {
            return false;
        }
    }
    public static int calcularLletresQueQueden(char[][] tauler) {
        int cont = 0;
        for (int n = 0; n < tauler.length; n++) {
            for (int o = 0; o < tauler[n].length; o++) {
                if (tauler[n][o] != '*') {
                    cont++;
                }
            }
        }
        return cont;
    }
    public static int demanarDimensio() {
        Scanner entrada = new Scanner(System.in);
        System.out.println("Introduce dimension: ");
        int dimension=entrada.nextInt();
        return dimension;
    }
    public static void mostrarInstruccions() {
        System.out.println("Sopa de Letras v.1");
        System.out.println("Reglas del juego");
        System.out.println("Se mostrará un cuadro con letras desordenadas");
        System.out.println("con las cuales el jugador debera formar palabras hasta que se terminen las letras del tablero");
        System.out.println("Al final del juego se mostrará la puntuación obtenida.");
    }
    public static String pedirPalabra(){
        Scanner entrada = new Scanner(System.in);
        System.out.println("Introduce palabra: ");
        String palabra=entrada.next().toUpperCase();
        return palabra;
    }

    public static void mostrarSopaLletres(char[][] tauler) {
        for (int n = 0; n < tauler.length; n++) {
            for (int o = 0; o < tauler[n].length; o++) {
                System.out.printf("%2c", tauler[n][o]);
            }
            System.out.println();
        }
    }

    public static char[][] generarSopaLletres(int dimensio) {
        char[][] vectorGen = new char[dimensio][dimensio];
        for (int i = 0; i < dimensio; i++) {
            for (int j = 0; j < dimensio; j++) {
                vectorGen[i][j] = (char) (Math.random() * (90 - 65 + 1) + 65);
            }
        }
        return vectorGen;
    }

    public static char[][] genCuadro(int cantVal) {
        char[][] vectorGen = new char[cantVal][cantVal];
        for (int i = 0; i < cantVal; i++) {
            for (int j = 0; j < cantVal; j++) {
                vectorGen[i][j] = (char) (Math.random() * (90 - 65 + 1) + 65);
            }
        }
        return vectorGen;
    }

    public static char[][] sustituir(char[][] m, String s) {
        for (int a = 0; a < s.length(); a++) {
            for (int i = 0; i < m.length; i++) {
                for (int j = 0; j < m[i].length; j++) {
                    if (s.charAt(a) == m[i][j]) {
                        m[i][j]='*';
                    }
                }
            }
        }
        return m;
    }
    public static int calcularPuntuacio(String par, int queden, int dimensio) {
        int puntuacio;
        puntuacio = (par.length() * dimensio) - queden;
        return puntuacio;
    }
}
16  Programación / Java / Recorrer y sustituir en matriz JAVA en: 1 Mayo 2017, 01:38 am
Hola buenas noches, primero que nada me presento, soy Tony estudiante de formación superior de desarrollo de aplicaciones web.

Tengo un pequeño problema, yo creo bastante simple pero que mi cabeza por algún motivo no procesa. El problema es el siguiente, estoy haciendo un ejercicio para hacer una sopa de letras, no funcional, me explico, no se va a acceder a ningún fichero diccionario ni nada parecido, simplemente interactuaremos con los resultados generados por nuestro propio código. Y realmente estoy atascado en el momento de buscar y sustituir valores en la matriz.
Código:
public static /*char[][]*/ int sustituir(char[][] m, String s) {
        int cont = 0;
        for (int i = 0; i < m.length; i++) {
            for (int j = 0; j < m[i].length; j++) {
                if(s.charAt(i)==m[i][j]){
                    cont++; //esto es simplemente para ver si llega a interpretar la condición
                }
            }
        }
        return cont;
    }
}
Esa función realmente debería devolver un vector de caracteres con los caracteres que le pase en el string sustituidos 1 única vez en toda la matriz. (Sí, el código aun está en ropa interior, pero no logro empezar bien...).

El problema creo que está en el condicional, ya que si le paso una cadena  con menor longitud que el vector saltará un OutOfBoundsException. No sé solucionarlo...
Páginas: 1 [2]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines