Foro de elhacker.net

Programación => Java => Mensaje iniciado por: monsefoster en 10 Noviembre 2009, 05:13 am



Título: Nueva en Java y tengo una pregunta?
Publicado por: monsefoster en 10 Noviembre 2009, 05:13 am
Chicos, hice este programa...
Código:
import java.io.*;

public class mece2n {
/* Ejercicio #1, Guia Info 2:
*1. Leer dos números y mostrar todos los enteros comprendidos entre ellos.
*/

public static void main(String[] args) throws IOException {
int a,b,i;
BufferedReader en = new BufferedReader (new InputStreamReader (System.in));
System.out.println ("valor a debe ser mayor a valor b");
System.out.println ("Inserte valor a: ");
System.out.flush();
a = Integer.parseInt(en.readLine());
System.out.println ("\nInserte valor b: ");
System.out.flush();
b = Integer.parseInt(en.readLine());
if (a>b){
System.out.println ("\nel valor a debe ser mayor que el valor b");

}

System.out.println ("\nLos numeros entre " +a+ " y " +b+ " son:\n");
   for (i=a+1;i<b;i++){

      System.out.println (i);
   }

}
}

Y queria saber si habia alguna manera de 1.- En caso que el if se ejecute, luego de mostrar el mensaje, regrese a la instruccion anterior de leer los valores...

2.- En caso que la condicion del if siga siendo verdadera, repetir la instruccion

Código:
System.out.println ("valor a debe ser mayor a valor b");
System.out.println ("Inserte valor a: ");
System.out.flush();
a = Integer.parseInt(en.readLine());
System.out.println ("\nInserte valor b: ");
System.out.flush();
b = Integer.parseInt(en.readLine());
tantas veces como sea necesario, hasta que se inserten los valores correctos...

Perdonen, que quizas es una estupidez, este es el segundo "programa" que hago...me estoy iniciando  :rolleyes:


Título: Re: Nueva en Java y tengo una pregunta?
Publicado por: Casidiablo en 10 Noviembre 2009, 05:47 am
Hola monsefoster.
 
 En este caso debes usar otro tipo de instrucciones de control a parte del if. Lo que debes usar es un 'do while' que es una instrucción para manejar ciclos (también existe el 'for' y el 'while' que es para otro tipo de iteraciones). No voy a arreglar tu código para que haga lo que necesitas; eso sería aburrido y no te enseñaría mucho.
 
 En vez de eso, mejor te pongo un ejemplo rápido de cómo sería:

Código
  1. import java.io.*;
  2. /**
  3. * Este programa pide un numero al usuario hasta que sea mayor que 10.
  4. */
  5. public class programa {
  6. public static void main(String[] args) throws IOException {
  7. int a;
  8. System.out.println ("Valor a debe ser mayor de 10");
  9. do{
  10. System.out.println ("Inserte valor a: ");
  11. System.out.flush();
  12. a = Integer.parseInt(en.readLine());
  13. if(a<=10) System.out.println ("\nEl valor a debe ser mayor que 10");
  14. }
  15. while(a<=10);
  16. System.out.println ("\nQue bien, lo has entendido!");
  17. }
  18. }

Explicación breve: la estructura de control do while ejecuta un bloque de instrucciones UNA VEZ, y luego (en la parte del while) verifica si una condición se cumple. Si se cumple, entonces VUELVE A EJECUTAR el bloque de instrucciones.

Es distinto al while condicional en donde PRIMERO SE PREGUNTA ANTES DE EJECUTAR.

Puedes encontrar muchos otros ejemplos básicos aquí: http://casidiablo.net/java o video tutoriales que he hecho aquí: http://casidiablo.net/media/

Ten cuidado además con las condiciones. En tu caso quieres que A sea mayor que B, pero en la condición pones A>B y ejecutas el aviso. En este caso es al contrario, debes poner en la condición A<=B ya que lo que deseas es alertar al usuario cuando A sea menor o igual a B.

Un saludo!
 


Título: Re: Nueva en Java y tengo una pregunta?
Publicado por: monsefoster en 10 Noviembre 2009, 05:53 am
Hola, Gracias por tu ayuda! Tenia algo asi en mente, solo que no lo aplique por no estar segura...

La cosa es que probablemente tenga un error en la expresion
Código:

do{
System.out.println ("Inserte valor a: ");
System.out.flush();
a = Integer.parseInt(en.readLine());
System.out.println ("\nInserte valor b: ");
System.out.flush();
b = Integer.parseInt(en.readLine());
*** if ((a>b) && (a!=b)){
System.out.println ("\nel valor a debe ser menor que el valor b");

}
*** }while ((a>b) && (a!=b));

Pues aunque ingrese el mismo valor, igual me imprime en el caso de (a=15, b=15), asi que, es como si se salta el a!=b, estoy haciendo algo mal?

Y de nuevo, perdonen mi idiotez en el tema...estoy tratando de aprender a hacer las cosas "bien". No me conformo con solo probar si funciona de una manera y dejarlo asi, si no, los problemas que se pueden presentar y atacarlos de una sola manera.

Por cierto, casidiablo, gracias por el maravilloso link que me enviaste, y te tengo una pregunta, me llego un mensaje diciendo que habia violado las normas, pero... no se que norma o regla violé, si me podrias decir para no cometerlo de nuevo? Gracias!  :rolleyes:


Título: Re: Nueva en Java y tengo una pregunta?
Publicado por: Casidiablo en 10 Noviembre 2009, 14:57 pm
Hola monsefoster...

Umm, lo que te digo... debes cambiar (a>b) && (a!=b) por (a<=b). Entiendes porqué?

Un saludo!


Título: Re: Nueva en Java y tengo una pregunta?
Publicado por: monsefoster en 10 Noviembre 2009, 16:18 pm
No, no entiendo porque...me di cuenta y tenia un error "a debe ser menor y diferente de b", pues debo imprimir los numeros en ese intervalo


Título: Re: Nueva en Java y tengo una pregunta?
Publicado por: Casidiablo en 11 Noviembre 2009, 02:43 am
Ahora soy yo el que no entiende qué no entiendes XD Debes exponer tus dudas de una manera más clara ;)

Un saludo!


Título: Re: Nueva en Java y tengo una pregunta?
Publicado por: Leyer en 11 Noviembre 2009, 03:09 am
 :xD


Título: Re: Nueva en Java y tengo una pregunta?
Publicado por: Casidiablo en 11 Noviembre 2009, 03:11 am
o_O


Título: Re: Nueva en Java y tengo una pregunta?
Publicado por: Debci en 11 Noviembre 2009, 17:06 pm
o_O
Reafirmo tu respuesta xD
Casidiablo Rules!

Saludos


Título: Re: Nueva en Java y tengo una pregunta?
Publicado por: -Ramc- en 11 Noviembre 2009, 17:39 pm
Hola monsefoster...

Umm, lo que te digo... debes cambiar (a>b) && (a!=b) por (a<=b). Entiendes porqué?

Un saludo!

eso dices que vaya en la condición del while o del if, en cualquiera de los dos casos, no tiene sentido, se supone que a debe ser menor que b.

Que ponga en la condición del while y del if (a>=b) y le funciona.


Título: Re: Nueva en Java y tengo una pregunta?
Publicado por: monsefoster en 11 Noviembre 2009, 23:57 pm
Ya vi mis errores y los modifiqué...

al final, lo hice asi:

Código:
import java.io.*;

public class mece2n {
/* Ejercicio #1, Guia Info 2:
*1. Leer dos números y mostrar todos los enteros comprendidos entre ellos.
*/

public static void main(String[] args) throws IOException {
int a,b,i;
BufferedReader en = new BufferedReader (new InputStreamReader (System.in));
System.out.println ("valor a debe ser menor a valor b");
do{
System.out.println ("Inserte valor a: ");
System.out.flush();
a = Integer.parseInt(en.readLine());
System.out.println ("\nInserte valor b: ");
System.out.flush();
b = Integer.parseInt(en.readLine());
if ((a>b) || (a==b)){
System.out.println ("\nel valor a debe ser menor y diferente de el valor b ");

}
}while ((a>b) || (a==b));


System.out.println ("\nLos numeros entre " +a+ " y " +b+ " son:\n");
  for (i=a+1;i<b;i++){

     System.out.println (i);
  }

}
}

Mil gracias por su ayuda!  ;D ;D ;D