La edad de Matusalen

Hola gente de Java en México:

Pues el día miercoles ya es mi primer examén de Java, y estoy viendo ciclos, pero no le entendi ni "J" al maestro haha. Nos ha dejado varios problemas para practicar, espero me puedan ir ayudando conforme vaya resolviendo cada uno. En el primero tengo un problemilla que no se como resolver, basicamente se trata de que el programa escoja un número entre 500 y 600 y asignarselo a una variable, despues quiere que le pida al usuario que adivine el número. Si el usuario indica un número mayor el programa deberá decírselo, lo mismo si ingresa uno menor. Si el usuario adivina, el programa deberá mostrar el número de intentos que realizó. Si el usuario escribe 0 (cero) significa que se ha rendido y el programa deberá indicárselo en forma de mensaje.
Ni idea de como hacer algo semejante, se ve que voy a reprobar hahahahaha. Espero alguien me pueda ayudar.

Saludos

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

Clases

OK si realmente quieres ayuda, te doy algunos tips. Si lo que quieres es que te hagamos el programa, puedes dejar de leer.

Vas a tener que usar java.util.Random para el numero aleatorio (bueno estrictamente hablando, pseudo-aleatorio).
Para pedirle un número al usuario pues depende; si vas a usar linea de comando, lees de System.in pero ese es un InputStream, necesitas convertirlo a BufferedInputStream o BufferedReader para poder usar el método readLine(). Con la clase Integer puedes convertir el texto que el usuario te da, a un número entero.
Necesitas tener un contador (otra variable entera) que empieza en 0 y va incrementándose cada vez que el usuario te da un número, sin importar si le atina o no (o sea que lo puedes incrementar antes de validar su resultado). Necesitas un if-else if-else if-else para saber si el usuario le atinó al número, o si se fue para arriba o para abajo y desplegar el mensaje correspondiente (o si teclea 0 para salir).
Lo demás es pura sintaxis del lenguaje y pura aritmética bastante simple (BASTANTE simple; la única operación aritmética que necesitas usar es la suma), y 3 comparaciones (que realmente son 4 pero solamente evalúas las primeras 3; si no es ninguna de las 3 primeras entonces es la cuarta, que ya no necesitas evaluar).

Por cierto, qué tiene que ver Matusalen en todo esto? No se supone que ese tipo vivió 969 años?

Adivina la edad de

Adivina la edad de Matusalén es el nombre del programa. Agradezco tu ayuda, pero me pareció un poco ruda tu actitud, claro que no quiero que ma hagan el programa, sino como aprendería. Si vas a contestarme de mala gana o mala manera te ruego, aunque seas el Ultimate Master of Java (hahaha) por favor evita hacerlo, no estoy aqui para que me traten mal o mangoneen, vengo por ayuda.

Saludos

Imagen de cfpmx

Yo he notado que

Yo he notado que Ramipithecus se ha esforzado en sus ejercicios desde que ha entrado a Javamexico.org y no creo que esté esperando que le hagan la tarea, más bien espera que le demos las bases para que pueda empezar ya que no tiene la facilidad aún para desarrollar sus programas.

Gracias cfpmx

Así es, no espero que me hagan la tarea, solo quiero que me den una idea de como hacerlo, con ejemplos, no con texto simple y sin explicaciones como el de ezamudio:


Vas a tener que usar java.util.Random para el numero aleatorio (bueno estrictamente hablando, pseudo-aleatorio).
Para pedirle un número al usuario pues depende; si vas a usar linea de comando, lees de System.in pero ese es un InputStream, necesitas convertirlo a BufferedInputStream o BufferedReader para poder usar el método readLine(). Con la clase Integer puedes convertir el texto que el usuario te da, a un número entero.
Necesitas tener un contador (otra variable entera) que empieza en 0 y va incrementándose cada vez que el usuario te da un número, sin importar si le atina o no (o sea que lo puedes incrementar antes de validar su resultado). Necesitas un if-else if-else if-else para saber si el usuario le atinó al número, o si se fue para arriba o para abajo y desplegar el mensaje correspondiente (o si teclea 0 para salir).
Lo demás es pura sintaxis del lenguaje y pura aritmética bastante simple (BASTANTE simple; la única operación aritmética que necesitas usar es la suma), y 3 comparaciones (que realmente son 4 pero solamente evalúas las primeras 3; si no es ninguna de las 3 primeras entonces es la cuarta, que ya no necesitas evaluar).

Me dejó tal y como empecé la pregunta, sin saber nada. No se que es un Random, ni un BufferedInputStream o BufferedReader. Espero me puedan ayudar con algun ejemplo, sencillo por supuesto, pero que me sirva como base para poder desarrollar el mio.

Saludos

Imagen de cfpmx

Te recomendaría que cuando

Te recomendaría que cuando no conozcas el funcionamiento de alguna clase o método de Java, busques en google, casi siempre hay ejemplos hechos y fáciles de entender. Por ejemplo en google pon "Java Random" y el primer resultado te dirá como funciona, Java es muy grande y hasta los más experimentados se toparán con métodos que en su vida han visto, para eso sirve la API de Java. No te esperes a que todos resuelvan todas tus dudas por que muchas veces no siempre se puede. Respecto a la parte de System.in, InputStream, BufferedInputStream, BufferedReader, etc. sirven para pedir datos por consola, y es una manera muy tediosa de pedir datos por consola, pero una vez que ya tengas tu clase hecha, pues ya la puedes reutilizar en tus posteriores programas. Sin embargo, tú ya habías hecho un programa que te pide datos utilizando JOptionPane, y yo digo que mientras puedes seguir utilizando lo mismo. Así que no te confundas, está bastante fácil tu programa, investiga el Random y si no me equivoco con un do-while y unos cuantos if ya salió. Más adelante veo si ya hiciste algo, al menos arma el esqueleto de tu clase como la otra vez, la verdad ahora no tengo ganas de pensar, es la hora de la divagación, jaja.

Imagen de cfpmx

Aparte como conocimiento

Aparte como conocimiento cultural, Java 6 incorpora una mejora respecto a pedir datos por consola java.io.Console. La verdad no estoy muy seguro de cómo funciona, nunca lo he utilizado, pero es una de las características nuevas de la última versión de Java, y parece ser una alternativa mucho mas sencilla de pedir datos por consola.

Referencias: http://www.javalobby.org/java/forums/t84689.html

Imagen de mathemathician

Hola

Ahí te va mi respuesta:

import java.util.*;
import javax.swing.JOptionPane;
/**
 *
 * @author sacacorcho
 */

public class Adivina {
static Random generador=new Random();
static int numero=500+generador.nextInt(101);
    public static void main(String[] a){
        int respuesta;
        int intentos=0;
        do{
        respuesta=Integer.parseInt(JOptionPane.showInputDialog("introduce un numero"));
        intentos++;
        if(respuesta==0){JOptionPane.showMessageDialog(null,"Te has rendido, termina el programa");break;}
        if(respuesta<numero)JOptionPane.showMessageDialog(null,"el numero es menor");
        if(respuesta>numero)JOptionPane.showMessageDialog(null,"el numero es mayor");
        if(respuesta==numero)JOptionPane.showMessageDialog(null,"Has adivinado el numero en "+intentos+" intentos, El numero es: "+respuesta);
       
       
        }while(respuesta!=numero);
    }
}

Creo que hay un problema con tus clases de programación. Si estás teniendo muchos problemas para aprender a programar y eres un alumno dedicado, el problema puede venir del profesor. Y al contrario si no te estás dedicando a estudiar, por más bueno que sea el profesor no vas a poder. Una indicación de que el maestro está fallando es la falta de un libro de texto. Hay algunos libros muy buenos que puedes entender con la ayuda de tu profesor. Busca sobre todo libros con muchos ejemplos y ejercicios. Disculpa mi comentario, si me entrometo, pero yo doy clases en la UNAM de programación y no dejo de ser profesor incluso en este foro. Cuando enseño a programar doy muchos ejemplos muy simples, los analizamos en el pizarron, y les pido que los ejecuten y les hagan algunas modificaciones. Para nada les pido a mis alumnos principiantes que hagan ellos un programa. Programar es difícil ,involucra modelación, abstracción, sintáxis, técnicas y conocimiento del equipo,entre otras cosas. Por otra parte no debes molestarte con ezamudio a veces es difícil responder preguntas como las tuyas, ya que a este foro llega mucha gente a que le resuelvan la tarea y a veces ni las gracias dan. A mí me gusta hacerlo pues me sirve de práctica y creo que es la forma de aprender a programar o mejorar. Bueno esa es mi opinión. Muchos saludos y estamos en contacto

Gracias cfpmx y mathemathician

Tomaré muy en cuenta eso que me dices cfpmx, de hecho, fue lo que hice, buscar en google y si, en efecto encontre ejemplos, pero obviamente nada que me dijese como limitar los valores que quería entre el 500 o 600, o algo que se le pareciece. Aún me cuesta un poco de trabajo pensar abstractamente y con una lógica perfecta, espero que la practica me haga mejorar.
Mathemathician, que le puedo decir, me ha salvado el pellejo, para nada que me molesta su comentario, por el contrario, lo encuentro muy enriquecedor. Probablemente si haya algún problema por parte del maestro, no llevamos libro. La unica información que se nos proporciona es mediante diapositivas, y solo teoría; el maestro quiere que la teoría la llevemos a la práctica sin un ejemplo previo o un ejemplo muy vago si es que lo llega a poner. Tengo solo una duda en el programa: ¿Se limita a números entre 500 y 600?. Solo veo el 500 y no se en que parte se le da la instrucción que hasta el 600 jejeje.
Con respecto a lo de ezamudio, creo que tiene razón, hay gente mal agradecida que solo quiere cosas para su beneficio y sin agradecer, le pido una disculpa a ezamudio, creo que me dejé llevar por mis impulsos y mi sangre costeña, y no me puse en su lugar y en las malas experiencias que tal vez ha pasado.

Hoy hice 6 programas, y con ayuda de mathemathician el 7mo. Creo que me irá bien en mi exámen, ya le entendi a los ciclos. Les mantendré al tanto.

Saludos

ACTUALIZACION: Ya corrí el programa de mathemathician, siempre me dice que el número es menor, ya llegue hasta el -8000 y me sigue marcando lo mismo, ¿alguna idea?

Imagen de mathemathician

Hola

Otra vez yo. La instrucción que te genera el número secreto es:

static int numero=500+generador.nextInt(101);

Esta instrucción te genera un número aleatorio entre 500 y 600 inclusive.

Por otra parte, creo que el problema que mencionas, sobre que siempre te dice que el número es menor, viene del letrero que puse. Lo voy a cambiar por:
"el numero que introdujiste es mayor que el numero secreto" en vez de "el numero es mayor" ya que se está prestando a confusión. Lo mismo "el número que introdujiste es menor que el numero secreto" en vez de "el número es menor".
Escríbeme si tienes otra duda.
Saludos.

Listo

Después de unas ligeras modificaciones al codigo de mathematician, he aqui el código final de programa. Lo usaré como guía de estudio para mi exámen.
Muchas gracias a todos los que se interesaron en mi post. Nos mantendremos en contacto.

import javax.swing.JOptionPane;
import java.util.Random;

        public class Adivina_la_edad_de_Matusalen{

        static Random generador = new Random();
        static int numero= 500 + generador.nextInt(101);
   
    public static void main(String[] a){
        int respuesta;
        int intentos = 0;
       
    try{
       
        do{
     
        respuesta=Integer.parseInt(JOptionPane.showInputDialog("Introduce un número (Entre 500 y 600)"));
        intentos++;
        if(respuesta < 500 || respuesta > 600) System.out.println("Introduza valores válidos (Números entre 500 y 600)");
        if(respuesta == 0){System.out.println("Te has rendido, termina el programa");break;}
        if(respuesta < numero)System.out.println("El número que introdujiste es menor que el numero secreto");
        if(respuesta > numero)System.out.println("El número que introdujiste es mayor que el numero secreto");
        if(respuesta == numero)System.out.println("Has adivinado el numero en "+intentos+" intentos, El numero es: "+respuesta);
             
        }while(respuesta!=numero);
       
      }catch (Exception e){
        System.out.println("No introduza letras en los valores");
      }
    }
}

// Recibí ayuda del usuario Mathemathician de los foros de javamexico.org, quien es maestro de la UNAM.

Saludos a todos.

Que paso Ramipithecus!

Yo igual me molestaba que en las respuestas tuvieran solamente texto y nada de codigo de ejemplo, pero he aprendido a ser un poco mas autodidacta, quieres empezar a correr y nisiquiera sabes caminar, lee un buen libro primero, la teoria es muy importante, te recomiendo "PIENSA EN JAVA (Bruce Eckel)". Otra cosa me molesta que gente que va empezando como tu, tomen esa postura con gente como Ezamudio que solo tratan de ayudar sin pedir nada a cambio, el siempre es la primera persona en contestar mis preguntas y muchas veces el unico que lo hace.

Imagen de fcodiaz

Grave error!!!

bueno este post ya es viejo.. pero por si un novato lo lee.. es un error tomar un código de guía :S para un examen, nuca te servira aprenderte un código de memoria, cada programa se resuelve de forma distinta y incluso un mismo problema puede tener diferentes códigos, lo que se tiene que hacer es aprender a discernir que es lo que necesitamos mediante que lo lograremos si con un if o un for o un switch... etc, lo ejemplos son ejemplos comprende por que el programador puso un if y no un while para asì saver tu cuando requiere un for... me pregunto si Ramipithecus sobrevivió el semestre

Imagen de jali

Ultimate Master

Jajaja no habia leido este post, pero fue bastante divertido... Yo no considero que sea malo "tomar" un programa ya hecho, siempre y cuando esto sea para entender un "ahh, entonces puedo poner una condicion de este estilo" o "ohhh se peude usar este metodo?" pero tambien digo que es mucho mejor entender tu codigo, que vayas trabajando en tu analisis o en tu logica para resolver problemas.