Un ejercicio banal para este viernes
Por si están aburridos el día de hoy intenten ( más bien hagan ) el siguiente programa en swing.
import java.util.TimerTask;
import static java.lang.System.out;
class TimeTime {
public static void main( String ... args ) {
int a = Integer.parseInt( args[0] );
int b = Integer.parseInt( args[1] );
final Timer timer = new Timer();
timer.scheduleAtFixedRate( new PrintBeat( ". " ) , 0, 1000 );
timer.scheduleAtFixedRate( new PrintBeat( String.format("%c", 7 ) ) , b*1000, ( a + b ) * 1000 );
timer.scheduleAtFixedRate( new PrintBeat( String.format("%c%n", 7 ) ) , b*2000, ( a + b ) * 1000 );
timer.schedule( new TimerTask() {
public void run() {
timer.cancel();
out.println("FIN");
}
}, 4*60*1000);
}
}
class PrintBeat extends TimerTask {
private final String beat;
PrintBeat( String beat ) {
this.beat = beat;
}
public void run() {
out.print( beat );
}
}
Donde está la dificultad ( además de que sea en swing :P )?
1) No debe de ser una traducción "literal" es decir, no hay que poner mucha atención al código sino en lo que hace ( sus efectos pues ).
2) Una vez entendido lo que debe de hacer, hacerlo mucho más bonito.
:)
- Inicie sesión o regístrese para enviar comentarios
está bien?
Seguro que no hay por ahí algún bug? No entendí muy bien... si le paso parms 1 1, primero imprime 3 puntos y luego puras lineas de a 2 puntos.
Si le paso 5 1, primero 3 puntos y luego puras lineas de 6 puntos.
Con 1 2 primero 5 puntos y luego lineas de 3 puntos.
Si en vez de "a" y "b" tuvieran un nombre descriptivo...
a ver...
imprime un punto cada segundo. Aparte, da un campanazo a los B segundos y repite cada A+B segundos. Y aparte, otro campanazo y cambio de linea a los B*2 segundos y repetirlo cada A+B segundos...
Groovy SwingBuilder
Usando el SwingBuilder de Groovy está muy fácil. Tanto, que hasta hice el código para que pueda seguir funcionando en texto y aparte en Swing.
El PrintBeat acepta un closure para imprimir (que vamos a usar también con otros propósitos):
private final String beat
private final def out
PrintBeat( String beat, printer ) {
this.beat = beat
out = printer
}
public void run() {
out(beat)
}
}
y hay una función (bueno un closure realmente, porque todo lo puse en un vil script), que echa a andar el timer con los parámetros que le indiques (aquí uso tres closures distintos):
t.scheduleAtFixedRate( new PrintBeat(". ", out) , 0, 1000 );
t.scheduleAtFixedRate( new PrintBeat( 'x', bell) , b*1000, ( a + b ) * 1000 )
t.scheduleAtFixedRate( new PrintBeat( 'x', bellAndNewline) , b*2000, ( a + b ) * 1000 )
t.schedule( {
t.cancel()
out("FIN")
} as TimerTask, 4*60*1000)
}
Para que siga corriendo exactamente igual que tu programa original, nomás hay que correr esto:
int b = args[1] as int
final Timer timer = new Timer()
setup(timer, a, b, { print it }, { print String.format('%c', 7 ) }, { println String.format('%c', 7 ) })
Ahora... para que todo esto jale en Swing:
new SwingBuilder().edt {
frame(title:'Banalidades', size:[400,400], show:true) {
def stimer //aquí tendremos un timer
def out //aquí tendremos área de texto
vbox {
hbox {
label('P1:')
tf1 = textField('1')
label('P2:')
tf2 = textField('1') //estos son los campos con los parámetros
button(text:'Iniciar', actionPerformed:{ //Acción invocada al oprimir este botón
stimer?.cancel() //cancelar timer anterior
stimer = new Timer() //crear uno nuevo
out.text='' //borrar texto
setup(stimer, tf1.text as int, tf2.text as int,
{ out.append(it) }, //closure para imprimir, agrega texto al área
{ Toolkit.defaultToolkit.beep() }, //closure para campanazo
{ Toolkit.defaultToolkit.beep(); out.append('\n') }) //closure para campanazo y newline
})
}
out = textArea(rows:40, columns:40, editable:false)
}
}
}
Digamos que el código es lo
Digamos que el código es lo de menos. Lo que hay que hacer "en swing" es lo que hace el programa.
mmhhh Si tiene un ligerísimo bug, pero como lo hice hoy en la mañana ya no me dí tiempo de corregirlo ( pensé que lo iba a a hacer en 10 mins y cuando ya llevaba 15 dije, ahi muere ).
Digamos que si le pasas 15 - 5 debería de ser
.... Beep
............... Beep
.... Beep
Pero la verdad es que no me quedó así :P
De nuevo, el código es lo de menos.
alguien me explica los ARGS
la funcion void main acepta un parametro de arreglo 'String args[]'
pero no se para que se usan o como se usan,
tiene que ver al momento de correr el programa que escriban el parametro.
por ejemplo en la linea de comando
../../programa.java argumento
asi se pasan los argumentos?
o estoy en un error?
Exactamente son para eso. A
Exactamente son para eso.
A un programa en Java ( y básicamente a cualquier programa de computadora ) se le pueden pasar argumentos en su invocacion. La lista de argumentos, esta en el método main definida así:
…
}
Y en efecto, al ejecutarlo quedará así:
a será 15
y b será 5 como lo estabas pensando.
PHB-itis?
Te pusieron de jefe o algo así Oscar? Te estás convirtiendo en un PHB? O es nomás porque es viernes? Primero pones un programa, no dices qué debe hacer, solamente pones el código, y luego dices Digamos que el código es lo de menos, sólo hacer lo que el programa hace... y luego admites que el código que pusiste no hace lo que querías que hiciera.
Nomás te faltó pedirlo en 3 líneas de código y para ayer...
Jajajajaj Asume en todas mis
Asume en todas mis comunicaciones que antecedo un "Por favor" y que termino con un "gracias".
:-S Que terrible proyección la mía, no me había dado cuenta :D , pero tienes razón :-O Me estoy convirtiendo en USUAAARIOOOOO naaaaahhhhhhhh.
Lo que tu no sabes es que con una macro de excel ya me funciona :-S :-S
El origen del programa es bastante obscuro y tiene que ver ... mmmhhh naaah mejor mañana.
Por cierto ¿Cuanto te falta para terminarlo? jajajajajaja
</sarcasm>
ya está
Ahi esta madre ya jalando, no hubiera posteado código teórico en un caso así. Pero mi comentario anterior no es por la falta de modales o lo que sea (mta falta que yo me ponga nena con algo así pfffff) sino por las contradicciones de "aquí está un programa, no les voy a decir qué hace, por lo tanto es obvio que tienen que ver el código para saber qué hace, pero no se fijen en el código, es lo de menos; es lo único que hay, pero es lo de menos" WTF?
*agrega esta conversación
*agrega esta conversación para analizarla despues con sus asesores *
XD
Jejej, lo bueno de concentrar distintos tipos de enfoques de solución es justamente, resolver problemas de nuevas y mejores maneras.
La parte no tan buena es que, dado que las palabras escritas no logran aun transmitir todo el mensaje, se escapan ciertos indicadores, cuya ausencia hacen que la retroalimentación del mensaje sea menor a la que sería de forma personal.
:)
Por otro lado, el por favor y gracias, creo nunca sobran..... nunca mejor dicho: el protocolo así lo marca.
Saludos a ambos.!!!
---
Razón de ser del programa.
jejejej ... no, para nada, jamás creí que te estuveras poniendo nena, y eso de "por favor y gracias" es broma y no es contra-nenés de mi parte eh, sino por aquello del PHB.
Así de: "Mandame tus reportes!" ( cuando debería de ser "Por favor mandame tus reportes. Gracias" )
O "Levanta el servidor" etc. ( Por favor levanta el servidor, gracias )
jajaa
Si de hecho esta muy ambigua la explicación, me salió sin querer un "misteeeerio del vieeeernes"...
Acá abajo está toda la explicación ( tan banal como el programa ), hay que seleccionar con el mouse para ver el texto.
Al leer cual es el objetivo del programa pierde todo el chiste, pero la idea es: "analizar el comportamiento y hacer el mismo comportamiento, en Swing o en una aplicción de escritorio"
El chiste esta todo en no ver el código, sino en ver el comportamiento y luego hacer una aplicacion Swing de ella.
Ah, sí.... *abre su IDE para
Ah, sí.... *abre su IDE para hacer el ejecicio* :P
Tabata workout
De pura casualidad no estás haciendo la rutina llamada Tabata? los lapsos son de 20 segundos de repeticiones, 10 de descanso, 8 series.
Qué te crees que de hace rato vi tú código, y es muy parecido a algo que yo ando haciendo, sólo que en la mañana me traían en joda con ...C# :'-( ...
Bueno, el caso es que, igual complemento tú código con el mío para ver qué sale.
OffTopic. Si quieres un par de rolas de música para tu rutina, te las paso, son con los lapsos que te comento, e igual te paso algunos ejercicios que estaba haciendo.
Jejeje super... y .. .creo
Jejeje super... y .. .creo que si dicen de que se trata pierde el chiste la sobra que le puse ahí.
A cual código te refieres? Al que acabo de poner? Ahh pues comparte si, lo vemos.
Listo pues me despido
Chau!
Alarma ruidosa
Si que hace ruido esa alarma (o cronometro). En serio no lo intenten ejecutar con los audifonos puestos (con volumen al 100%) por favor , casi salgo volando de mi asiento (es en serio no es broma)
Algo asi puse, no recuerdo bien
El programa no dejaba de correr (no se detuvo el ciclo tuve que reiniciar mi máquina) y eso si el ruido que hacia.
jaja Debiste poner una advertencia, estuvo bueno ( = para una broma ).
Ooops... quizá parecerá
Ooops... quizá parecerá petulante, pero es que en Mac nomás se oyen unos tamborcitos apagados: "tup, tup, tup" :P
Lo siento :P