Test Foro de elhacker.net SMF 2.1

Programación => Programación General => 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...
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:
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 (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!
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

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
Cita de: Casidiablo en 11 Noviembre 2009, 03:11 AM
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
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.
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:

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