Java - Saber si está ordenado o no

 
Vista:
sin imagen de perfil
Val: 31
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

Saber si está ordenado o no

Publicado por Joker (27 intervenciones) el 25/10/2019 13:19:31
Me piden esto:
Se desea codificar en Java un programa que nos permita introducir por teclado un vector de 10 números y que posteriormente nos indique si el vector está ordenado de menor a mayor o no.


La cosa es que si meto una cadena: 1 2 3 4 5 6 8 7 9 10
me sale que está ordenado cuando realmente tendría que salir que está desordenado. Alguien que sepa como puedo corregirlo? No consigo sacarlo...



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
package Pseudo8;
import java.util.Scanner;
 
public class ListaOrdenada {
	public static void main (String[] args) {
 
		Scanner sc = new Scanner (System.in);
		int[] lista = new int [10];
		int i;
		boolean ordenado=true;
 
		System.out.println ("Introduce los números del vector: ");
		for (i=0; i < 10; i++) {
			System.out.print (" - Introduce un valor en " + (i+0) + ": ");
			lista[i]=sc.nextInt();
 
		}
 
		do{
			for (i=0; i<9; i++) {
				if (lista[1] > lista[i+1])
					ordenado = false;
				if (lista[1] < lista[i+1])
					ordenado = true;
			}
		} while (i<9);
 
 
 
 
 
 
		if (ordenado)
			System.out.println ("La lista está ordenada");
		 else
			System.out.println ("La lista está desordenada");
	}
}
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 Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Saber si está ordenado o no

Publicado por Rodrigo (623 intervenciones) el 25/10/2019 14:59:24
Que tal suponer que el arreglo esta ordenado y solo cambiar a false si no esta?
Nunca deberias actualizar de vuelta a true esa variable, porque asumes que esta asi y si alguna vez se convirtio en false, no importa el resto, por lo que podria salir del ciclo en ese momento (break podria usarse en ese momento)

El do-while alrededor del for no parece estar bien. Parece mejor solo un for con indice y comparar el arreglo en la posicion i y la posicion i+1.
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
sin imagen de perfil
Val: 31
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

Saber si está ordenado o no

Publicado por Joker (27 intervenciones) el 25/10/2019 16:17:10
Gracias por la ayuda!
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 Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

[CORREGIDO] Saber si está ordenado o no

Publicado por Billy Joel (876 intervenciones) el 25/10/2019 15:56:19
Acá está el código corregido
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
import java.util.Scanner;
 
public class ListaOrdenada {
 
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int[] lista = new int[10];
        int i;
        boolean ordenado = true;
        System.out.println("Introduce los números del vector: ");
        for (i = 0; i < 10; i++) {
            System.out.print(" - Introduce un valor en " + (i + 0) + ": ");
            lista[ i ] = sc.nextInt();
        }
        for (i = 0; i < lista.length; i++) {
            if (i + 1 < lista.length) {
                if (lista[ i ] > lista[i + 1]) {
                    ordenado = false;
                    break;
                }
            }
        }
        if (ordenado) {
            System.out.println("La lista está ordenada");
        } else {
            System.out.println("La lista está desordenada");
        }
    }
}

Se parete de la idea que la variable ordenado se encuentre en true, al recorrer los elementos y al evaluar la condición si no se cumple entonces se le asigna el valor a ordenado de false y se rompe el bucle con un break;

Saludos,
Billy Joel
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
sin imagen de perfil
Val: 31
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

[CORREGIDO] Saber si está ordenado o no

Publicado por Joker (27 intervenciones) el 25/10/2019 16:16:49
Gracias!

Habría alguna otra forma de hacerlo sin utilizar el break?
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 Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

[CORREGIDO] Saber si está ordenado o no

Publicado por Billy Joel (876 intervenciones) el 25/10/2019 16:27:58
Si claro....
El break se utiliza para salir bucles (ciclos), pero los bucles siempre tienen una condición que los hace repetir.

Si no quieres usar break entonces puedes hacer se cumpla la condición del bucle.
En otras palabras cambia el break por:
1
i = lista.length;

Y listo!!
Saludos,
Billy Joel
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
sin imagen de perfil
Val: 31
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

[CORREGIDO] Saber si está ordenado o no

Publicado por Joker (27 intervenciones) el 25/10/2019 16:29:45
Perfecto! Muchas gracias!
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 Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

[CORREGIDO] Saber si está ordenado o no

Publicado por Rodrigo (623 intervenciones) el 25/10/2019 20:29:51
Puesto que solo asignas la variable en caso inadecuado, no necesitas realmente salir del ciclo en ese momento. El ciclo llegara hasta el final del arreglo y al salir tendras la variable actualizada.

Tampoco es necesario preguntar en cada vuelta del for si i+1 es menor que el largo, basta hacer que el ciclo termine 1 antes.
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

[CORREGIDO] Saber si está ordenado o no

Publicado por xeomikus (1 intervención) el 23/12/2020 19:45:28
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
39
40
41
42
43
44
45
46
47
48
49
public class ExercicioOrdenarMatriz {
 
	public static void main(String[] args) {
 
		Scanner sc = new Scanner(System.in);
 
		int[] lista = new int[10];
 
		int i;
 
		boolean ordenado = true;
 
		System.out.println("Introduce los números del vector: ");
 
		for (i = 0; i < lista.length; i++) {
 
			System.out.print(" - Introduce un valor en " + (i + 0) + ": ");
 
			lista[i] = sc.nextInt();
 
		}
		sc.close();
 
 
		i = 0;
		int aux = lista[0];
		while (ordenado && i < lista.length - 1) {
			i++;
			if (aux < lista[i]) {
				ordenado = false;
 
			}
			aux = lista[i];
 
		}
 
		if (ordenado)
 
			System.out.println("La lista está ORDENADA DE MAYOR A MENOR");
 
		else
 
			System.out.println("La lista NO está ORDENADA DE MAYOR A MENOR");
 
 
 
	}
 
}
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

[CORREGIDO] Saber si está ordenado o no

Publicado por eiber sierra (1 intervención) el 21/04/2021 02:04:10
Eso es un array o arreglo?
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