Nueva en Java y tengo una pregunta?

Iniciado por monsefoster, 10 Noviembre 2009, 05:13 AM

0 Miembros y 1 Visitante están viendo este tema.

monsefoster

Chicos, hice este programa...
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

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:

Casidiablo

#1
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 (java) [Seleccionar]
import java.io.*;
/**
* Este programa pide un numero al usuario hasta que sea mayor que 10.
*/
public class programa {
public static void main(String[] args) throws IOException {
int a;
BufferedReader en = new BufferedReader (new InputStreamReader (System.in));
System.out.println ("Valor a debe ser mayor de 10");
do{
System.out.println ("Inserte valor a: ");
System.out.flush();
a = Integer.parseInt(en.readLine());
if(a<=10) System.out.println ("\nEl valor a debe ser mayor que 10");
}
while(a<=10);
System.out.println ("\nQue bien, lo has entendido!");
}
}


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!

monsefoster

#2
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

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:

Casidiablo

Hola monsefoster...

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

Un saludo!

monsefoster

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

Casidiablo

Ahora soy yo el que no entiende qué no entiendes XD Debes exponer tus dudas de una manera más clara ;)

Un saludo!

Leyer

#6
 :xD

Casidiablo


Debci


-Ramc-

Cita de: 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!

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.

Shhh... be vewy, vewy, quiet!  I'm hunting wabbits...
LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.