Java - insertar numero en arreglo ordenado

 
Vista:
sin imagen de perfil
Val: 11
Ha aumentado su posición en 3 puestos en Java (en relación al último mes)
Gráfica de Java

insertar numero en arreglo ordenado

Publicado por flor (4 intervenciones) el 15/05/2021 18:31:56
Hola! Tengo un problema, me piden insertar un numero ingresado por el usuario en la posición correcta en un arreglo ordenado, y se me inserta siempre en la posición 0. ¿Podrían guiarme para solucionar esto? Muchas gracias!!
Consigna: Hacer un programa que dado un arreglo ordenado creciente de enteros de tamaño 10 que se encuentra precargado, solicite al usuario un numero entero y lo inserte en el arreglo manteniendo su orden. Para ello tendrá que realizar un corrimiento a derecha (se pierde el último valor del arreglo) y colocar el numero en el arreglo en la posición indicada.

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
50
51
52
53
54
55
56
57
58
59
60
61
62
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class ejercicio_7 {
	public static int MAX=10;
	public static int MAXVALOR=20;
	public static int MINVALOR=1;
 
	public static void main(String[] args) {
		int [] arrint= {2,5,6,7,9,10,12,15,16,19};
		int numero=1, pos=0;
		BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));
		try {
			if ((MINVALOR<=numero)&&(numero<=MAXVALOR)) {
 
		imprimir_arreglo_ord(arrint);
		System.out.println("Ingrese un numero entero de 1 a 20: ");
		numero=Integer.valueOf(entrada.readLine());
         buscar_posicion(arrint, numero, pos);
 
 
 
		corrimiento_der(arrint, pos);
		arrint[pos]=numero;
		imprimir_arreglo_ord(arrint);
 
	}
			else {
				System.out.println("El numero ingresado es invalido");
			}
		}
		catch (Exception exc) {
			System.out.println(exc);
		}
 
}
 
	public static void imprimir_arreglo_ord(int [] arr) {
		for (int pos = 0; pos < MAX; pos++){
			System.out.println("nombre_arreglo["+pos+"]=>: "+arr[pos]);
			}
	}
	public static int buscar_posicion(int[]arr, int numero, int pos) {
 
		while ((arr[pos]<numero)&&(pos<MAX)) {
			pos++;
 
 
		}
 
		return pos;
 
	}
 
 
	public static void corrimiento_der(int[] arr, int pos) {
		int indice=MAX-1;
		while (indice>pos) {
			arr[indice]=arr[indice-1];
			indice--;
	}
	}
}
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 Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

insertar numero en arreglo ordenado

Publicado por Kabuto (978 intervenciones) el 15/05/2021 23:04:24
No estás recogiendo el valor que te devuelve este método:
1
buscar_posicion(arrint, numero, pos);

La variable pos, al ser de tipo int primitivo, el método lo recibe "por valor" y no "por referencia".
Esto significa que aunque dentro del método modificas el valor de pos, en realidad no estás modificando la variable pos.

Aunque se llamen igual, el pos con el que trabajas DENTRO de este método, es diferente del pos que le has pasado desde FUERA
1
2
3
4
5
6
7
8
9
public static int buscar_posicion(int[]arr, int numero, int pos) {
 
		while ((arr[pos]<numero)&&(pos<MAX)) {
			pos++;
		}
 
		return pos;
 
	}


Cuando el método termina, pos sigue teniendo el valor inicial de 0. Lo que ha ocurrido DENTRO del método, no tiene ningún efecto FUERA.

Ya que has hecho que el método retorne el valor del pos de DENTRO, asegúrate de que lo recoja el pos de FUERA:
1
pos = buscar_posicion(arrint, numero, pos);
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