HOLA!Hemos vuelto!!si, si, temblaaaaaaaaaaaaaaad!El viernes 29 de febrero nos presentamos a la segunda práctica de oca, más puntuales que en la primera, por cierto, llegamos a clase esperando a ver que nos deparará el futuro…El profesor, Alberto, comenzó la clase explicando detalles de la primera práctica que muchos compañeros no entendían (no son palabras textuales, sólo tomamos anotaciones de lo que el profesor dice en clase, así que puede haber algún tipo de error en algún momento, por favor, pensad que somos humanos. De cualquier forma evitaremos cometer alguno; GRACIAS! XD), entonces, explicó que las excepciones, las cuales no quedaron a la mayoría de la clase muy claras, sirven para corregir errores, y hay que detectarlas mirando si el programa hace lo que queremos o no. Y no confundir con las acepciones, las cuales son predicados que se resuelven con verdadero o falso, si no es cierto que deje de hacer lo que haga.Hay que pensar siempre que un programa no se hace para el ordenador, sino para la persona que lea nuestro código en el futuro, por ello siempre hay que dejarlo todo muy claro y evitar excepciones.Acto seguido nos puso un ejemplo, que resolvimos entre todos, el cual era una crear una tabla, y se nos piden dos métodos: anchoColumna(nColumna) y esPar(fila). Así que todos empezamos a pensar. El anchoColumna medía el ancho de las columnas, y esPar decía si el número de filas era par o no. Alberto nos comentó que lo mejor es saber primero que devuelve el método, ya que la “chicha” se encuentra en rellenar su código. Una verdad como un templo. En el primero, por deducción, podía ser un entero y en el segundo, devolver un boolean. Así empezamos a rellenar el código.Después un compañero dijo que para el anchoColumna también sería necesario saber el ancho de la página, y el chaval tenía razón, no puedes hacer una tabla más grande que la hoja. Entonces el profesor añadió un nuevo parámetro al método: anchoPagina.anchoColumna quedó en la pizarra como:
| anchoColumna(nColumna,anchoPagina){ return(anchoPagina/nColumna);} |
Solución a la que mi compañero y yo no le vimos mucho sentido, pero bueno, ahí se quedo.Continuamos con el esPar:
| esPar(fila){ if (fila%2==0) return true; else return false;} |
Después miramos que tipo de problemas podía dar el código. En el primero si dabamos como valores a nColumna=20 ,anchoPagina=10, el método devolvería el valor ½, pero ¿y si nColumna=0 ,anchoPagina=5?, en tal caso la hemos pifiado porque nos saldría infinito y el programilla se vuelve loco. SALE UNA EXCEPCIÓN!! Con lo cual habría que hacer algo en el código para evitar que nColumna=0.Para ver mejor todo Alberto aconsejó que imprimiéramos por pantalla el nColumnas y el anchoPagina para ver si alguno es 0 y ver si por los valores introducidos vienen o no los problemas.Analizamos ahora el esPar. Si la fila=5 devolvería false, si fila=4 devolvería true, hasta aquí bien pero ¿qué pasa si metemos números negativos? Si fila=-3, devuelve false; pero si fila=-4 ¡¡DEVOLVERÍA TRUE!! Porque -4 es un número par al fin y al cabo. Debemos controlar este error poniendo en el código como condición que fila>0. Después Alberto puntualizó que en el anchoColumna no se debería retornar ningún valor, porque ninguno es válido, no habría que salir con un return. Para salir de un método al que no queremos retornar nada, colocamos un System.exit(), no es lo adecuado pero sirve. La manera que no es adecuada para salir del programa es que salten excepciones. No olvidar nunca que una excepción es un objeto y un mensaje en el que se transmite los errores. Si salta una excepción, hay que volver al que estaba manejando donde se produce el error, no al return.Como ejemplo de esta explicación volvió al anchoColumna. El programa tiene que decir cuando introduzcas el nColumna=0, que ese valor no vale y se introduzca otro. Entonces se vuelve a hacer el método pero con el nuevo valor. Lo mejor es controlar las excepciones mejor que retornar valores. Por eso es muy importante capturar las excepciones, además la mayoría de los métodos del API lanzan excepciones y hay que controlarlos. Tras finalizar esta explicación tan constructiva nos pusimos manos a la obra.
En el EJERCICIO 1 pedían crear un directorio temporal en el que fuésemos a realizar las prácticas. Por ejemplo: C:>mkdir C:\TEMP\TSIOCA. Nosotros pusimos el comando tal cual y dentro de la carpeta TEMP, se nos creó otra carpeta llamada TSIOCA. A continuación añadimos el path de este directorio temporal creado en la variable CLASSPATH utilizando la siguiente línea de comando: C:\set CLASSPATH=C:\TEMP\TSIOCA;%CLASSPATH%. Comprobamos que podíamos utilizar los ejecutables java y javac desde esta ventana, ya que la anterior línea de comandos aplica el classpath sobre esa carpeta. Esto no tiene nada que ver con el API, el cual estuvimos mirando y es ya muy conocido para nosotros.
Encontramos la clase Math sin ningún tipo de problema. Preguntaban qué métodos de la clase Math necesitas utilizar si se quiere realizar un programa que realice el cálculo de una ecuación de segundo grado. Aunque no lo pedían, nosotros muy “apañaos”, hicimos un programa que resolviese ecuaciones de segundo grado de la forma Ax2+Bx+C=0 (nota: resuelve todas menos los complejos):
| ÏÏÏimport java.io.*; ÏÕÖ×public class EcSegGrado Ïϧ{ ÏϧÏÞßàpublic static void main(String []args) ÏϧÏϧ{ ÏϧÏϨ¹íÏBufferedReader br; ÏϧÏϨ¹¹´try ÏϧÏϧÏϧ{ ÏϧÏϧÏϨ¹¹Ïbr=new BufferedReader(new InputStreamReader(System.in)); ÏϧÏϧÏϨ¹íÏString ln; ÏϧÏϧÏϨ¹íÏint a,b,c; ÏϧÏϧÏϨ¹¹ÏSystem.out.println(“Introducir a”); ÏϧÏϧÏϨ¹¹Ïln=br.readLine(); ÏϧÏϧÏϨ¹¹Ïa=Integer.parseInt(ln); ÏϧÏϧÏϨ¹¹ÏSystem.out.println(“Introducir b”); ÏϧÏϧÏϨ¹¹Ïln=br.readLine(); ÏϧÏϧÏϨ¹¹Ïb=Integer.parseInt(ln); ÏϧÏϧÏϨ¹¹ÏSystem.out.println(“Introducir c”); ÏϧÏϧÏϨ¹¹Ïln=br.readLine(); ÏϧÏϧÏϨ¹¹Ïc=Integer.parseInt(ln); ÏϧÏϧÏϨ¹³´if(a==0) ÏϧÏϧÏϧÏ6¾¹³¹if(b==0) System.out.println(“Sin solución.”); ÏϧÏϧÏϧÏ6ÏÏö¹else System.out.println(-c/b); ÏϧÏϧÏϧÏö´else ÏϧÏϧÏϧϸ§{ ÏϧÏϧÏϧϸ¨¹íÏint rad=(b*b)-(4*a*c); ÏϧÏϧÏϧϸ¾¹³¹if(rad<0) System.out.println(“Complejos.”); ÏϧÏϧÏϧϸÏÏö´else ÏϧÏϧÏϧϸÏϸ§{ ÏϧÏϧÏϧϸÏϸ¨¹íÏdouble x1=(-b+Math.sqrt(rad))/(2*a); ÏϧÏϧÏϧϸÏϸ¨¹íÏdouble x2=(-b-Math.sqrt(rad))/(2*a); ÏϧÏϧÏϧϸÏϸ¾¹¹ÏSystem.out.println(“x1= “+x1+” x2= “+x2); ÏϧÏϧÏϧϸÏÏÈÏ} ÏϧÏϧÏϧÏÈÏ} ÏϧÏϧÏϧ} ÏϧÏϧÏϧÏðîìcatch(IOException e) ÏϧÏϧÏϧÏϧ{ ÏϧÏϧÏϧÏϨ¹¹ÏSystem.out.print(“error”+e); ÏϧÏϧÏÏ©ÏÏ©} ÏϧÏϧ ÏϧÏÏ©} ÏÏ©} |
Este programa, el cual hemos probado, funciona bien.
En definitiva, que tan solo hemos usado el método sqrt() de la clase Math, que sirve para realizar la raíz cuadrada. En el API queda mejor definido de la siguiente manera:
| sqrtpublic static double sqrt(double a)
Returns the correctly rounded positive square root of a double value. Special cases:
Otherwise, the result is the double value closest to the true mathematical square root of the argument value. Parameters: a – a value. Returns: the positive square root of a. If the argument is NaN or less than zero, the result is NaN. |
Lo siguiente por lo que nos preguntan es si existe algún método que permita generar valores aleatorios y que escribamos un pequeño programa que imprima en pantalla un valor aleatorio.
Nosotros sabemos de otras experiencias “programables” que el método random() de la clase Math devuelve números aleatorios entre el 0.0 y 1.0, descrito en el API así:
| randompublic static double random()Returns a double value with a positive sign, greater than or equal to 0.0 and less than 1.0. Returned values are chosen pseudorandomly with (approximately) uniform distribution from that range. When this method is first called, it creates a single new pseudorandom-number generator, exactly as if by the expression new java.util.RandomThis new pseudorandom-number generator is used thereafter for all calls to this method and is used nowhere else. This method is properly synchronized to allow correct use by more than one thread. However, if many threads need to generate pseudorandom numbers at a great rate, it may reduce contention for each thread to have its own pseudorandom-number generator. Returns: a pseudorandom double greater than or equal to 0.0 and less than 1.0.
See Also: |
Una pequeña muestra de lo que hace este método se puede ver en este sencillísimo programilla, porque no se le puede ni llamar programa, que hemos hecho:
| ÏÕÖ×public class Aleatorio Ïϧ{ ÏϧÏÞßàpublic static void main(String []args) ÏϧÏϧ{ ÏϧÏϨ¹íÏdouble x=Math.random(); ÏϧÏϨ¹íÏdouble y=x*10; ÏϧÏϨ¹íÏdouble z=y+3; ÏϧÏϨ¹¹ÏSystem.out.println(“Un número aleatorio es: “+x); ÏϧÏϨ¹¹ÏSystem.out.println(“El número aleatorio multiplicado por 10 es: “+y); ÏϧÏϨ¹¹ÏSystem.out.println(“El número aleatorio multiplicado por 10 y sumándole 3 es: “+z); ÏϧÏÏ©} ÏÏ©} |
Apareciéndonos por pantalla el siguiente número aleatorio:

Pues bien, seguimos con el EJERCICIO 2, como siempre, tras leer, miramos el código para ver si lo entendíamos y, si es muy sencillo, pero se nos pasó algo por alto.
if (x<0) { System.out.println(“Error: valor negativo de x”); System.exit(1);}
De la anterior práctica sabíamos que exit() salía del programa, hasta que caímos ¿por qué a veces es exit(0) y otras exitr(1)? Alberto lo explicó para toda la clase ya que no fuimos los únicos a los que nos pasó tal desliz. Exit() es un método para que el programa termine exitosamente o con un fallo, lo cual se indica pasándole como parámetro un 0 ó un 1 respectivamente. Ésto es uno de esos convenios no escritos pero que todo el mundo sabe, como lo de no ligarse a la novia de tu mejor amigo. En el API esta convención no viene explicada. En los sistemas operativos como Windows se sigue ésta, mientras que en Linux, por ejemplo, es distinta.
En el API el método exit() viene definido:
| exitpublic static void exit(int status)Terminates the currently running Java Virtual Machine. The argument serves as a status code; by convention, a nonzero status code indicates abnormal termination. This method calls the exit method in class Runtime. This method never returns normally. The call System.exit(n) is effectively equivalent to the call: Runtime.getRuntime().exit(n) Parameters: status – exit status. Throws: SecurityException – if a security manager exists and its checkExit method doesn’t allow exit with the specified status. See Also: Runtime.exit(int) |
Nos dijo que era importante que entendiésemos el funcionamiento de exit() y System.err ya que iban a aparecer mucho.
A continuación nos piden compilar el código de ErrorDivision y ejecutarlo.
| ÏÕÖ×public class ErrorDivision { ÏϧÏÞßàpublic static void main(String[] args) { ÏϧÏϨ¹íÏboolean continuar=true; ÏϧÏϨ¹íÏint a=3; ÏϧÏϨ¹íÏint b=3; ÏϧÏϨ¹íÏint c=4; ÏϧÏϨ¹íÏint d=0; ÏϧÏϨ¹¹ÏSystem.err.println(“Empezando la depuración”); ÏϧÏϨ¹¹Ïa+=b; ÏϧÏϨ¹¹ÏSystem.err.println(“Vamos a ver si el programa divide bien”); ÏϧÏϨ¹¹Ïb+=c/d; ÏϧÏϨ¹¹ÏSystem.err.println(“El programa funciona bien”); ÏϧÏÏ©} ÏÏ©} |
Nos preguntan: ¿Ha compilado correctamente?
Si, compila correctamente, pero en principio lo hicimos mal porque pusimos javac ErrorDivision.java ¡¡SIN TILDE!! Como unos verdaderos paletos, hasta que nos dimos cuenta de nuestro error y al poner la maravillosa tilde, todo compiló y funcionó.
Después lo ejecutamos, pero nos saltó un error.

Y es lógico si tenemos en cuenta que al dividir por cero cualquier número el resultado es infinito. Pero ¿en qué parte del código ha finalizado?, pues finaliza en la línea en la que se produce el error, es decir, en la operación b+=c/d.
Buscamos información sobre la excepción que se ha producido en el API.
| java.lang Class ArithmeticExceptionjava.lang.Object java.lang.Throwable java.lang.Exception java.lang.RuntimeException java.lang.ArithmeticException All Implemented Interfaces: Serializable public class ArithmeticException extends RuntimeExceptionThrown when an exceptional arithmetic condition has occurred. For example, an integer “divide by zero” throws an instance of this class. Since: JDK1.0 See Also: Serialized Form |
Añadimos una aserción al código de forma que no se produjese de nuevo el error anteriormente descrito. Con tan solo cambiar el valor inicial de d a cualquier otro que no sea 0, no se producirá más el error, pero como nos piden una aserción, lo mejor sería poner if(d!=0):
| ÏÕÖ×public class ErrorDivisión2 { ÏϧÏÞßàpublic static void main(String[] args) { ÏϧÏϨ¹íÏboolean continuar=true; ÏϧÏϨ¹íÏint a=3; ÏϧÏϨ¹íÏint b=3; ÏϧÏϨ¹íÏint c=4; ÏϧÏϨ¹íÏint d=1; ÏϧÏϨ¹¹ÏSystem.err.println(“Empezando la depuración”); ÏϧÏϨ¹¹Ïa+=b; ÏϧÏϨ¹¹ÏSystem.err.println(“Vamos a ver si el programa divide bien”); ÏϧÏϨ¹³´if(d!=0) ÏϧÏϧ϶¾¹¹Ïb+=c/d; ÏϧÏϨ¹¹ÏSystem.err.println(“El programa funciona bien”); ÏϧÏÏ©} ÏÏ©} |
Probamos compilándolo que de la manera que pensamos no saltase ni la excepción anterior ni ninguna más.

Continuamos creando una clase LogTrace que facilitase la inclusión y eliminación automática de aserciones y trazas de depuración para cualquier programa, disponiendo de los métodos: assertion(boolean condicion, String mensaje). Este método dependiendo de lo que fuese el parámetro de tipo boolean, presentaba una u otra cosa, en el caso de que sea un true presentaba el mensaje de que el programa ha ido correctamente, o de lo contrario, un mensaje indicando que ha ocurrido un error y finaliza la ejecución de la aplicación. El otro método a rellenar era log(String mensaje). Este método simplemente imprime por pantalla el String que se le pase como parámetro. Así quedó el código de nuestra clase LogTrace con los métodos, anteriores:
| ÕÖ×public class LogTrace Ïϧ{ ÏϧÏÞßàpublic static void main(String[] args) ÏϧÏϧ{ ÏϧÏϨ¹¹Ïlog(“programa incorrecto”); ÏϧÏϨ¹¹Ïlog(“programa correcto”); ÏϧÏϧ //assertion(false,”program kill”); ÏϧÏϨ¹¹Ïassertion(true,“todo ok”); ÏϧÏϧ ÏϧÏϧ ÏϧÏÏ©} Ïϧ ÏϧÏÞßàpublic static void assertion(boolean condicion, String mensaje) ÏϧÏϧ{ ÏϧÏϨ¹³´if(condicion==true) ÏϧÏϧÏ6§{ ÏϧÏϧÏ6¨¹¹ÏSystem.out.println(mensaje); ÏϧÏϧÏ6¾¹¹ÏSystem.exit(0); ÏϧÏϧÏ6Ï} ÏϧÏϧÏ6Ï ÏϧÏϧÏö´else ÏϧÏϧϸ§{ ÏϧÏϧϸ¨¹¹ÏSystem.out.println(mensaje); ÏϧÏϧϸ¾¹¹ÏSystem.exit(1); ÏϧÏϧÏÈÏ} ÏϧÏÏ©} Ïϧ Ïϧ ÏϧÏÞßàpublic static void log(String mensaje) ÏϧÏϧ{ ÏϧÏϨ¹¹ÏSystem.out.println(mensaje); ÏϧÏÏ©} ÏÏ©} |
Pues bien, acto seguido con la clase LogTrace añadimos aserciones a ErrorDivision. Tuvimos que pensar un poco como resolver esto, pero finalmente entre los dos lo sacamos. Los números que utilizamos en ErrorDivision2 son generados por el método random() de la clase Math. Tras compilarlo, ‘el poder’ de la ventana de comandos nos pedía un casting, ya que el método random() devuelve un double y nosotros pusimos a a,b,c y d del tipo int. Después nos comenzó a salir el mensaje “el número es cero” impreso. Al principio dijimos:”cachiiiiiiiiiiis, casualidad la nuestra, que nos sale el cero de un número aleatorio”, PERO NO, siempre salía el cero porque no hay que olvidar que random() devuelve un número aleatorio, si, pero entre 0.0 y 1.0. Por supuesto no íbamos a tener tanta suerte para que nos saliese el 1.0, la gran mayoría devolvería un 0. Por ello, multiplicamos por 10 cada término que lo requería. De esta forma podría salir cualquier número. De modo que el código quedó así:
|
ÏÕÖ×public class ErrorDivision2
|
Y al ejecutar y compilar esta vez todo fue perfecto J.

Cuando llegamos al EJERCICIO 3 Rodri y yo lo flipamos en colorines!! Nos quedamos en un bucle infinito repitiéndonos el uno al otro: “Mi no entender”.
Respecto a comprensión del código nos pareció un salto muy grande la sencillez de lo anterior con lo que se nos presentaba ante la pantalla.
Sobre todo, lo que más nos llamó la atención fue esa maldita línea que decía: len = in.read(buf). Decíamos: “vale, len es un entero que tiene como valor el leer en in…eh?¿qué pinta aquí un array?¿por qué va sin sus monos corchetes?¿leer un fichero mediante un array?¿en todo caso se leerá una línea de fichero?¿no habría que poner la posición del array con el buf? No entendemos esa línea.
Alberto estaba muy ocupado con otros compañeros a los que, como nosotros, la cabeza les daría vueltas por culpa de esa línea. Así que apareció otro profesor, al que, sinceramente, no entendimos mucho aunque el pobre lo intentó. Lo único que más o menos nos quedó claro es que in era un fichero de entrada y out otro de salida. Lo que estaba en in se guardaba en buf[], y de buf[] se copiaba a out, esto se hace así debido a que no se puede copiar de un fichero a otro directamente.
Quizá nadie estaba ya concentrado porque era la hora de acabar con la clase y todo el mundo tenía algo que hacer. Agradecemos tu esfuerzo, otro profesor del que no sabemos tu nombre.
Ejercicio 4
¿Qué excepción salta cuando accedemos a una posición no especificada en un array? Definid un array de 10 posiciones y tratad de acceder a la posición -1 y a la 10. ¿Se os ocurre alguna forma de controlar este problema?
Cuando hacemos referencia a una posición de un array y nos salimos de la dimension del array nos da la siguiente excepcion:
ArrayIndexOutOfBoundsException, esto quiere decir que el índice con el que accedemos a las distintas posiciones no puede acceder.
¿Qué sucede si hacemos uso de una referencia que está puesta a null? Prueba el siguiente código:
public class NullError {
public static void main(String[] args) {
String str=new String();
str=null;
str.length();
}
}
Cuando hacemos una referencia a null nos da siempre la exceptcion NullPointerException.
Controla todas las excepciones que se pueden producir en el siguiente código:
public class ExcepciónApp {
public static void main(String[] args) {
String str1="20";
String str2="0";
String respuesta;
int numerador, denominador, cociente;
try{
numerador=Integer.parseInt(str1);
denominador=Integer.parseInt(str2);
cociente=numerador/denominador;
respuesta=String.valueOf(cociente);
}catch(...){
}
System.out.println(respuesta);
}
}
Para controlar las excepciones tenemos que poner el siguiente codigo.
| ÏÕÖ×class ExcepciónApp Ïϧ{ ÏϧÏÞßàpublic static void main(String[] args) ÏϧÏϧ{ ÏϧÏϨ¹íÏString str1 = “20″; ÏϧÏϨ¹íÏString str2 = “0″; ÏϧÏϨ¹íÏString respuesta; ÏϧÏϨ¹íÏint numerador, denominador, cociente; ÏϧÏϨ¹¹´try ÏϧÏϧÏϧ{ ÏϧÏϧÏϨ¹¹Ïnumerador = Integer.parseInt(str1); ÏϧÏϧÏϨ¹¹Ïdenominador = Integer.parseInt(str2); ÏϧÏϧÏϨ¹¹Ïcociente = numerador / denominador; ÏϧÏϧÏϨ¹¹Ïrespuesta = String.valueOf(cociente); ÏϧÏϧÏϧ} ÏϧÏϧÏϧÏðîìcatch (IOException e) //por si se produce un error durante la ejecución ÏϧÏϧÏϧÏϧ{ ÏϧÏϧÏϧÏϨ¹¹ÏSystem.err(); ÏϧÏϧÏϧÏÏ©} ÏϧÏϧÏϧÏðîìcatch (NumberFormatException e) //por si hay el dato recogido no es un número ÏϧÏϧÏϧÏϧ{ ÏϧÏϧÏϧÏϨ¹¹ÏSystem.err(); ÏϧÏϧÏÏ©ÏÏ©} ÏϧÏϨ¹¹ÏSystem.out.println(respuesta); ÏϧÏÏ©} ÏÏ©} |
Ponemos el IOException por si hay algún error al ejecutar, y ponemos el NumberFormatException por si el dato que recogemos desde le teclado no es un numero.
Ejercicio 5
Nos piden que implementemos el juego del ahorcado, dándonos las siguientes condiciones.
“El juego de El ahorcado que queremos debe interactuar con el usuario únicamente por medio del teclado y la pantalla del ordenador en modo texto. Antes de comenzar el juego, se escogerá una palabra secreta obtenida de un fichero de texto cuya longitud en caracteres debe ser superior a 1, y se le indicarán al usuario el número de letras de que se compone dicha palabra. El usuario entonces podrá realizar preguntas sobre posibles subcadenas de la palabra secreta, cada una de las cuales le penalizará en una oportunidad de las 6 disponibles. En caso de que la consulta este contenida dentro de la palabra secreta, la aplicación debe mostrar la posición en que se encuentra. El máximo tamaño de una consulta que puede realizar el usuario debe ser igual a la longitud de la palabra secreta, con lo que debe indicársele al usuario cuando ha incumplido esta condición. Igualmente tampoco podrá realizar una consulta de una palabra vacía (“”). En caso de que el juego termine, debe indicarle el resultado al usuario y, tras solicitarle si desea volver a jugar, realizar otro juego en caso afirmativo. También mencionar que el número de oportunidades posibles es de 6 intentos.”
Como vamos un poco atrasados con los ejercicios simplemente vamos a colgar el código, si alguien tiene una duda que nos lo diga.
| ÏÏimport java.io.*;ÏÕÖ×public class DatosJugador Ïϧ{ ÏϧÏíÏprivate String nombre=“”; ÏϧÏíÏprivate String apellidos=“”; Ïϧ ÏϧÏÞßàpublic void ponNombre(String nombre) ÏϧÏϧ{ ÏϧÏϨ¹¹Ïthis.nombre=nombre; ÏϧÏÏ©} Ïϧ ÏϧÏÞßàpublic String getNombre() ÏϧÏϧ{ Ïϧ¹Ĺ¹Ïreturn nombre; ÏϧÏÏ©} Ïϧ ÏϧÏÞßàpublic String getApellido() ÏϧÏϧ{ Ïϧ¹Ĺ¹Ïreturn apellidos; ÏϧÏÏ©} ÏϧÏÞßàpublic void ponApellidos(String apellidos) ÏϧÏϧ{ ÏϧÏϨ¹¹Ïthis.apellidos=apellidos; ÏϧÏÏ©} Ïϧ ÏϧÏÞßàpublic void printEstado() ÏϧÏϧ{ ÏϧÏϨ¹¹ÏSystem.out.println(“\n\nTe llamas: “+nombre+” “+apellidos); ÏϧÏÏ©} Ïϧ Ïϧ // Lee una línea de texto introducida desde el teclado Ïϧ // Ïϧ // Entrada: No posee Ïϧ // Salida: Línea de texto leída ÏϧÏÞßàpublic String pedirEntrada(String mensaje) ÏϧÏϧ{ ÏϧÏϨ¹íÏBufferedReader in = new BufferedReader(new InputStreamReader(System.in)); ÏϧÏϨ¹íÏString entrada=null; ÏϧÏϧ ÏϧÏϨ¹¹´try ÏϧÏϧÏϧ{ ÏϧÏϧÏϧ// Con este bucle, nos aseguramos de que hemos recibido alguna entrada ÏϧÏϧÏϧ// a través del teclado ÏϧÏϧÏϨ¹¹±while ((entrada==null)||(!(entrada.length()>0))) { ÏϧÏϧÏϧÏÏ7¹¹ÏSystem.out.print(mensaje); ÏϧÏϧÏϧÏÏ5 ÏϧÏϧÏϧÏÏ5// Lee una línea de texto introducida por el teclado ÏϧÏϧÏϧÏÏ7¹¹Ïentrada=in.readLine(); ÏϧÏϧÏϧÏϰ} ÏϧÏϧÏϧ} ÏϧÏϧÏϧÏðîìcatch (java.io.IOException ioe) ÏϧÏϧÏϧÏϧ{ ÏϧÏϧÏϧÏϨ¹¹ÏSystem.err.println(“Error al leer entrada desde el teclado”); ÏϧÏϧÏϧÏϨ¹¹Ïentrada=null; ÏϧÏϧÏÏ©ÏÏ©} Ïϧ¹Ĺ¹Ïreturn(entrada); ÏϧÏÏ©} Ïϧ ÏÏ©} |
| Ïimport java.io.*;/** *La clase FicheroLectura, lee desde un fichero *o desde un array de String interno una serie de palabras *@author Alba & ROdrigo *@version 1.0 */ ÏÕÖ×public class FicheroLectura Ïϧ{ ÏϧÏíÏprivate File lectura; ÏϧÏíÏString direccion; ÏϧÏíÏprivate String[] palabras; Ïϧ Ïϧ Ïϧ/** Ïϧ*Direccion del fichero Ïϧ*@param String nueva Ïϧ*@see java.lang.String Ïϧ*/ ÏϧÏÞßàpublic FicheroLectura(String nueva) ÏϧÏϧ{ ÏϧÏϧ ÏϧÏϨ¹¹Ïdireccion=“C:/”+nueva+“.txt”; ÏϧÏϨ¹¹ÏLectura(); ÏϧÏÏ©} Ïϧ Ïϧ /** Ïϧ *Si creamos un objeto sin argumentos utilizamos una diccionario interno Ïϧ */ ÏϧÏÞßàpublic FicheroLectura() ÏϧÏϧ{ ÏϧÏϨ¹íÏString[] conjunto={“mariposa”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“laguna”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“reverberante”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“almohada”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“barroco”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“cascada”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“albores”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“girasol”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“nogal”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“salamandra”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“sombrío”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“claustro”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“anzuelo”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“carabina”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“franco”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“cariz”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“mandarina”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“serenidad”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“almohada”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“clarinete”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“sonrisa”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“fascinante”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“atardecer”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“letanía”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“caballería”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“andaluz”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“pergamino”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“alevosía”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“sugestivo”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“seductor”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“chocolate”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“tempestad”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“milagro”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“desnuda”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“sutil”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“cielo”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“caracolear”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“espacio”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“plural”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“boreal”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“placer”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“ilógico”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“desinhibidor”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“libido”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“obviamente”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“ende”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“naturalmente”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“constipado”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“postura”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“pulcro”, ÏϧÏϧÏÏÏÏÏÏÏÏÏ“sensatez”}; ÏϧÏϧ ÏϧÏϨ¹¹Ïpalabras=conjunto; ÏϧÏÏ©} Ïϧ Ïϧ Ïϧ/** Ïϧ*Con este método leemos el fichero Ïϧ*@exception IOException Ïϧ*@exception NullPointerException Ïϧ*/ Ïϧ ÏϧÏÞßàpublic void Lectura() ÏϧÏϧ{ ÏϧÏϧ ÏϧÏϨ¹¹ÏCreaFichero(); ÏϧÏϧ ÏϧÏϨ¹¹´try ÏϧÏϧÏϧ{ ÏϧÏϧÏϧ ÏϧÏϧÏϨ¹íÏint i=0; ÏϧÏϧÏϨ¹¹Ïpalabras=new String[50]; ÏϧÏϧÏϨ¹íÏBufferedReader lectura=new BufferedReader(new FileReader(direccion)); ÏϧÏϧÏϨ¹¹®do ÏϧÏϧÏϧÏÏ5{ ÏϧÏϧÏϧÏÏ7¹¹Ïpalabras[i]=lectura.readLine(); ÏϧÏϧÏϧÏÏ7¹¹Ïi++; ÏϧÏϧÏϧÏÏ5 ÏϧÏϧÏϧÏÏ5 ÏϧÏϧÏϧÏÏò}while(i<palabras.length-1); ÏϧÏϧÏϧ ÏϧÏϧÏϧ ÏϧÏϧÏϧ} ÏϧÏϧÏϧ ÏϧÏϧÏϧÏðîìcatch(IOException e) ÏϧÏϧÏϧÏϧ{ ÏϧÏϧÏϧÏϨ¹¹ÏSystem.out.println(“Error en el fichero”); ÏϧÏϧÏϧÏÏ©} ÏϧÏϧÏϧ ÏϧÏϧÏϧÏðîìcatch(NullPointerException e) ÏϧÏϧÏϧÏϧ{ ÏϧÏϧÏϧÏϨ¹¹ÏSystem.out.println(“Fichero vacio, no hay datos a leer”); ÏϧÏϧÏÏ©ÏÏ©} ÏϧÏϧ ÏϧÏÏ©} Ïϧ Ïϧ Ïϧ/** Ïϧ*Con este método verificamos que el fichero existe Ïϧ*en el caso de que no exista saldremos del programa Ïϧ*@see System.exit(); Ïϧ*/ Ïϧ ÏϧÏÞßàpublic void CreaFichero() ÏϧÏϧ{ ÏϧÏϨ¹¹Ïlectura=new File(direccion); ÏϧÏϨ¹³´if(lectura.exists()!=true) ÏϧÏϧÏ6§{ ÏϧÏϧÏ6¨¹¹ÏSystem.out.println(“\n—–El fichero no existe, no se puede ejecutar el juego—–”); ÏϧÏϧÏ6¾¹¹ÏSystem.exit(1); ÏϧÏϧÏ6Ï} ÏϧÏϧÏ6Ï ÏϧÏϧÏö´else ÏϧÏϧÏȾ¹¹ÏSystem.out.println(“Fichero listo”); ÏϧÏÏ©} Ïϧ Ïϧ/** Ïϧ*regresa el contenido del array String Ïϧ*@return String[] Ïϧ*/ ÏϧÏÞßàpublic String[] getPalabras() ÏϧÏϧ{ Ïϧ¹Ĺ¹Ïreturn palabras; ÏϧÏÏ©} Ïϧ ÏÏ©} |
| Ïimport java.io.*; /** *Recibe como parámetro un array de String, y hace operaciones con ella *@author Alba & Rodrigo *@version 1.0 */ ÏÕÖ×public class Extrae Ïϧ{ ÏϧÏíÏprivate String[] palabras; Ïϧ/** Ïϧ*Recibe como parámetro una array de String Ïϧ*@param String[] Ïϧ*/ ÏϧÏÞßàpublic Extrae(String[] palabras) ÏϧÏϧ{ ÏϧÏϨ¹¹Ïthis.palabras=palabras; ÏϧÏÏ©} Ïϧ Ïϧ Ïϧ /** Ïϧ *Devuelve un String con una palabra aleatoria Ïϧ *obtenida array de String que tiene la clase como atributo Ïϧ *@return String Ïϧ *@see Extrae#NumAleatorio() Ïϧ */ ÏϧÏÞßàpublic String PalabraAleatoria() ÏϧÏϧ{ Ïϧ¹Ĺ¹Ïreturn palabras[NumAleatorio()]; ÏϧÏÏ©} Ïϧ Ïϧ Ïϧ /** Ïϧ *Genera un número aleatorio que se encuentre dentro de las Ïϧ *dimensiones del array Ïϧ *@return int Ïϧ */ ÏϧÏÞßàpublic int NumAleatorio() ÏϧÏϧ{ ÏϧÏϨ¹íÏint ref=(int)(Math.random()*10); ÏϧÏϧ ÏϧÏϨ¹³´if(ref>=(palabras.length)) ÏϧÏϧÏ6§{ ÏϧÏϧÏ6¾¹¹Ïref=NumAleatorio(); ÏϧÏϧÏ6Ï ÏϧÏϧ϶Ï} ÏϧÏϧ Ïϧ¹Ĺ¹Ïreturn ref; ÏϧÏÏ©} Ïϧ Ïϧ Ïϧ /** Ïϧ *Recibe como parámetros un caracter y un String, Ïϧ *busca en cada posición del String el caracter Ïϧ *@param char Ïϧ *@param String Ïϧ *@return Integer[] Ïϧ */ ÏϧÏÞßàpublic Integer[] Busca(char caracter,String cadena) ÏϧÏϧ{ ÏϧÏϨ¹íÏInteger[] coincide=new Integer[cadena.length()]; ÏϧÏϧ ÏϧÏϨ¹¹±for(int i=0;i<cadena.length();i++) ÏϧÏϧÏÏ5{ ÏϧÏϧÏÏ7¹³´if(caracter==cadena.charAt(i)) ÏϧÏϧÏÏ5Ï6¾¹¹Ïcoincide[i]=i; ÏϧÏϧÏÏ5Ïö´else ÏϧÏϧÏÏ5ÏȾ¹¹Ïcoincide[i]=null; ÏϧÏϧÏÏ5 ÏϧÏϧÏϰ} ÏϧÏϧ Ïϧ¹Ĺ¹Ïreturn coincide; ÏϧÏÏ©} Ïϧ Ïϧ Ïϧ Ïϧ Ïϧ /** Ïϧ *Verifica si a una pregunta, la respuesta es afirmativa o negativa Ïϧ *@return boolean Ïϧ *@exception IOException Ïϧ *@exception StringIndexOutOfBoundsException Ïϧ */ ÏϧÏÞßàpublic boolean Continuar() ÏϧÏϧ{ ÏϧÏϨ¹íÏboolean ok=false,interna=false; ÏϧÏϨ¹íÏString son=null; ÏϧÏϨ¹íÏchar afir; ÏϧÏϨ¹íÏBufferedReader datos=new BufferedReader(new InputStreamReader(System.in)); ÏϧÏϧ ÏϧÏϨ¹¹®do ÏϧÏϧÏÏ5{ ÏϧÏϧÏÏ7¹¹´try ÏϧÏϧÏÏ5Ïϧ{ ÏϧÏϧÏÏ5ÏϨ¹¹Ïson=datos.readLine(); ÏϧÏϧÏÏ5ÏϨ¹¹Ïson=son.toUpperCase(); ÏϧÏϧÏÏ5Ïϧ ÏϧÏϧÏÏ5ÏϨ¹³´if(son.length()>=2) ÏϧÏϧÏÏ5ÏϧÏ6§{ ÏϧÏϧÏÏ5ÏϧÏ6¨¹¹Ïinterna =false; ÏϧÏϧÏÏ5ÏϧÏ6¾¹¹ÏSystem.out.print(“\nIntroduzca S o N :”); ÏϧÏϧÏÏ5ÏϧÏ6Ï} ÏϧÏϧÏÏ5ÏϧÏö´else ÏϧÏϧÏÏ5Ïϧϸ§{ ÏϧÏϧÏÏ5Ïϧϸ¨¹¹Ïafir=son.charAt(0); ÏϧÏϧÏÏ5Ïϧϸ§ ÏϧÏϧÏÏ5Ïϧϸ¾¹³´if((afir==‘S’)||(afir==‘N’)) ÏϧÏϧÏÏ5ÏϧϸÏÏ6§{ ÏϧÏϧÏÏ5ÏϧϸÏÏ6¾¹³´if(afir==‘S’) ÏϧÏϧÏÏ5ÏϧϸÏÏ6ÏÏ6§{ ÏϧÏϧÏÏ5ÏϧϸÏÏ6ÏÏ6¨¹¹Ïok=true; ÏϧÏϧÏÏ5ÏϧϸÏÏ6ÏÏ6¾¹¹Ïinterna=true; ÏϧÏϧÏÏ5ÏϧϸÏÏ6ÏÏ6Ï} ÏϧÏϧÏÏ5ÏϧϸÏÏ6ÏÏö´else ÏϧÏϧÏÏ5ÏϧϸÏÏ6Ïϸ§{ ÏϧÏϧÏÏ5ÏϧϸÏÏ6Ïϸ¨¹¹Ïok=false; ÏϧÏϧÏÏ5ÏϧϸÏÏ6Ïϸ¾¹¹Ïinterna=true; ÏϧÏϧÏÏ5ÏϧϸÏÏ6ÏÏÈÏ} ÏϧÏϧÏÏ5ÏϧϸÏÏ6Ï ÏϧÏϧÏÏ5ÏϧϸÏÏ6Ï} ÏϧÏϧÏÏ5ÏϧϸÏÏ6Ï ÏϧÏϧÏÏ5ÏϧϸÏÏö´else ÏϧÏϧÏÏ5ÏϧϸÏϸ§{ ÏϧÏϧÏÏ5ÏϧϸÏϸ¨¹¹ÏSystem.out.print(“\nIntroduzca S o N :”); ÏϧÏϧÏÏ5ÏϧϸÏϸ¾¹¹Ïinterna=false; ÏϧÏϧÏÏ5ÏϧϸÏÏÈÏ} ÏϧÏϧÏÏ5ÏÏ§Ï¸Ï ÏϧÏϧÏÏ5ÏÏ§Ï¸Ï ÏϧÏϧÏÏ5ÏϧÏÈÏ} ÏϧÏϧÏÏ5Ïϧ ÏϧÏϧÏÏ5Ïϧ ÏϧÏϧÏÏ5Ïϧ} ÏϧÏϧÏÏ5Ïϧ ÏϧÏϧÏÏ5ÏϧÏðîìcatch(IOException e) ÏϧÏϧÏÏ5ÏϧÏϧ{ ÏϧÏϧÏÏ5ÏϧÏϨ¹¹ÏSystem.out.print(“Error presione S o N: “); ÏϧÏϧÏÏ5ÏϧÏϨ¹¹Ïinterna=false; ÏϧÏϧÏÏ5ÏϧÏÏ©} ÏϧÏϧÏÏ5Ïϧ ÏϧÏϧÏÏ5ÏϧÏðîìcatch(StringIndexOutOfBoundsException e) ÏϧÏϧÏÏ5ÏϧÏϧ{ ÏϧÏϧÏÏ5ÏϧÏϨ¹¹ÏSystem.out.print(“Error presione S o N: “); ÏϧÏϧÏÏ5ÏϧÏϨ¹¹Ïinterna=false; ÏϧÏϧÏÏ5ÏÏ©ÏÏ©} ÏϧÏϧÏÏ5 ÏϧÏϧÏÏ5 ÏϧÏϧÏÏò}while(interna==false); ÏϧÏϧ Ïϧ¹Ĺ¹Ïreturn ok; ÏϧÏÏ©} Ïϧ Ïϧ ÏÏ©} |
| import java.io.*; /** *Ejecuta el juego “El Ahorcado” *trabaja con objetos de la clase FicheroLectura,Extrae y DatosJugador *@author Alba & Rodrigo *@version 1.0 *@see FicheroLectura *@see FicheroLectura#getPalabras *@see Extrae *@see Extrae#PalabraAleatoria *@see Extrae#Busca *@see Extrae#continuar *@see DatosJugador *@exception IOException */ ÏÕÖ×public class PruebaAhorcado Ïϧ{ ÏϧÏÞßàpublic static void main (String[] args) ÏϧÏϧ{ ÏϧÏϨ¹íÏboolean ok=false; ÏϧÏϨ¹íÏboolean salida=false; ÏϧÏϨ¹íÏString buscar=null; ÏϧÏϨ¹íÏString letra=null; ÏϧÏϨ¹íÏchar busca; ÏϧÏϨ¹íÏInteger[] posicion; ÏϧÏϨ¹íÏInteger[] guarda; ÏϧÏϨ¹íÏint oportunidades=6; ÏϧÏϨ¹íÏFicheroLectura palabra=new FicheroLectura(); ÏϧÏϨ¹íÏExtrae prueba=new Extrae(palabra.getPalabras()); ÏϧÏϨ¹íÏDatosJugador nombre=new DatosJugador(); ÏϧÏϧ ÏϧÏϧ ÏϧÏϨ¹¹´try ÏϧÏϧÏϧ{ ÏϧÏϧÏϨ¹¹ÏSystem.out.println(“\n\n*************Empezamos el juego!!!*************************”); ÏϧÏϧÏϨ¹¹Ïnombre.ponNombre(nombre.pedirEntrada(“\nEscribe tu nombre: “)); ÏϧÏϧÏϧ ÏϧÏϧÏϧ ÏϧÏϧÏϧ ÏϧÏϧÏϨ¹¹®do ÏϧÏϧÏϧÏÏ5{ ÏϧÏϧÏϧÏÏ7¹¹Ïbuscar=prueba.PalabraAleatoria(); ÏϧÏϧÏϧÏÏ7¹¹Ïposicion=new Integer[buscar.length()]; ÏϧÏϧÏϧÏÏ7¹¹Ïguarda=new Integer[buscar.length()]; ÏϧÏϧÏϧÏÏ7¹íÏBufferedReader datos=new BufferedReader(new InputStreamReader(System.in)); ÏϧÏϧÏϧÏÏ5 ÏϧÏϧÏϧÏÏ5 ÏϧÏϧÏϧÏÏ7¹¹ÏSystem.out.println(“\n***********Puedes jugar “+oportunidades+” partidas**********”); ÏϧÏϧÏϧÏÏ5 ÏϧÏϧÏϧÏÏ7¹¹ÏSystem.out.println(“\n\nLa palabra tiene “+buscar.length()+ ” letras”); ÏϧÏϧÏϧÏÏ5 ÏϧÏϧÏϧÏÏ7¹¹±for(int indice=0;indice<buscar.length();indice++) ÏϧÏϧÏϧÏÏ5ÏÏ5{ ÏϧÏϧÏϧÏÏ5ÏÏ5 ÏϧÏϧÏϧÏÏ5ÏÏ7¹¹®do ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5{ ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ7¹¹´try ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5Ïϧ{ ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5ÏϨ¹¹ÏSystem.out.print(“\n\nIntroduzca una letra: “); ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5ÏϨ¹¹Ïletra=datos.readLine(); ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5Ïϧ ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5ÏϨ¹³´if(letra.length()>=2) ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5ÏϧÏ6¾¹¹Ïok=false; ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5ÏϧÏö´else ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5ÏϧÏȾ¹¹Ïok=true; ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5Ïϧ ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5Ïϧ ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5ÏϨ¹¹Ïposicion=prueba.Busca(letra.charAt(0),buscar); ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5Ïϧ} ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5Ïϧ ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5ÏϧÏðîìcatch(StringIndexOutOfBoundsException e) ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5ÏϧÏϧ{ ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5ÏϧÏϨ¹¹Ïok=false; ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5ÏÏ©ÏÏ©} ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5 ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5 ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏò}while(ok!=true); ÏϧÏϧÏϧÏÏ5ÏÏ5 ÏϧÏϧÏϧÏÏ5ÏÏ5 ÏϧÏϧÏϧÏÏ5ÏÏ7¹¹±for(int i=0;i<buscar.length();i++) ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5{ ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5 ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5 ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ7¹³´if((posicion[i]==null)&&(guarda[i]==null)) ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5Ï6§{ ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5Ï6§ ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5Ï6¾¹¹Ïguarda[i]=null; ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5Ï6Ï} ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5Ïö´else ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5ϸ§{ ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5ϸ¾¹¹Ïguarda[i]=i; ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5Ï¸Ï ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5ÏÈÏ} ÏϧÏϧÏϧÏÏ5ÏÏ5Ïϰ} ÏϧÏϧÏϧÏÏ5ÏÏ7¹¹ÏSystem.out.print(“\t\t\t\t”); ÏϧÏϧÏϧÏÏ5ÏÏ5 ÏϧÏϧÏϧÏÏ5ÏÏ7¹¹±for(int i=0;i<buscar.length();i++) ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5{ ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5 ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5 ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ7¹³´if(guarda[i]==null) ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5Ï6§{ ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5Ï6¾¹¹ÏSystem.out.print(“*”); ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5Ï6Ï ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5Ï6Ï} ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5Ïö´else ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5ϸ§{ ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5ϸ¾¹¹ÏSystem.out.print(buscar.charAt(guarda[i])); ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5Ï¸Ï ÏϧÏϧÏϧÏÏ5ÏÏ5ÏÏ5ÏÈÏ} ÏϧÏϧÏϧÏÏ5ÏÏ5Ïϰ} ÏϧÏϧÏϧÏÏ5ÏÏ5 ÏϧÏϧÏϧÏÏ5Ïϰ} ÏϧÏϧÏϧÏÏ5 ÏϧÏϧÏϧÏÏ7¹¹±for(int i=0;i<buscar.length();i++) ÏϧÏϧÏϧÏÏ5ÏÏ5{ ÏϧÏϧÏϧÏÏ5ÏÏ7¹³´if(guarda[i]==null) ÏϧÏϧÏϧÏÏ5ÏÏ5Ï6§{ ÏϧÏϧÏϧÏÏ5ÏÏ5Ï6¨¹¹ÏSystem.out.println(“\n\n**************Lo siento “+ nombre.getNombre()+” perdiste!!!***********”); ÏϧÏϧÏϧÏÏ5ÏÏ5Ï6¨¹¹ÏSystem.out.println(“\nLa palabra que buscabas es: “+ buscar); ÏϧÏϧÏϧÏÏ5¹ÇÏ6¾¹¹Ïbreak; ÏϧÏϧÏϧÏÏ5ÏÏ5϶Ï} ÏϧÏϧÏϧÏÏ5ÏÏ5 ÏϧÏϧÏϧÏÏ5ÏÏ7¹³´if(guarda[i]!=null) ÏϧÏϧÏϧÏÏ5ÏÏ5Ï6¾¹³´if(i==guarda.length-1) ÏϧÏϧÏϧÏÏ5ÏÏ5϶Ï϶¾¹¹ÏSystem.out.println(“\n\n**************Felicidades “+ nombre.getNombre()+ ” ganaste!!!***********”); ÏϧÏϧÏϧÏÏ5ÏÏ5 ÏϧÏϧÏϧÏÏ5Ïϰ} ÏϧÏϧÏϧÏÏ5 ÏϧÏϧÏϧÏÏ7¹¹Ïoportunidades–; ÏϧÏϧÏϧÏÏ7¹³´if(oportunidades!=0) ÏϧÏϧÏϧÏÏ5Ï6§{ ÏϧÏϧÏϧÏÏ5Ï6¨¹¹ÏSystem.out.print(“\n\nDesea jugar otra vez?, precione S o N: “); ÏϧÏϧÏϧÏÏ5Ï6¨¹¹Ïsalida=prueba.Continuar(); ÏϧÏϧÏϧÏÏ5Ï6¾¹³´if(salida==true) ÏϧÏϧÏϧÏÏ5Ï6Ï϶¾¹¹ÏSystem.out.println(“\n\n*************Empezamos otra vez el juego!!!*************************”); ÏϧÏϧÏϧÏÏ5Ï6Ï ÏϧÏϧÏϧÏÏ5Ï6Ï ÏϧÏϧÏϧÏÏ5Ï6Ï ÏϧÏϧÏϧÏÏ5Ï6Ï} ÏϧÏϧÏϧÏÏ5Ï6Ï ÏϧÏϧÏϧÏÏ5Ïö´else ÏϧÏϧÏϧÏÏ5ÏȾ¹¹Ïsalida=false; ÏϧÏϧÏϧÏÏ5 ÏϧÏϧÏϧÏÏò}while(salida==true); ÏϧÏϧÏϧ ÏϧÏϧÏϨ¹¹ÏSystem.out.println(“\n\n—————————–FIN DEL JUEGO————————”); ÏϧÏϧÏϧ ÏϧÏϧÏϧ} ÏϧÏϧÏϧ ÏϧÏϧÏϧ ÏϧÏϧÏϧÏðîìcatch(IOException e) ÏϧÏϧÏϧÏϧ{ ÏϧÏϧÏϧÏϨ¹¹ÏSystem.out.println(“Error de datos”); ÏϧÏϧÏÏ©ÏÏ©} ÏϧÏϧ ÏϧÏϧ ÏϧÏÏ©} ÏÏ©} |
Y la ejecución seria la siguiente



Holaaaaa!!!!bueno soy unos haxas, nos ha encantado vuestro super post, no solo xq os lo habeis currao sino también xq nos ha ayudado muxo, sobre todo en el ejercicio 3 ya que no hemos conseguimos resolverlo y no fue xq acabara la clase, os lo aseguramos…es que no teniamos ni idea, tambien intentaron explicarnoslo pero no entendimos nada…es verdad q al final esto del blog va a servir de gran ayuda,eh!
Un saludo
Gracias….
Por: natymari el Marzo 6, 2008
a las 8:44 pm
Chicos, vuestro blog al final va a acabar convirtiéndose en un libro de texto sobre Java: está muy trabajado y además muy bien trabajado
De ésta os podéis buscar una plaza como profes en alguna parte
(Por cierto, ¿de verdad es una cosa conocida por todo el mundo que no te puedes ligar a la novia de tu mejor amigo?
)
Por: Jose Jesus el Marzo 11, 2008
a las 8:26 am