|
231
|
Programación / Java / Re: Ayuda con este método.
|
en: 7 Octubre 2011, 05:12 am
|
Pero hay cosas que no entiendo. public void BuscarLetra(char pal) { Solucion = ""; for(int x = 0; x < palabra.length(); x++) { if(palabra.charAt(x) != ' ') { if(pal == palabra.charAt(x)) Solucion += pal; else Solucion += Sol1.charAt(x); }else Solucion += ' '; } }
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!
|
|
|
232
|
Programación / Java / Re: Ayuda con este método.
|
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 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.
|
|
|
233
|
Programación / Java / Re: Ayuda con este método.
|
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.
|
|
|
234
|
Programación / Java / Re: Ayuda con este método.
|
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
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: public void presentarNumRayas(){ switch(palabraElegida.length()){ case 4: lbl_long4 = new JLabel(" _ _ _ _ "); //tiene 9 - 5 panelPalabras.add(lbl_long4); break; case 5: lbl_long5 = new JLabel(" _ _ _ _ _ "); //tiene 11 - 6 panelPalabras.add(lbl_long5); break; case 6: lbl_long6 = new JLabel(" _ _ _ _ _ _ "); //tiene 13 - 7 panelPalabras.add(lbl_long6); break; case 7: lbl_long7 = new JLabel(" _ _ _ _ _ _ _ "); //tiene 15 - 8 panelPalabras.add(lbl_long7); break; case 8: lbl_long8 = new JLabel(" _ _ _ _ _ _ _ _ "); //tiene 17 - 9 panelPalabras.add(lbl_long8); break; } }
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. public void buscarLetra(){ for(int i=0;i<palabraElegida.length();i++){ if(palabraElegida.substring(i, i+1).equals(letraEscogida)){ auxCorrecto += letraEscogida; switch(palabraElegida.length()){ case 5: lbl_long5.setText(auxCorrecto+=""); break; } } } }
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í: int index = str.indexOf('m'); System. out. println("Reemplazo: " +str. replace(str. charAt(index ), 'b'));
[/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
|
|
|
235
|
Programación / Java / 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. public void buscarLetra(){ for(int i=0;i<palabraElegida.length();i++){ if(palabraElegida.substring(i, i+1).equals(letraEscogida)){ System. out. println("si esta la Letra Escogida"); } System. out. println(getLetraEscogida ()); } }
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: //obtiene la letra seleccionada del comboBox if(e.getSource() == jcb){ //jcb es el nombre del combo box letraEscogida = (((String) jcb. getSelectedItem()). toLowerCase()); } } //habilitar la funcion Salir del menu //mostrar la letra escogida en el panel intentos if(e.getSource() == salir) if(e.getSource() == boton){ lbl_letras.setText(letraEscogida); } }
En el constructor tengo estas líneas que no entiendo muy bien su significado, pero sé que hay que ponerlas xD: salir.addActionListener(this); boton.addActionListener(this); 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)
|
|
|
236
|
Programación / Java / Re: Juego "El ahorcado" con GUI.
|
en: 2 Octubre 2011, 20:04 pm
|
Y qué tipo de Layouts van a tener los paneles internos? (palabra, letra, mensaje, intentos)? Y cómo le específico la posición que cada uno de esos paneles va a ocupar? Ej. Si el panel de palabra va a estar en la columna 1, fila 1.
Lo he puesto como he entendido que me dijiste que lo pusieras En los dos primeros paneles (palabras e intentos) a los JLabels le añadí el panel a al que pertenecen, en las otras dos (letras y mensajes) lo hice al revés, al panel le añadí su JLabel. No sé cuál sea la forma correcta, me parece que es como están las dos primeras. En cualquier caso no me salen los nombres de las etiquetas. Además el panel queda tapado por la ventana, o sea tengo que anchar la ventana o minimizarla para poderlos ver al tamaño completo que tienen. Así es como se ve: http://i333.photobucket.com/albums/m399/Link02/mivent-1.png //ventana this.setTitle("El Ahorcaito"); this.setBounds(0,0,760,570); this. getContentPane(). setLayout(new GridLayout(1, 2)); this. setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE); this.setVisible(true); //IZQUIERDO //panel de las palabras panelPalabras.setLayout(null); panelPalabras.setSize(360,90); panelPalabras. setBackground(Color. lightGray); l1.add(panelPalabras); panelIzq.add(l1); //panel de intentos panelIntentos.setLayout(null); panelIntentos.setSize(360,90); panelIntentos. setBackground(Color. lightGray); l2.add(panelIntentos); panelIzq.add(l2); //panel de letras panelLetras.setLayout(null); panelLetras.setSize(360,110); panelLetras. setBackground(Color. lightGray); panelLetras.add(l3); panelIzq.add(panelLetras); //panel de mensajes panelMensajes.setLayout(null); panelMensajes.setSize(360,110); panelMensajes. setBackground(Color. lightGray); panelMensajes.add(l4); panelIzq.add(panelMensajes); this.getContentPane().add(panelIzq); //DERECHO this.getContentPane().add(panelDer); //la imagen l5i.setIcon(imagen[0]); this.getContentPane().add(l5i);
Probe de la forma siguiente y no funciona tampoco: panelPalabras.setSize(360,90); panelPalabras. setBackground(Color. lightGray); gbc.gridx = 0; gbc.gridy = 0; gbc.gridheight = 1; gbc.gridwidth = 1; l1.add(panelPalabras,gbc); gbc.gridy = 1; panelIzq.add(l1,gbc);
Es que pensaba que el título iba como un label, como en HTML :p. Pero ya veo que no. Lo cambié así y ahora funciona: panelPalabras.setLayout(null); panelPalabras.setSize(360,90); panelPalabras. setBackground(Color. lightGray); panelPalabras.setBorder(titulo); panelIzq.add(panelPalabras);
Ahora no puedo cambiar el ícono de la taza de cafe de java, tengo esta sentencia en el constructor: this. setIconImage(Toolkit. getDefaultToolkit(). getImage("icono.gif"));
tampoco funciona esta: this. setIconImage(new ImageIcon(getClass (). getResource("icono.gif"). getImage()));
la imagen icono.gif está en la carpeta bin del mismo proyecto.
|
|
|
237
|
Programación / Java / Juego "El ahorcado" con GUI.
|
en: 2 Octubre 2011, 08:16 am
|
Tengo que hacer una interfaz gráfica que luzca como esto: http://i333.photobucket.com/albums/m399/Link02/ahorcado.gifMi ventana hasta ahora luce así: http://i333.photobucket.com/albums/m399/Link02/miventa.png y no se parece en nada . Creo que mi problema está en el layout no sé cuál usar para que me quede así o cuáles métodos usar, he probado con FloWLayout, pero se ajusta y con GridBagLayout que es el que tiene ahora, pero ya ven como está. Además tampoco sé como poner la imagen al lado. Esta es la parte de la ventana: f.setTitle("El Ahorcaito"); f.setSize(760,570); f. setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE); //menu menu = new JMenu("Menú"); menu.addSeparator(); mb.add(menu); f.setJMenuBar(mb); f.setVisible(true); //posiciones gbc.gridx = 0; gbc.gridy= 0; gbc.gridwidth = 1; gbc.gridheight = 1; f.getContentPane().add(l1,gbc); gbc.gridx = 0; gbc.gridy = 1; gbc.gridwidth = 1; gbc.gridheight = 1; f.getContentPane().add(l2, gbc); gbc.gridx = 0; gbc.gridy = 2; gbc.gridwidth = 1; gbc.gridheight = 1; String[] list = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R" +"S","T","U","V","W","X","Y","Z"}; f.getContentPane().add(l3, gbc); gbc.gridx = 0; gbc.gridy = 3; gbc.gridwidth = 1; gbc.gridheight = 1; f.getContentPane().add(jcb,gbc); gbc.gridx = 0; gbc.gridy = 4; gbc.gridwidth = 1; gbc.gridheight = 1; f.getContentPane().add(l4, gbc); }
Veo que se parece un poco a HTML, pero más complicado. Básicamente lo que necesito es saber como crear un "contenedor" para cada uno de los campos y que queden más separados y alineados a la izquierda.
Ya me ha quedado más o menos, creando paneles: http://i333.photobucket.com/albums/m399/Link02/mivent.pngPero ahora ¿Cómo agregó un elemento a un panel? un botón por ejemplo. Estoy intentando hacerlo así: //panel de las palabras gbc.gridx = 0; gbc.gridy = 0; f.getContentPane().add(l1,gbc); panelPalabras.setLayout(null); panelPalabras.setSize(360,90); panelPalabras. setBackground(Color. lightGray); gbc.gridy = 1; boton.setText("OK"); boton.setVisible(true); panelPalabras.add(boton); f.getContentPane().add(panelPalabras,gbc); f.setVisible(true);
Pero no aparece el botón. Solo aparece si lo pongo fuera del panel: f.getContentPane().add(boton);
|
|
|
239
|
Foros Generales / Sugerencias y dudas sobre el Foro / Re: ¿Está prohibido pedir ayuda para tareas?
|
en: 25 Septiembre 2011, 22:47 pm
|
Lo que no se hacen tareas desde cero es cierto, tu preguntaste una duda que se puede hacer sin problemas.
Por cierto, ese ejercicio lo hacen en la carrera de informatica de la UNED, en programación en java, lo se porque ayudé a un chico con el. Si mal no recuerdo es la última practica entregable. Me equivóco?
¿La última? jeje, si es una de las primeras. Aunque depende en qué semestre iba él, quizás fue el la último de Fundamentos de Programación, yo estoy en la que va después, Programación I; aunque no estudio en la UNED (eso es en España?) yo soy de Rep. Dominicana y estudio en ITLA.
|
|
|
|
|
|
|