Buscar

Ayuda con Java. Saltar a otra sentencia.


 
 Old 05 feb 2008, 15:24   #1 (permalink)  
Miembro
 
Avatar de BorHard
 
Registrado: agosto 2006
Mensajes: 51

Predeterminado Ayuda con Java. Saltar a otra sentencia.

Buenos dias.

Estoy haciendo un programa con java, en el que te hace una serie de preguntas y tienes que responder la respuesta correcta. Algo asi como el trivial. El programa es este:


import java.io.*;
public class trivial2 {
public static void main(String args[])throws IOException
{ System.out.println("Bienvenido a Trivial Pursuit. Para comenzar a jugar pulse la tecla J. Si desea abandonar el juego pulse la tecla S.");
{ InputStreamReader reader = new InputStreamReader(System.in);
BufferedReader input = new BufferedReader(reader);
char c = 0;
String n = input.readLine();
c = n.charAt(0);
switch (c)
{
case 'S':
System.out.println("Hasta la próxima!");
break;
case 'J':
System.out.println("Vamos a jugar!");
System.out.println("Primera pregunta:");
System.out.println("¿Cual es el estado mas pequeño del mundo?");
System.out.println(" A: Mónaco");
System.out.println(" B: El Vaticano");
System.out.println(" C: Andorra");
char respuesta1 = 0;
String a = input.readLine();
respuesta1 = a.charAt(0);
switch(respuesta1) {
case 'B':
System.out.println("Correcto!");
default:
System.out.println("Respuesta incorrecta. Vuelva a intentarlo");
System.out.println("Segunda pregunta");
}
}
}
}
}


Pues bien. Entiendo poco de esto, y quizas otro lo hubiera hecho de una forma mas sencilla. Pero eso no es lo que quiero saber. Lo que yo quiero es que cuando el usuario teclee una respuesta incorrecta, le salga en pantalla "Respuesta incorrecta. Vuelva a intentarlo" (que me sale) pero ademas de eso quiero que me permita de nuevo volver a teclear la respuesta. (que eso no me sale) Me vuelven a salir la pregunta y sus respuestas, pero no me vuelve a dar la opcion de volver a elegir.

Y otra cosa parecida, me gustaria que cuando diese la respuesta correcta, me saliera algo asi como "correcto" y saltase a una segunda pregunta. Esto es lo mas importante. Como se salta a una instruccion o sentencia distinta en Java. como lo hariais con este programa?

Ah, y otra cosa mas. Al principio te dice que pulse J para jugar y S para salir. Puse J y S porque no se como se dice a Java las teclas Intro y Esc. Si quiero indicarle que pulse Intro para jugar y Esc para salir que debo hacer?
Y sobre la tecla ESC me gustaria saber un metodo que al pulsarla, en cualguier momento del programa, me saliera un mensaje como "desea abandonar el juego?" luego SI/NO y que lo abandone o siga segun lo que elija.

Y ya por ultimo que me pongo muy pesado. Hay alguna forma de decirle al programa que no distinga entre mayúscylas y minusculas?

Bueno, pues esto es todo. Agradecería mucho a quien me diera una respuesta.
Un saludo.

Editado por BorHard en 05 feb 2008 a las 17:26.
BorHard is offline   Citar y responder
 
 Old 05 feb 2008, 17:16   #2 (permalink)  
Ex-miembro
 
Avatar de htorre
 
Registrado: junio 2006
Mensajes: 859

Predeterminado Re: Ayuda con Java. Saltar a otra sentencia.

Al parecer todavia no estas dando los ciclos en java (bucles for, while, do while), pasate por aca:

http://www.desarrolloweb.com/articulos/1760.php

En tu codigo estas utilizando Switch, yo cambiaria todo el codigo y utilizaria el while (Mientras que), y me quedaria la estructura algo asi:
Código:
int opc=0;
int resp;
while (opc==0) //Mientras que la opcion sea igual a cero ejecuto indefinidamente las instrucciones
{
System.out.println("Esta es la pregunta uno, elija una de las tres respuestas:");
System.out.println("Respuesta 1, Respuesta 2, Respuesta 3.");
resp= Integer.parseInt(in.readLine());//Se lee el numero de respuesta
if(resp==1)//si la respuesta correcta es 1, automaticamente cuando el bucle vuelva a iniciarse y vea que la condicion "while (opc==0)" es falsa no lo ejecuta y pasa a la siguiente pregunta.
{
System.out.println("Correcto!");
opc=1;}
else  //si no es correcta se mantiene y el bucle vuelve a ejecutarse
{
System.out.println("Respuesta Incorrecta, Intenta de Nuevo");}
}
Lo que estoy haciendo es utilizar el bucle while para que repita la instruccion que se encuentra dentro de el indefinidamente hasta que el usuario de con la respuesta correcta.


Con respecto a lo de volver a repetir el juego hasta que el usuario quiera salirse, es cosa de poner un ciclo y una comparacion:

Código:
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//me permite leer cadenas
int salir = 1;
String str=new String();
while (salir==1){
//AQUI VA TODO TU JUEGO

System.out.println("¿Desea salir del juego?");
str = br.readLine();//lees la cadena
if (str.equals ("si")
{
salir = 0;
}
}
Con respecto a lo ignorar mayusculas minusculas pasate por aca:

http://www.infor.uva.es/~jmrr/tgp/java/String.html

PD: No pongas el codigo en ese color, es bastante molesto a la vista.

Salu2
htorre is offline   Citar y responder
 
 Old 05 feb 2008, 19:23   #3 (permalink)  
Miembro
 
Avatar de BorHard
 
Registrado: agosto 2006
Mensajes: 51

Predeterminado Re: Ayuda con Java. Saltar a otra sentencia.

El tema del color solucionado. Y muchas gracias por responder. Me has ayudado mucho.
Al final lo he modificado y lo he dejado asi.

import java.io.*;
public class trivial4 {
public static void main(String args[])throws IOException
{ System.out.println("Bienvenido a Trivial Pursuit. Para comenzar a jugar pulse la tecla J. Si desea abandonar el juego pulse la tecla S.");
{ InputStreamReader reader = new InputStreamReader(System.in);
BufferedReader input = new BufferedReader(reader);
char c = 0;
String n = input.readLine();
c = n.charAt(0);
switch (c)
{
case 'S':
System.out.println("Hasta la próxima!");
break;
case 'J':
{
int opc=0;
int caracter;

System.out.println("Vamos a jugar!");
System.out.println("Primera pregunta:");
while(opc==0)
{
System.out.println("¿Cual es el estado más pequeño?");
System.out.println("");
System.out.println(" A: Mónaco");
System.out.println(" B: El Vaticano");
System.out.println(" C: Andorra");
caracter = System.in.read();
if(caracter=='B')
{
System.out.println("Correcto!");
System.out.println("");
opc=1;}
else
{
System.out.println("Respuesta incorrecta. Inténtelo de nuevo:");
System.out.println("");
}
int caracter2;
while(opc==1)
{
System.out.println("¿A que elemento de la tabla periódica corresponde el SN");
System.out.println("");
System.out.println(" A: Al estaño");
System.out.println(" B: Al cobre");
System.out.println(" C: Al mercurio");
System.out.println("");
caracter2 = System.in.read();
if (caracter2 == 'A')
{
System.out.println("Correcto!");
System.out.println("");
opc=2;}
else
{
System.out.println("Respuesta Incorrecta. Inténtelo de nuevo:");
System.out.println("");
}
int caracter3;
while(opc==2)
System.out.println("¿Como se llama el vocalista de 3 Doors Down");
System.out.println("");
System.out.println(" A: Brad Arnold");
System.out.println(" B: Tom Cruise");
System.out.println(" C: Joaquin Sabina");
System.out.println("");
caracter3 = System.in.read();
if (caracter3 == 'A')
{
System.out.println("Correcto!");
System.out.println("");
opc=3;}
else
{
System.out.println("Respuesta Incorrecta. Inténtelo de nuevo:");
System.out.println("");
int caracter4;
while(opc==3)
System.out.println("¿Que actor y serie ganaron en 2006 el EMMY al mejor actor y a la mejor serie");
System.out.println("");
System.out.println(" A: Antonio Banderas por 'Los hombres de Paco");
System.out.println(" B: David Bisbal por 'Prison Break'");
System.out.println(" C: Kiefer Sutherland por '24'");
System.out.println("");
caracter4 = System.in.read();
if (caracter4 == 'C')
{
System.out.println("Correcto!");
System.out.println("");
opc=4;}
else
{
System.out.println("Respuesta Incorrecta. Inténtelo de nuevo:");
System.out.println("");
int caracter5;
while(opc==4)
System.out.println("¿Que videojuego recibio en el 2007 el premio BAFTA al mejor juego del año");
System.out.println("");
System.out.println(" A: Tetris");
System.out.println(" B: BIOSHOCK)");
System.out.println(" C: 'El Quijote'");
System.out.println("");
caracter5 = System.in.read();
if (caracter5 == 'B')
{
System.out.println("Correcto!");
System.out.println("");
opc=5;}
else
{
System.out.println("Respuesta Incorrecta. Inténtelo de nuevo:");
System.out.println("");
}
}
}


Esta mejor que antes, pero sigue teniendo fallos. Si te equivocas en las preguntas, te las vuelve a preguntar 3 veces. Luego si la aciertas, te pasa a la segunda pregunta pero ademas de eso te salen tambien otros grupos de respuestas mezclados. Y por si fuera poco, se me ha metido en un bucle que no se detenia.

Yo miro y remiro pero no veo los errores. Seguramente estare haciendo algo mal. Pero no logro ver que es. Si usted u otra persona fuera tan amable se lo agradecere mucho.
BorHard is offline   Citar y responder
 
 Old 05 feb 2008, 19:28   #4 (permalink)  
Miembro
 
Avatar de BorHard
 
Registrado: agosto 2006
Mensajes: 51

Predeterminado Re: Ayuda con Java. Saltar a otra sentencia.

Para que la lectura sea mas sencilla, solo decir que el método se va repitiendo una y otra vez. Va aumentando el opc un valor y hace una nueva pregunta. Si por ejemplo opc vale 2, si fallamos la pregunta opc sigue valiendo 2 y la vuelve hacer. pero si acertamos, opc pasa a valer 3, y pasa a la siguiente pregunta.
BorHard is offline   Citar y responder
 
 Old 06 feb 2008, 01:39   #5 (permalink)  
Miembro activo
 
Avatar de selken
 
Registrado: mayo 2007
Ubicación: El Salvador
Mensajes: 1.216

Predeterminado Re: Ayuda con Java. Saltar a otra sentencia.

Pues a veces son errores que no se pueden ver de primera, si estás usuando un IDE, prueba con breakpoints, haces click en la parte izquierda de la línea de código, y cuando ejecutas el programa, puedes ver el comportamiento de tu código en tiempo real, así como el estado de las variables, prueba eso, si compilas con un IDE claro.
selken is offline   Citar y responder
 
 Old 06 feb 2008, 20:58   #6 (permalink)  
Ex-miembro
 
Avatar de htorre
 
Registrado: junio 2006
Mensajes: 859

Predeterminado Re: Ayuda con Java. Saltar a otra sentencia.

Bueno, lo que quieres es que si te equivocas al responder una pregunta se te de otra oportunidad para poder acertar? porque pense que querias que la pregunta se repitiera hasta que el usuario acertara.

Pero la solucion es cosa de corregir un poco los bucles, si quieres que la pregunta se repita dos veces puedes cambiar la condicion del while asi:

opc=1;
while (opc <= 2)
{
AQUI LA PREGUNTA
AQUI LAS RESPUESTAS(A,B,C)
if (caracter == 'A')
{
System.out.println("Correcto!");
System.out.println("");
opc=3;
}
else{
System.out.println("Te equivocaste");
opc=opc + 1;
}
}

Aqui la condicion es que mientras que "opc" sea menor que dos el bucle se ejecuta, si te equivocas el valor de "opc" aumentara en 1, y te dara otra oportunidad para la pregunta, pero si cometes de nuevo un error el valor de "opc" sera 3, por lo tanto el bucle no se ejecutaria.

Todo es cuestion de jugar con el codigo para que cambie orientado a tus necesidades, disculpa si tarde un poco en responderte es que estoy de vuelta en la Universidad y he estado un poco ocupado.

Salu2
htorre is offline   Citar y responder
 
 Old 07 feb 2008, 17:45   #7 (permalink)  
Miembro
 
Avatar de BorHard
 
Registrado: agosto 2006
Mensajes: 51

Predeterminado Re: Ayuda con Java. Saltar a otra sentencia.

Cita:
htorre escribió: Ver post
disculpa si tarde un poco en responderte es que estoy de vuelta en la Universidad y he estado un poco ocupado.

Salu2
jaja, no pasa nada. Si estoy yo igual.

Pero en el rato que no me has contestado he estado investigando y al final lo he dejado asi:


import java.util.Random;
import java.io.*;
public class trivialpursuit {
public static void main(String args[])throws IOException
{ System.out.println("Bienvenido a Trivial Pursuit. Para comenzar a jugar pulse la tecla J. Si desea abandonar el juego pulse la tecla S.");
{ InputStreamReader reader = new InputStreamReader(System.in);
BufferedReader input = new BufferedReader(reader);
char c = 0;
String n = input.readLine();
n=n.toUpperCase(); //Aqui convierte a mayusculas
c = n.charAt(0);
switch (c)
{
case 'S':
System.out.println("Hasta la próxima!");
break;
case 'J':
{
int opc;
int lose;
int caracter;
int caracter2;
int caracter3;
int caracter4;
int caracter5;
int caracter6;
int caracter7;
int caracter8;
int caracter9;
int caracter10;
int caracter11;
int caracter12;
int caracter13;
int caracter14;
int cont; // variables contador
int contlose;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// A continuacion tenemos el bucle para respuestar acertadas
cont = 0;
opc=0;
while(opc==0 && cont<=6) //mientras que cont sea menor que 6 entrará al bucle
// si opc es igual a 0, crea un numero aleatorio entre 1 y 14 llamado m.
{ Random rambo = new Random();
int m = rambo.nextInt();
//A continuacion restringimos el rango para que siempre salga entre 1 y 14.
m %= 5;
m += 13;
////////////////////////////////////////
System.out.println("" + m);
if(cont==6)
{
System.out.println("Enhorabuena. Has ganado.");
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////
//A continuacion tenemos el bucle para respuestar erróneas
contlose = 0;
lose=0;
while(lose==0 && contlose<=3) //mientras que contlose sea menor que 3 entra al bucle
// si lose es igual a 0, crea un numero aleatorio entre 1 y 14 llamado m.
{ Random rambos = new Random();
int h = rambos.nextInt();
//A continuacion restringimos el rango para que siempre salga entre 1 y 14.
h %= 5;
h += 13;
////////////////////////////////////////
System.out.println("" + h);
if(cont==3)
{
System.out.println("Lo siento. Has perdido.");
}
//A continuación tenemos la pregunta para el caso de que el numero aleatorio m fuera 1
if (m==1 ^ h==1)
{
System.out.println("¿Cual es el estado más pequeño?");
System.out.println("");
System.out.println(" A: Mónaco");
System.out.println(" B: El Vaticano");
System.out.println(" C: Andorra");
caracter = System.in.read();
// Aqui el concursante eligira una opción: A, B o C
if(caracter=='B')
// Si pulsa B
{
System.out.println("Correcto!");
System.out.println("");
opc=0;
// opc es igual a 0, para que vuelva a crear el numero aleatorio
cont++;
// incrementamos el contador. Asi cuando llegue hasta 6 preguntas se acabara el programa.
}
else
// si pulsara otra tecla
{
System.out.println("Respuesta incorrecta. La respuesta era: EL Vaticano.");
System.out.println("");
//Y a continuación le decimos que pase al bucle de respuestas erróneas e incremente su contador
lose=0;
contlose++;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// A continuacion tenemos la pregunta en el caso de que el número aleatorio sea 2.
if (m==2 ^ h==2)
{
System.out.println("¿A que elemento de la tabla periódica corresponde el SN?");
System.out.println("");
System.out.println(" A: Al estaño");
System.out.println(" B: Al cobre");
System.out.println(" C: Al mercurio");
System.out.println("");
caracter2 = System.in.read();
if (caracter2 == 'A')
{
System.out.println("Correcto!");
System.out.println("");
opc=0;
// opc es igual a 0, para que vuelva a crear el numero aleatorio
cont++;
}
else
{
System.out.println("Respuesta incorrecta. La respuesta era: El estaño.");
System.out.println("");
lose=0;
contlose++;
}
}


El programa esta hecho de tal manera que al acertar 6 preguntas me salga el mensaje "enhorabuena. has ganado" y al fallar 3, que me salga "lo siento. has perdido" Y que en ambos casos finalice el juego. Bueno, o al menos he intentado hacerlo asi.
Veras que hay dos bucles, una para las preguntas acertadas en el que una variable cont que se inicia en 0 va aunmentando de valor, y al llegar a 6 se sale del bucle y te manda un mensaje. Y otro bucle igual pero para preguntas erroneas en el que la variable contador se llama contlose.

Y esas variable, cont y contlose, se incrementan al acertar o fallar una pregunta. Debajo de cada pregunta lo puedes ver.

Tambien hay una operacion que genera un numero aleatorio m (o ha para respuestas erroneas) que segun el valor que salga, me hara una pregunta u otra. Por eso al principio de cada pregunta pone "if m == "

Pero seguro que algo esta mal. Porque cuando paso de pregunta, me saca 2 o 3 o 4 preguntas mas, que incluso hasta el mismo se la responde, y luego ya me sale la pregunta para responderla yo. Pero ya te digo, no me sale directamente.

Pienso que uizas tenga algo que ver con los while, porque qizas deberia cerrarlos en el propio bucle y no al final del programa. Pero si hago esto me sale error. entonces ya no se que pensar.

__________________________________________________ ________________________________

Y otra cosa mas:

que debo poner debajo de cada pregunta para que al meter una respuesta el programa no distinga entre mayuscula o minuscula?
al principio he puesto lo de:

String n = input.readLine();
n=n.toUpperCase(); //Aqui convierte a mayusculas
c = n.charAt(0);


pero para caracter = System.in.read(); que debo hacer?

Y, por ultimo, como puedo restringir el rango del numero aleatorio m para que me salga entre 1 y 14. Se que se hace con los operadores &= y +=. pero no se como se aplican correctamente.

alguna idea? gracias. Y suerte con los examenes.
BorHard is offline   Citar y responder
 
 Old 08 feb 2008, 20:58   #8 (permalink)  
Ex-miembro
 
Avatar de htorre
 
Registrado: junio 2006
Mensajes: 859

Predeterminado Re: Ayuda con Java. Saltar a otra sentencia.

Hombre. . .

El codigo anterior tenia una cantidad de errores que no entendi mucho, pero tome el segundo codigo que colocaste y lo corregi un poco, debes prestar un poco de atencion a la estructura que tiene el codigo, habian muchos bucles while que no tenian inicio, te faltaba el "{", aqui esta algo asi como lo que tu quieres pero con numeros, y con una segunda oportunidad de acertar:

Código:
import java.io.*;
public class trivialpersuit {
public static void main(String args[])throws IOException{

InputStreamReader reader = new InputStreamReader(System.in);
BufferedReader input = new BufferedReader(reader);
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

System.out.println("Bienvenido a Trivial Pursuit. Para comenzar a jugar presiona si. Si desea abandonar el juego pulse no");


String n = input.readLine();


if (n.equalsIgnoreCase("no")){
	System.out.println("Hasta la próxima!");
}

if(n.equalsIgnoreCase("si")){


int opc=1;
int resp,resp1,resp2,resp3,resp4;

System.out.println("Vamos a jugar!");
System.out.println("Primera pregunta:");
while(opc<=2)
{
System.out.println("¿Cual es el estado más pequeño?");
System.out.println("");
System.out.println(" 1: Mónaco");
System.out.println(" 2: El Vaticano");
System.out.println(" 3: Andorra");
resp= Integer.parseInt(in.readLine());
if(resp==2)
{
System.out.println("Correcto!");
System.out.println("");
opc=3;}
else
{
System.out.println("Respuesta incorrecta. Inténtelo de nuevo:");
System.out.println("");
opc++;
}
}
opc=1;
while(opc<=2)
{
System.out.println("¿A que elemento de la tabla periódica corresponde el SN");
System.out.println("");
System.out.println(" 1: Al estaño");
System.out.println(" 2: Al cobre");
System.out.println(" 1: Al mercurio");
System.out.println("");
resp1= Integer.parseInt(in.readLine());
if (resp1 == 1)
{
System.out.println("Correcto!");
System.out.println("");
opc=3;}
else
{
System.out.println("Respuesta Incorrecta. Inténtelo de nuevo:");
System.out.println("");
opc++;
}
}
opc=1;
while(opc<=2){
System.out.println("¿Como se llama el vocalista de 3 Doors Down");
System.out.println("");
System.out.println(" 1: Brad Arnold");
System.out.println(" 2: Tom Cruise");
System.out.println(" 3: Joaquin Sabina");
System.out.println("");
resp2= Integer.parseInt(in.readLine());
if (resp2 == 1)
{
System.out.println("Correcto!");
System.out.println("");
opc=3;}
else
{
System.out.println("Respuesta Incorrecta. Inténtelo de nuevo:");
System.out.println("");
opc++;
}
}
opc=1;
while(opc<=2){
System.out.println("¿Que actor y serie ganaron en 2006 el EMMY al mejor actor y a la mejor serie");
System.out.println("");
System.out.println(" 1: Antonio Banderas por 'Los hombres de Paco");
System.out.println(" 2: David Bisbal por 'Prison Break'");
System.out.println(" 3: Kiefer Sutherland por '24'");
System.out.println("");
resp3= Integer.parseInt(in.readLine());
if (resp3 == 3)
{
System.out.println("Correcto!");
System.out.println("");
opc=3;}
else
{
System.out.println("Respuesta Incorrecta. Inténtelo de nuevo:");
System.out.println("");
opc++;
}
}
opc=1;
while(opc<=4){
System.out.println("¿Que videojuego recibio en el 2007 el premio BAFTA al mejor juego del año");
System.out.println("");
System.out.println(" A: Tetris");
System.out.println(" B: BIOSHOCK)");
System.out.println(" C: 'El Quijote'");
System.out.println("");
resp4= Integer.parseInt(in.readLine());
if (resp4==2)
{
System.out.println("Correcto!");
System.out.println("");
opc=3;}
else
{
System.out.println("Respuesta Incorrecta. Inténtelo de nuevo:");
System.out.println("");
opc++;
}
}
}
}
}
Lo de ignorar mayusculas y misnusculas se hace con equalsIgnoreCase, en el codigo hay un ejemplo cuando preguntas si quieres jugar y la sintaxis es asi: string1.equalsIgnoreCase("palabra"), miras el codigo lo pruebas y me cuentas, perdona es que estoy corriendo de un lado para otro por eso no explique mucho el codigo.


Salu2
htorre is offline   Citar y responder

« PHP Para un principiante | alguien sabe jsp?? »

Herramientas
Estilo


 

Tema Iniciado por Foro Respuestas Último mensaje
Necesito ayuda (otra vez) McV21 Configuración 4 20 abr 2006 15:01
hola necesito ayuda otra vez jeje chachilongi Internet 6 08 mar 2006 11:16
Otra ayuda en php 5, apache y mysql cosmonauta Programación 6 01 feb 2006 15:36
Vulnerabilidad en componente Java de Internet Explorer JaCop Seguridad 0 06 jul 2005 07:42
Java Script en Mozilla Firefox, error de sintaxis y otra más Amaia Internet 1 15 may 2005 17:22



Buscar