|
831
|
Programación / Java / Re: Juego Piedra-Papel-Tijera
|
en: 3 Octubre 2018, 01:52 am
|
El problema esta aqui en el e.getActionCommnad() siempre viene "" por lo tanto no entra en el switch de la linea 304Entonces con lo siguiente sabemos que botón se ha clickeado, y si sabemos que botón ha sido clikeado, podemos aplicar bien el click String rating = rate (e. getActionCommand(), comAction );
// Generate a random action int random = ThreadLocalRandom.current().nextInt(0, 3); String comAction = actions [random ]; // Rate the current situation if(e.getSource() == bTijeras) { rating = rate("Tijeras", comAction); }else if(e.getSource() == bPapel) { rating = rate("Papel", comAction); }else { rating = rate("Piedra", comAction); } // Show a result alert JOptionPane. showMessageDialog(null , rating , "Resultado" , 1); };
|
|
|
832
|
Programación / Java / Re: juego de adivinar palabras en consola con 3 dificultades
|
en: 2 Octubre 2018, 01:16 am
|
Hola,
no veo el log por lo visto es NPE nullPointerException
claro private static Set<String> correctas; a punta a null instancia la variable de clase, "clase" porque la tienes con static private static Set<String> correctas = new HashSet<>(); //
usa operador diamante <> de generics
public String generaPalabra (int Facil ) { int n; n = (int)(Math. random()*4);if(Facil==0) return Normal[n]; else return Dificil[n]; }
siempre dará falso porque se compara 1==0 que es falso retornando un valor random del array Difícil creo que mejor es así, public String generaPalabra (final int facil ) { if (facil == 1) { return Types. FACIL[SR. nextInt(Types. FACIL. length - 1)]; } else if (facil == 2) { return Types. NORMAL[SR. nextInt(Types. NORMAL. length - 1)]; } return Types. DIFICIL[SR. nextInt(Types. DIFICIL. length - 1)]; }
donde SR.nextInt()
para generar un numero aleatorio contenido en el largo del array fácil , y menos 1 para evitar
facil tiene 17 elementos, si cae 18 daría error xq el array no es de ese tamaño pero con -1 nunca caera 18 XD
método checarLetra creo que debería comparar aquí pero con la palabra que se genera de manera aleatoria con el método generaPalabra que la retorna palabraGenerada = Operacion.generaPalabra(1); // ver linea 90
si la palabra aleatoria es tela si se introduce X debería retornar false, porque x no esta en la palabra "tela"
public boolean checarLetra (char letra, String palabra ) { boolean mensaje = false; for (int i = 0; i < palabra.length(); i++) { if (letra == palabra.charAt(i)) { mensaje = true; break; } } return mensaje; }
xq si lo dejas como lo tienes siempre dará true ya que compará siempre el carácter introducido con la palabra que tecleas Aquí como parámetro dices palabra e introduces una letra ? XD o quizás dices, que cada letra correcta sea añadida al Set ?{ for (int i=0;i<palabra.length() ;i++) { if(palabra.charAt(i) != ' ') { letras.add(palabra.charAt(i)); } } return letras; }
Que deseas que haga actualizaVisible me imagino que si la letra introducida esta contenida en la palabra generada, que se reemplace el asterisco por la letra algo así ?
package adivinapalabras; public final class Types { public static final String FACIL [] = {"reir", "hola", "jugo", "papa", "pala", "pasa", "para", "alma", "nada", "casa", "mama", "tele", "mira", "tela", "bala", "cera", "tira"}; public static final String NORMAL [] = {"apretado", "avestruz", "ceramica", "estimulo", "amarillo", "eleccion", "estrecho", "invierno", "chatarra", "estrella"}; public static final String DIFICIL [] = {"indiscutible", "participante", "personalismo", "perturbacion", "contundencia", "supervisamos", "buscapleitos", "vinculandose"}; }
package adivinapalabras; import java.io.BufferedReader; import java.io.InputStreamReader; import java.security.SecureRandom; import java.util.HashSet; import java.util.Iterator; import java.util.Random; import java.util.Set; public class AdivinarPalabras { private static Set<String> correctas = new HashSet<>(); private static String palabraGenerada = ""; public String generaPalabra (final int facil ) { //int n = (int) (Math.random() * 4); no hace falta if (facil == 1) { return Types. FACIL[SR. nextInt(Types. FACIL. length - 1)]; } else if (facil == 2) { return Types. NORMAL[SR. nextInt(Types. NORMAL. length - 1)]; } return Types. DIFICIL[SR. nextInt(Types. DIFICIL. length - 1)]; } public boolean checarLetra (char letra, String palabra ) { boolean mensaje = false; for (int i = 0; i < palabra.length(); i++) { if (letra == palabra.charAt(i)) { mensaje = true; break; } } return mensaje; } public Set <String > letrasPalabra (String palabra ) { //Set letras = new HashSet(); no hace falta for (int i = 0; i < palabra.length(); i++) { if (palabra.charAt(i) != ' ') { correctas. add(String. valueOf(palabra. charAt(i ))); } } return correctas; } visible = ""; boolean bandera = false; for (int i = 0; i < palabra.length(); i++) { while (it.hasNext()) { char a = it.next().toString().charAt(0); System. out. println("palabra " + a + " " + palabra. trim(). charAt(i )); if (a == palabra.trim().charAt(i)) { visible += a; bandera = true; break; } } if (bandera == false) { visible += "_"; } bandera = false; it = correctas.iterator(); } return visible; } System. out. println("Establezca el nivel de dificultad: "); System. out. println("Facil(f)"); System. out. println("Normal(n)"); System. out. println("Dificil(d)"); String dificultad = entrada. readLine(); switch (dificultad) { case "f": AdivinarPalabras Operacion = new AdivinarPalabras(); try { palabraGenerada = Operacion.generaPalabra(1); System. out. println("Palabra generada: ****" + palabraGenerada ); System. out. println("teclea una letra de la palabra"); String letra = entrada. readLine(); char l = letra.charAt(0); Operacion.checarLetra(l, palabraGenerada); Operacion.letrasPalabra(palabraGenerada); Operacion.actualizaVisible(correctas, letra, letra); ex.printStackTrace(); // usado para ver la pila de error generada System. out. println("No introdujo una letra valida " + ex. getMessage()); } case "n": } } }
|
|
|
833
|
Programación / Java / Re: Cómo usar JTextPane con fuentes y tamaños diferentes
|
en: 24 Septiembre 2018, 09:02 am
|
Hasta ahora no he encontrado ayuda que me acerque a mi objetivo
Para la próxima en lo posible coloca código hecho https://docs.oracle.com/javase/tutorial/uiswing/components/editorpane.htmlhttps://docs.oracle.com/javase/tutorial/displayCode.html?code=https://docs.oracle.com/javase/tutorial/uiswing/examples/components/TextSamplerDemoProject/src/components/TextSamplerDemo.javaimport javax.swing.*; import javax.swing.text.*; import java.awt.*; public class TestForo extends JPanel { private static final String newline = "\n"; public TestForo() { scrollPane. setVerticalScrollBarPolicy(JScrollPane. VERTICAL_SCROLLBAR_ALWAYS); scrollPane. setPreferredSize(new Dimension(10, 10)); scrollPane. setMinimumSize(new Dimension(10 , 10)); add(scrollPane); } { "JenselGe hola soy java, espero que ejecutes esto XD, ", //regular "another ", //italic "styled ", //bold "text ", //small "component, ", //large "which supports embedded components..." + newline,//regular "y no pondre lloronas XD " + newline, //button "...and embedded icons..." + newline, //regular newline + "JTextPane is a subclass of JEditorPane that " + "uses a StyledEditorKit and StyledDocument, and provides " + "cover methods for interacting with those objects." }; String[] initStyles = { "regular", "italic", "bold", "small", "large", "regular", "regular", "regular", "bold"}; addStylesToDocument(doc); try { for (int i=0; i < initString.length; i++) { doc.insertString(doc.getLength(), initString[i], doc.getStyle(initStyles[i])); } System. err. println("Couldn't insert initial text into text pane."); } return textPane; } //Initialize some styles. Style regular = doc. addStyle("regular", def ); Style s = doc. addStyle("italic", regular ); s = doc.addStyle("bold", regular); s = doc.addStyle("small", regular); s = doc.addStyle("large", regular); s = doc.addStyle("bold" , regular); } public static void main (String ... agrea ) { jFrame. setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE); jFrame.add(new TestForo()); jFrame.pack(); jFrame.setLocationRelativeTo(null); jFrame.setVisible(true); }).start(); } }
|
|
|
834
|
Programación / Java / Re: listas enlazada
|
en: 15 Septiembre 2018, 21:29 pm
|
Google, y colabora con parte de tu código XD para ayudarte ... según la formula desviación estándar ver linea 118 a 132 dos maneras de tantas package foro; import javax.swing.*; import javax.swing.border.TitledBorder; import javax.swing.text.*; import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import java.util.LinkedList; import java.util.stream.IntStream; public class MediaDesviacionEstandar extends JFrame { private final LinkedList<Double> linkedList = new LinkedList<>(); private static final String TITLE = "Calcular Media y Desviación Estándar..."; public MediaDesviacionEstandar() { initFrame(); initBehaviour(); } private void initFrame() { scrollPane. setVerticalScrollBarPolicy(JScrollPane. VERTICAL_SCROLLBAR_ALWAYS); scrollPane. setPreferredSize(new Dimension(30, 10)); scrollPane. setMinimumSize(new Dimension(30, 10)); jPanel.setBorder(border); panelNort.add(jTextField); panelNort.add(buttonSum); panelNort.add(buttonProcesar); jPanel.add(scrollPane); jPanel. setPreferredSize(new Dimension(450, 250)); add(jPanel); setDefaultCloseOperation (JFrame. EXIT_ON_CLOSE); pack(); setLocationRelativeTo(null); setVisible(true); } private void initBehaviour() { buttonSum.addActionListener( e -> { jTextField.requestFocus(); try { linkedList. add(Double. valueOf(jTextField. getText(). replace(",", "."))); media(); jTextField.setText(""); JOptionPane. showMessageDialog(this, "valor incorrecto", "Error", 0); jTextField.requestFocus(); } }); buttonProcesar.addActionListener( e -> { jTextField.requestFocus(); if(linkedList.size() != 0) { procesar(); }else { JOptionPane. showMessageDialog(this, "lista vacia loco :X", "Error", 0); } }); } private void procesar() { final StringBuilder sb = new StringBuilder(); final StringBuilder elementos = new StringBuilder(); linkedList.forEach(p -> elementos.append(p + " \\ ")); sb.append("Números procesados: " + elementos +"\n") .append("La media es: " +media() + "\n") .append("Desviación estándar método 1: " + desviacionEstandar1()+"\n") .append("Desviación estándar método 2: " + desviacion2()+"\n") .append("___________________________________\n"); linkedList.clear(); createJTextPane(sb.toString()); } private void createJTextPane (final String text ) { // Se inserta // Atributos para la frase, en negrita final Style regular = doc. addStyle("regular", def ); try { jTextPane.getStyledDocument().insertString(jTextPane.getStyledDocument().getLength(), text, doc.getStyle("regular")); e.printStackTrace(); } } private double media() { return linkedList.stream() . mapToDouble(Double::doubleValue ) .average() } //con algo de java 8 private double desviacionEstandar1() { final double sum = IntStream.range(0 , linkedList.size()) // recorremos el array . mapToDouble(p -> Math. pow(linkedList. get(p ) - media () , 2)) // .sum(); return Math. sqrt(sum / linkedList. size()); } //java 7 private double desviacion2() { double sum = 0; for ( int f = 0; f < linkedList.size(); f++ ) sum += Math. pow ( linkedList. get(f ) - media () , 2 ); return Math. sqrt ( sum / ( double ) linkedList. size() ); } public static void main (String... blabla) { try { if(osType.contains("Win")) { UIManager. setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); }else if(osType.contains("Linux")) { UIManager. setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel"); } new MediaDesviacionEstandar(); }).start(); } }
|
|
|
836
|
Programación / Java / Re: [Consulta] Arquitectura MVC
|
en: 14 Septiembre 2018, 19:07 pm
|
claro que se puede, si tuvieras el código pues mas fácil en ayudarte, o parte del código que se pueda ejecutar. y viendo bien tu clase Login tiene muchos métodos set, en ese caso aplica patrón builder y sera mucho mas legible, mantenible etc...
Otra cosas no veo el listener del botón XD
|
|
|
837
|
Programación / Java / Re: Estructura repititiva while
|
en: 14 Septiembre 2018, 18:52 pm
|
Hola,
@TickTack el tipo de dudas que dices tener con java de desconocimiento, también podrían ser las mismas que podrías tener con C# u otro lenguaje, se hace extraño que tu mismo no notes(Eso me parece), el problema no es el lenguaje sino, tu cuando te sientas en el teclado, cuando "NOS" sentamos frente a un teclado, me apunto también ahí, para que veas que no solamente eres tu quien le pasa, porque yo no soy experto en java, quisiera yo.
He igual con cualquier lenguaje debes tener disciplina mental para aprender, y ensayar muchas veces, esas cosas de que no sabias esto o lo otro o que C# etc, esas excusas no están nada bien para alguien que esta dando cursos, pareciera que deberías tomar mas practica para dar cursos.
Ya @Eleкtro y @NEBIRE te han escrito muchas cosas importantisimas, que no a cualquiera se le enseña, así que aprovéchalo, yo espero que les estés agradecido al menos
Otra cosa que también note para que veas que no somos tontos aquí, vi que copiaste el código que te puse, que apenas estaba con el constructor agregado, o sea, casi ni con cambios y pegaste o algo así como si nada, sin ver bien que estabas haciendo eso no es una buena practica en lo absoluto super BIZARRO Y a la misma vez pues, si ya el programa te corre, pues bien, de paso al menossss ya tenias código hecho y bien por esa, que esa es la idea, que tengas código al menos y no que te hagan la tarea.
|
|
|
838
|
Programación / Java / Re: Estructura repititiva while
|
en: 7 Septiembre 2018, 15:31 pm
|
Hola rub'n,
Por qué es esto lo mas impresionante de todo?
Qué es el metodo entry point? Soy nuevo en Java. Recién Lo estoy aprendiendo.
Gracias y saludos
En serio estas dando cursos de C# :s , algo esta pasando que no sabes lo básico, tenemos que aprender primero bien las cosas para luego enseñar.
El es el método main principal, entrypoint por lo tanto la JVM es lo primero que llamara o invocara Si te fijas en el código anterior pues si corre, el contructor esta fuera del método main, no dentro como lo colocaste tu. algo muy pero muy Básico
|
|
|
839
|
Programación / Java / Re: Estructura repititiva while
|
en: 6 Septiembre 2018, 15:47 pm
|
Hola Elektro, Al link que posteaste lo entendi que tengo que escribir Float en mayusculas. Al primer float lo puedo escribir en mayusculas. Pero al segundo no porque me larga el siguiente error: Tipo desajuste: No se puede convertir de int a Float. Gracias y saludos Hola rub'n, De alguna manera no puedo correr tu programa. Es por eso que tuve que modificar el codigo para que tuviera la posibilidad de correrlo. Porque cuando le daba en el boton para correr me corria otro proyecto. import java.util.Locale; import java.util.Scanner;
public class TestForo { public static void main(String[] ar) { private static final Scanner TECLADO = new Scanner(System.in); public TestForo() { int cantidad; TECLADO.useLocale(Locale.US); // Habilita la lectura del . System.out.print("Escriba la cantidad de alturas a ingresar: "); cantidad = TECLADO.nextInt(); int x = 1; float altura, promedio; float alturas = 0; while (x <= cantidad) { System.out.print("Altura: "); altura = TECLADO.nextFloat(); // alturas = alturas + altura; x++; //añadiendo contador con postIncremento } promedio = alturas / cantidad; System.out.print("La cantidad promedio de alturas de personas es: " + promedio); } } }
Y me larga los errores que se pueden ver en la imagen: Gracias y saludos Pues desde luego que te dará error hasta el final de los tiempos, sera que puedes mirar el código de nuevo ? lo mas impresionante de todo es esto tienes el contructor dentro del método entry point mas popular que existe main
|
|
|
840
|
Programación / Java / Re: Estructura repititiva while
|
en: 3 Septiembre 2018, 03:12 am
|
Hola, muestra el codigo que tienes actual y con geshi por favor, con esta linea expuesta por NEBIRE deberia aceptar el punto
public class TestForo { private static final Scanner TECLADO = new Scanner (System. in); public TestForo() { int cantidad; TECLADO. useLocale(Locale. US); // Habilita la lectura del . System. out. print("Escriba la cantidad de alturas a ingresar: "); cantidad = TECLADO.nextInt(); int x = 1; float altura, promedio; float alturas = 0; while (x <= cantidad) { altura = TECLADO.nextFloat(); // alturas = alturas + altura; x++; //añadiendo contador con postIncremento } promedio = alturas / cantidad; System. out. print("La cantidad promedio de alturas de personas es: " + promedio ); } public static void main (String ... blablablg) { new TestForo(); } }
Outpud: Escriba la cantidad de alturas a ingresar: 3 Altura: 2.32 Altura: 1.80 Altura: 1.75 La cantidad promedio de alturas de personas es: 1.9566666 Process finished with exit code 0
|
|
|
|
|
|
|