Java - [Ayuda] Programa funciona en pseudocódigo pero no en java

   
Vista:
Imágen de perfil de Jhon

[Ayuda] Programa funciona en pseudocódigo pero no en java

Publicado por Jhon (14 intervenciones) el 28/04/2015 14:23:28
Cordial saludo:

Estoy muy verde en java (Soy estudiante de sistemas de información) y estoy aprendiendo apenas. Resulta que escribí un código para resolver un problema que me plantearon y en PSeInt funciona muy bien pero en java no me funcionó la "traducción" que realicé de mi algoritmo.
La idea es ir recibiendo las calificaciones de un grupo de diez estudiantes y al final decir cuántos sacaron menos de 50 (Se califica de 1 a 100, cuántos de 50 a 70, cuántos de 70 a 80 y cuántos más de 80.
Como yo quería que el programa preguntara por ejemplo "Nota del estudiante 2: " y si la nota no era entre 1 y 100 dijera error y preguntara de nuevo la nota del estudiante 2, utiicé un do while dentro de otro. Uno controla que la nota sea válida y el otro cuenta estudiantes hasta 10.
El pseudocódigo en PseInt es este:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Proceso calificaciones
	nota <- 0; //Todos los datos numéricos ingresados sean válidos o no
	menosDe50 <- 0; //Notas inferiores a 50
	de50A70 <-0; //Notas entre 50 y 70
	de70A80 <- 0; //Notas entre 70 y 80
	de80Mas <- 0; //Notas de 80 puntos o más
	estudiante <- 1; //Inicia en 1 el conteo de estudiantes
	Repetir
		Repetir
			Escribir "Ingrese calificación del estudiante ",estudiante,"(De 1 a 100):" //Aquí se filtran las notas no válidas para que no las cuente
			Leer nota;
			Si nota < 1 o nota > 100 Entonces
				Escribir "Error: Las notas deben ser entre 1 y 100.";
			FinSi
		Hasta que nota >= 1 y nota <= 100;
		estudiante <- estudiante +1
		Si nota < 50 Entonces
			menosDe50 <- menosDe50 + 1;
		Finsi
		Si nota >= 50 y nota < 70  Entonces
			de50A70 <- de50A70 + 1;
		Finsi
		Si nota >=70 y nota < 80 Entonces
			de70A80 <- de70A80 + 1;
		Finsi
		Si nota >= 80 Entonces
			de80Mas <- de80Mas + 1;
		FinSi
	Hasta Que estudiante > 10;
	Escribir "Calificaciones de menos de 50: ",menosDe50;
	Escribir "Calificaciones entre 50 y menos de 70: ",de50A70;
	Escribir "Calificaciones entre 70 y menos de 80: ",de70A80;
	Escribir "Calificaciones superiores a 80: ",de80Mas;
	FinProceso


Al ejecutarlo funciona bien. Pero al adaptarlo a java no funciona. Primero al meter por ejemplo cero se cerraba y me daba los resultados. Después con algunos cambios logré que mostrara el error pero pasaba al siguiente estudiante y se quedaba ahí una y otra vez.
Ahora mismo como lo tengo sea válida o no la nota me pide una y otra vez la calificación del estudiante 1:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public static void main(String[] args) {
        // TODO code application logic here
        Scanner in = new Scanner(System.in);
        double nota;
        int menosDe50 = 0;
        int de50A70 = 0;
        int de70A80 = 0;
        int de80Mas = 0;
        int estudiantes = 1;
        do {
            do{
                System.out.println("Ingrese la calificación del estudiante número " + estudiantes + "( Las notas van de 1 a 100): ");
            nota = in.nextDouble();
                if (nota < 1 && nota > 100){
                System.out.println("Error. Las notas deben ser entre 1 y 100.");
                }
            }while (!(nota < 1 && nota > 100));
         estudiantes = estudiantes +1;
            if (nota < 50){
                menosDe50 = menosDe50 + 1;
            }
            else if (nota >= 50 && nota < 70){
                de50A70 = de50A70 + 1;
            }
            else if (nota >=70 && nota < 80){
                de70A80 = de70A80 + 1;
            }
            else if (nota >= 80){
                de80Mas = de80Mas + 1;
            }
            System.out.println("Calificaciones de menos de 50: " + menosDe50);
       System.out.println("Calificaciones entre 50 y menos de 70: " + de50A70);
       System.out.println("Calificaciones entre 70 y menos de 80: " + de70A80);
       System.out.println("Calificaciones de 80 o más: " + de80Mas);
 
       }while (estudiantes <= 10);
 
    }

PseInt tiene una herramienta para exportar a java y decidí probarla a ver qué error estaba cometiendo pero me dio un resultado parecido (La única diferencia creo que es que yo usé scanner para capturar los datos).
PD: Me doy cuenta que puse
1
if (nota < 1 && nota > 100){
en lugar de || que sería lo correcto, pero estaba probando porque con OR al meter un valor no válido me lanza los resultados y finaliza el proceso.
Les agradecería enormemente cualquier ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Julio Cesar

[Ayuda] Programa funciona en pseudocódigo pero no en java

Publicado por Julio Cesar (30 intervenciones) el 28/04/2015 16:46:52
aqui tienes un ejemplo de lo que quieres hacer usando solo un do while, la variable estudiantes se inicializa en cero para que pases las notas de los diez estudiantes

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public static void main(String[] args) {
    // TODO Auto-generated method stub
 
    Scanner in = new Scanner(System.in);
 
    double nota;
    int menosDe50 = 0;
    int de50A70 = 0;
    int de70A80 = 0;
    int de80Mas = 0;
    int estudiantes = 0;
 
    do {
 
        System.out.println("Ingrese la calificación del estudiante número "
                + (estudiantes+1) + "( Las notas van de 1 a 100):");
        nota = in.nextDouble();
        if (nota > 1 && nota <= 100) {
            estudiantes++;
            if (nota < 50) {
                menosDe50++;
            } else if (nota >= 50 && nota < 70) {
                de50A70++;
            } else if (nota >= 70 && nota < 80) {
                de70A80++;
            } else if (nota >= 80) {
                de80Mas++;
            }
        }
 
    } while (estudiantes != 10);
 
    System.out.println("Calificaciones de menos de 50: " + menosDe50);
    System.out.println("Calificaciones entre 50 y menos de 70: " + de50A70);
    System.out.println("Calificaciones entre 70 y menos de 80: " + de70A80);
    System.out.println("Calificaciones de 80 o más: " + de80Mas);
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Jhon

[Ayuda] Programa funciona en pseudocódigo pero no en java

Publicado por Jhon (14 intervenciones) el 28/04/2015 19:00:27
Julio, muchas gracias por contestar. Tú código me ha enseñado algunas cosas sobre prolijidad.
No sé si tú pudiste probar a ejecutarlo pero a mí me pasa lo mismo que con el mío: Sea o no válida la nota vuelve a preguntarme una y otra vez por la calificación del estudiante 1.

Entiendo tu código y no veo por qué ocurre. ¿Alguna idea?

Muchas gracias por tu tiempo y ayuda.

ACTUALIZO:

Olvida lo anterior. Ya vi qué ocurre con el tuyo. Funciona perfecto, simplemente hay que hacerle una pequeña modificación porque toma 1 como no válido. Cuando yo hice la prueba con el tuyo sólo oprimí uno y otra vez para probar los válidos.
Ya lo modifico. Eres un crack.

Nuevamente te agradezco el tiempo dedicado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Julio Cesar

[Ayuda] Programa funciona en pseudocódigo pero no en java

Publicado por Julio Cesar (30 intervenciones) el 28/04/2015 19:11:46
hola,

existe una primera condici'on que dice que las notas van de 1 a 100, al entrar la nota del estudiante n, si no se cumple que esta entre 1 y 100, no se incrementa la variable estudiantes y no realiza ninguna otra operacion, solo vuelve a repetir el mensaje hasta que insertes un valor correcto y continua hasta que estudiantes sea igual a 10.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Jhon

[Ayuda] Programa funciona en pseudocódigo pero no en java

Publicado por Jhon (14 intervenciones) el 28/04/2015 20:49:51
Sí, gracias. Ya va perfecto.
Te debo una cerveza ;)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar