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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Ayuda con este método.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con este método.  (Leído 5,440 veces)
Aikanáro Anário


Desconectado Desconectado

Mensajes: 694



Ver Perfil WWW
Ayuda con este método.
« en: 4 Octubre 2011, 04:28 am »

Estoy haciendo el juego de ahorcado y tengo el siguiente método que sirve para recorrer la palabra que hay que adivinar en busca de un caracter que selecciono el usuario de un combo box.

Código
  1. public void buscarLetra(){
  2. for(int i=0;i<palabraElegida.length();i++){
  3. if(palabraElegida.substring(i, i+1).equals(letraEscogida)){
  4. System.out.println("si esta la  Letra Escogida");
  5. }
  6. System.out.println(getLetraEscogida());
  7. }
  8. }


Ahora mismo como ven xD, el método eso no es lo que hace. Por que primero estaba probando (imprimiendo por la consola) si se estaba imprimiendo el valor de la variable LetraEscogida, pero cuando sale por consola se imprimen varios nulls. No sé por qué. La variable letraEscogida es private, dentro de la misma clase, así que debería funcionar, y también cree un método get para esa misma variable, pero no funciona, sigue saliendo null.

Esto son los métodos que tengo para capturar el valor de un JCombo Box y que se muestren en un panel cuando hacen clic en un botón:

Código
  1. //obtiene la letra seleccionada del comboBox
  2. public void itemStateChanged(ItemEvent e) {
  3. if(e.getSource() == jcb){ //jcb es el nombre del combo box
  4. letraEscogida = (((String) jcb.getSelectedItem()).toLowerCase());
  5. }
  6. }
  7.  
  8. //habilitar la funcion Salir del menu
  9. //mostrar la letra escogida en el panel intentos
  10. public void actionPerformed(ActionEvent e) {
  11. if(e.getSource() == salir)
  12. System.exit(0);
  13. if(e.getSource() == boton){
  14. lbl_letras.setText(letraEscogida);
  15. }
  16. }

En el constructor tengo estas líneas que no entiendo muy bien su significado, pero sé que hay que ponerlas xD:
Código
  1. salir.addActionListener(this);
  2. boton.addActionListener(this);
  3. jcb.addItemListener(this);


Para hacer el método buscarLetra() bien, debería (el método) de usar letraEscogida cuando se presione el Jboton boton y no desde que se seleccione en el JCombo Box (que es lo que haría el método como lo tengo ahora, si funcionara). Además necesito una forma de activar o llamar ese método cada vez que se presione el botón, (porque después si la letra forma parte de la palabra a adivinar, tengo que sustituir el o los guiones bajos donde debería ir la letra. Ej. si la palabra es vaca, hay 4 guiones bajos _ _ _ _ y si la letra es a, tengo que sustituir el 2do y el 4to guión bajo)


En línea

Lo que faltaba en internet: http://binar10s.blogspot.com/
s00rk

Desconectado Desconectado

Mensajes: 195



Ver Perfil
Re: Ayuda con este método.
« Respuesta #1 en: 4 Octubre 2011, 05:58 am »

Pues no podria saber muy bien ya que pues no se ve muy bien la clase jeje, donde tienes tales propiedades y metodos jeje

-----------

Tambien podrias hacer el chuqueo por caracteres a mi pareces es mejor supongo jeje

Solamente la palabra que este toda en mayuscula y luego que lo que el usuario escriba lo convierte en mayuscula.

y ya ahora pues seria algo asi:

Código
  1. for(int x = 0; x < palabra.length(); x++)
  2. {
  3.   if(palabra.charAt(x) == letraEscogida.charAt(0))
  4.   {
  5.   }
  6. }
  7.  

Bueno eso seria una idea supongo haciendo una comparacion por caracteres que a mi parecer es mejor bueno aunque


En línea

Aikanáro Anário


Desconectado Desconectado

Mensajes: 694



Ver Perfil WWW
Re: Ayuda con este método.
« Respuesta #2 en: 4 Octubre 2011, 06:46 am »

Gracias por tu ayuda, pero ya he resuelto una parte.

Es que tenía un disparate porque todavía no entiendo bien los eventos.
Pero lo que tenía que hacer era pasar la sentencia que le da el valor seleccionado del JCombo Box a la variable letraElegida al método actionPerformed, yo lo tenía en el método itemStatedChanged y quedaba mal.
Y para que el método que compara la letraEscogida con la palabra se ejecute cada vez que le doy al botón, solo tengo que llamar ese método dentro del método actionPerformed.

Wow, había pasado 2 días luchando con eso. Aunque todavía me falta  :xD



Otro problema es para sustituir la letra que forma parte de la palabra en su correspondiente espacio. Necesito ayuda con eso. Estoy muy perdido con eso y creo que no es para nada como yo lo tengo

Tengo este método que crea tantas rayas como letras tenga la palabra:
Código
  1. public void presentarNumRayas(){
  2. switch(palabraElegida.length()){
  3. case 4:
  4. lbl_long4 = new JLabel(" _ _ _ _ "); //tiene 9  - 5
  5. panelPalabras.add(lbl_long4);
  6. break;
  7. case 5:
  8. lbl_long5 = new JLabel(" _ _ _ _ _ "); //tiene 11  - 6
  9. panelPalabras.add(lbl_long5);
  10. break;
  11. case 6:
  12. lbl_long6 = new JLabel(" _ _ _ _ _ _ "); //tiene 13  - 7
  13. panelPalabras.add(lbl_long6);
  14. break;
  15. case 7:
  16. lbl_long7 = new JLabel(" _ _ _ _ _ _ _ "); //tiene 15  - 8
  17. panelPalabras.add(lbl_long7);
  18. break;
  19. case 8:
  20. lbl_long8 = new JLabel(" _ _ _ _ _ _ _ _ "); //tiene 17  - 9
  21. panelPalabras.add(lbl_long8);
  22. break;
  23. }
  24. }

Y este para buscar la letra dentro de la palabra. Si la letra forma parte de la palabra, entonces se determina cual Label es el que se está mostrando y a ese label le setteo la letraElegida.
Pero eso es un disparate, hay muchos inconvenientes: el principal de todos es que muestra las letras en el orden que el usuario las adivina.
Código
  1. public void buscarLetra(){
  2. for(int i=0;i<palabraElegida.length();i++){
  3. if(palabraElegida.substring(i, i+1).equals(letraEscogida)){
  4. auxCorrecto += letraEscogida;
  5. switch(palabraElegida.length()){
  6. case 5:
  7. lbl_long5.setText(auxCorrecto+="");
  8. break;
  9. }
  10. }
  11.  
  12. }
  13. }


Necesito saber otra forma de hacerlo, tal vez sin necesidad de crear un Label para cada longitud. Que se cree solo un Label con la palabra y que sea oculta para el usuario, entonces que cuando se haga la comparación se muestre sola la letra que ha adivinado.



Necesito hacer esto:
Tengo un String, por ejemplo: ¨"Animal" y tengo que reemplazar en ese String el caracter que ocupa la posición 3 (el índice 3) que sería la "m" por una "b" por ejemplo para que quede así: "Anibal"
¿Cómo puedo hacer eso?

Sé que está el método string.indexOf() que me da el índice que en que está un caracter dentro de un String. Y sé que está el método string.replace() que replaza un caracter viejo por uno nuevo. Pero cómo decirlo.... es que no son como "compatibles" o sea no encuentro una forma de combinarlos para hacer lo que quiero.



Creo que se puede hacer así:
Código
  1. String str = "Animal";
  2. int index = str.indexOf('m');
  3. System.out.println("Reemplazo: " +str.replace(str.charAt(index),'b'));
  4.  
[/u]

No sé que pasa, pero casi siempre que posteo algo al rato se me ocurre la solución, el foro es mágico xD
« Última modificación: 4 Octubre 2011, 20:41 pm por Aikanáro Anário » En línea

Lo que faltaba en internet: http://binar10s.blogspot.com/
s00rk

Desconectado Desconectado

Mensajes: 195



Ver Perfil
Re: Ayuda con este método.
« Respuesta #3 en: 5 Octubre 2011, 05:54 am »

Pues aburrido me puse a hacer el mismo juego del ahorcado y aqui lo hice jeje aunque pues sin GUI jeje

Aqui te lo dejo:

Principal:
Código
  1. package Ahorcado;
  2.  
  3. import java.util.Scanner;
  4.  
  5. public class Principal
  6. {
  7. public static void main(String[] args)
  8. {
  9. Scanner Leer = new Scanner(System.in);
  10. AHORCADO A = new AHORCADO();
  11. String letra = "";
  12. char Letra;
  13. int op = -1;
  14. do{
  15. if(op == -1)
  16. op = 1;
  17. else{
  18. A.SOP("\n[1] - Jugar de Nuevo\n[0] - Salir");
  19. op = Leer.nextInt();
  20. }
  21.  
  22.  
  23. switch(op)
  24. {
  25. case 1:
  26. A.Iniciar();
  27. while(A.Gano == -1)
  28. {
  29. letra = Leer.next();
  30. Letra = letra.charAt(0);
  31. A.BuscarLetra(Letra);
  32. }
  33. break;
  34. case 0:
  35. break;
  36. default:
  37. A.SOP("Opcion Indefinida!");
  38. }
  39.  
  40. }while(op != 0);
  41.  
  42. }
  43.  
  44. }
  45.  

AHORCADO:
Código
  1. package Ahorcado;
  2.  
  3. import java.util.Random;
  4.  
  5. public class AHORCADO
  6. {
  7. private String palabra = "", Solucion = "";
  8. private int pos = -1, intentos = 0, maxintentos = 6;
  9. private String [] PALABRAS = {"GATO", "PERRO", "ELEFANTE", "CASA", "AUTOMOVIL",
  10. "ESCUELA", "MALCOM IN THE MIDDLE"};
  11. public int Gano = -1;
  12.  
  13. public void Iniciar()
  14. {
  15. Random R = new Random();
  16. int x = -1;
  17. do{
  18. x = R.nextInt(PALABRAS.length);
  19. }while(pos == x);
  20. pos = x;
  21. palabra = PALABRAS[pos];
  22.  
  23. for(x = 0; x < palabra.length(); x++)
  24. {
  25. if(palabra.charAt(x) != ' ')
  26. Solucion += "_";
  27. else
  28. Solucion += " ";
  29. }
  30. //SOP(palabra);
  31. Dibujar();
  32. }
  33.  
  34. public void BuscarLetra(char pal)
  35. {
  36. String Sol1 = Solucion;
  37. Solucion = "";
  38. for(int x = 0; x < palabra.length(); x++)
  39. {
  40. if(palabra.charAt(x) != ' ')
  41. {
  42. if(pal == palabra.charAt(x))
  43. Solucion += pal;
  44. else
  45. Solucion += Sol1.charAt(x);
  46. }else
  47. Solucion += ' ';
  48. }
  49.  
  50. if(Sol1.compareTo(Solucion) == 0 && Solucion.indexOf(pal) == -1)
  51. intentos++;
  52.  
  53. Dibujar();
  54. if(Solucion.compareTo(palabra) == 0)
  55. {
  56. Gano = 0;
  57. SOP("Usted ha GANADO!!!! ;D");
  58. }else if(intentos == maxintentos){
  59. Gano = 1;
  60. SOP("Usted ha perdido!!! ");
  61. }
  62. }
  63.  
  64. private void Dibujar()
  65. {
  66. for(char c: Solucion.toCharArray())
  67. System.out.print(c + " ");
  68. SOP("");
  69. SOP("\nIntentos restantes: " + (maxintentos - intentos));
  70. }
  71.  
  72. public void SOP(String msj)
  73. {
  74. System.out.println(msj);
  75. }
  76.  
  77. }
  78.  
En línea

Aikanáro Anário


Desconectado Desconectado

Mensajes: 694



Ver Perfil WWW
Re: Ayuda con este método.
« Respuesta #4 en: 6 Octubre 2011, 04:00 am »

No me funciona bien :-\

Intenté con todas la vocales y no hizo nada, solo iba restando intentos y todas las palabras tienen vocales.
En línea

Lo que faltaba en internet: http://binar10s.blogspot.com/
s00rk

Desconectado Desconectado

Mensajes: 195



Ver Perfil
Re: Ayuda con este método.
« Respuesta #5 en: 6 Octubre 2011, 04:19 am »

Si se me paso eso de convertir lo que escribas en la consola a Mayuscula jeje, pero en si ya con eso deberia funcionar.

En el main donde lee la palabra:
Código
  1. while(A.Gano == -1)
  2. {
  3. letra = Leer.next().toUpperCase();
  4. Letra = letra.charAt(0);
  5. A.BuscarLetra(Letra);
  6. }
  7.  
En línea

Aikanáro Anário


Desconectado Desconectado

Mensajes: 694



Ver Perfil WWW
Re: Ayuda con este método.
« Respuesta #6 en: 6 Octubre 2011, 18:18 pm »

Gracias, creo que el método BuscarLetra() me va a servir.

Pensé que lo podía hacer como ya dije antes
Citar
String str = "Animal";
int index = str.indexOf('m');
System.out.println("Reemplazo: " +str.replace(str.charAt(index),'b'));

Pero no me funcionó. En ese caso donde hay que sustituir un caracter de una palabra funciona bien, pero en el caso mío que todos los caracteres son iguales ( _ _ _ _ _ ) entonces lo sustituye todo.
En línea

Lo que faltaba en internet: http://binar10s.blogspot.com/
s00rk

Desconectado Desconectado

Mensajes: 195



Ver Perfil
Re: Ayuda con este método.
« Respuesta #7 en: 6 Octubre 2011, 21:33 pm »

Gracias, creo que el método BuscarLetra() me va a servir.

Pensé que lo podía hacer como ya dije antes
Pero no me funcionó. En ese caso donde hay que sustituir un caracter de una palabra funciona bien, pero en el caso mío que todos los caracteres son iguales ( _ _ _ _ _ ) entonces lo sustituye todo.

Exacto jeje, de hecho yo tmb estuve un poco de tiempo en eso, hasta que se me hizo hacer una segunda y de ahi empezar a checar y si se encuentra la palabra se agrega a la solucion sino se pone la misma que estaba anteriormente ya sea "_" o la letra que ya se haya encontrado jeje

En esta parte:
Código
  1. if(pal == palabra.charAt(x))
  2.    Solucion += pal;
  3. else
  4.    Solucion += Sol1.charAt(x);

ahi con eso se busca la palabra si esta se pone, sino se pone lo que estaba anteriormente en la solucion ya que al principio del metodo pues poniamos Sol1 = Solucion; y luego Solucion = "" para asi volverla a llenar con la nueva palabra que se vaya a encontrar en la palabra y si no pues que se ponga lo mismo que tenia anteriormente.

Saludos*! ^_^
En línea

Aikanáro Anário


Desconectado Desconectado

Mensajes: 694



Ver Perfil WWW
Re: Ayuda con este método.
« Respuesta #8 en: 7 Octubre 2011, 05:12 am »

Pero hay cosas que no entiendo.

Código
  1. public void BuscarLetra(char pal)
  2. {
  3. String Sol1 = Solucion;
  4. Solucion = "";
  5. for(int x = 0; x < palabra.length(); x++)
  6. {
  7. if(palabra.charAt(x) != ' ')
  8. {
  9. if(pal == palabra.charAt(x))
  10. Solucion += pal;
  11. else
  12. Solucion += Sol1.charAt(x);
  13. }else
  14. Solucion += ' ';
  15. }
  16. }
  17.  

En ese ciclo el "else" externo nunca se va a ejecutar.
Supongamos que la palabra es "vaca", entonces el ciclo va a ir comparando cada letra de esa palabra con '_',
vaca.charAt(0) = v
vaca.charAt(1) = a
vaca.charAt(2) = c
vaca.charAt(3) = a
Cada una de esas letras es distinta de '_', así que siempre se va ejecutar lo que está adentro del if y nunca se va a ejecutar el else, entonces por qué hay un else?



Oh, ok, ya entendí que es para las frases que tienen espacio, no me fijé en la excepción a la regla :p.
Gracias!
« Última modificación: 7 Octubre 2011, 05:56 am por Aikanáro Anário » En línea

Lo que faltaba en internet: http://binar10s.blogspot.com/
s00rk

Desconectado Desconectado

Mensajes: 195



Ver Perfil
Re: Ayuda con este método.
« Respuesta #9 en: 7 Octubre 2011, 07:17 am »

Si jeje exactamente al principio me daba error y pues es para eso mismo de los espacios jeje si lo quitas y pones el de Malcom In The Middle si pones una letra no pasara nada, pero al poner la siguiente y que no este dara error puesto que si no esta pondra sol1.charAt(x) y en tal x ya en la solucion anteriormente se habran quitado los espacios .

Bueno no se explicarme muy bien pero creo que ya sabes jeje ;$

Saludos*!
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
como hacer este metodo de propagacion con APIs
Programación Visual Basic
ricardovinzo 4 3,072 Último mensaje 2 Abril 2009, 01:14 am
por c4st0r
Este metodo que estoy usando esta bien?
.NET (C#, VB.NET, ASP)
enterariel 2 4,137 Último mensaje 6 Mayo 2009, 00:48 am
por MANULOMM
Dudas con parametros para este método
Java
GaudyG 1 2,388 Último mensaje 4 Julio 2011, 02:38 am
por Valkyr
que hace este metodo css()
Desarrollo Web
franfis 1 910 Último mensaje 7 Julio 2013, 04:10 am
por NetStorm
¿Por qué es ambigua la llamada a este método?
Programación C/C++
Repikas 1 1,182 Último mensaje 26 Junio 2017, 14:43 pm
por ivancea96
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines