Arreglo de java

Iniciado por ale95121, 24 Marzo 2014, 03:20 AM

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

ale95121

Hola queria ver quien me puede ayudar en este arreglo para que a la hora de imprimr el numero de el arreglo me de la posicion

import javax.swing.JOptionPane;
public class InicArreglo{
public static void main (String args[]){
int arreglo[]={1,2,3,4,5,6,7,8,9,10};
int opc=Integer.parseInt(JOptionPane.showInputDialog("Dame un numero"));
if(arreglo.length>=opc){
System.out.printf("El numero: "+opc+" se encuentra en el arreglo ");
System.out.printf("En la posicion: "+arreglo.length);
System.out.printf("\n%s%8s\n", "Indice", "valor");
for (int contador=1;contador<=arreglo.length;contador++)
System.out.printf("%5d%8d\n", contador, arreglo[contador]);
}
else{
System.out.printf("EL numero: "+opc+" no se encuentra en el arreglo");
}
}
}

Mitsu

#1
Hola. Cuando coloques un código utiliza las etiquetas de código GeShi (todo foro las tiene).

Para que funcione debes usar los Wrapper si quieres usar datos primitivos, en tu caso debes de usar la wrapper de int, que es la clase Integer.

Código (=java) [Seleccionar]

Integer[] numeros = {3,25,9,74,0,46,88,64};
int i = Arrays.asList(numeros).indexOf(3); // convierte el array a lista y obtiene el indice del objeto pasado por parametro


El método indexOf(Object c) de la interface List, recibe un Object, es decir cualquier tipo de dato. Si le pasamos un 3 en lugar de un new Integer(3) la JVM hace un upcasting y lo convierte a Integer para que funcione.

PD: Los arrays y las colecciones como Listas, inician de 0 -> n. Por lo que el for que has hecho está mal. El índice debe contar desde 0:

Código (=java) [Seleccionar]

for (int contador=0;contador<arreglo.length;contador++)
System.out.printf("%5d%8d\n", contador, arreglo[contador]);
}


Si dejas el for así, te dará una excepción de tipo ArrayIndexOutOfBoundsException que literalmente significa que se ha querido acceder al array mediante un índice que está fuera de sus límites.

Explicación; Cuando i vale = valor -> valor obtenido del array

i irá desde 1 a 9. Recorrerá 9 posiciones.

numeros[0] -> 1
i = 1 -> 2
i = 2 -> 3
i = 3 -> 4
i = 4 -> 5
i = 5 -> 6
i = 7 -> 8
i = 8 -> 9
i = 9 -> ? -> ArrayIndexOutOfBoundsException


Saludos.

ale95121

Hola mcuhas gracias por responder, solo que me has dejado un poco mas confudido no se si podrias decirme como queda en concreto el codigo ?? de antemano gracias por tu atencion.

Mitsu

#3
Mete mano al código sin miedo a equivocarte, así es como se aprende.

Código (=java) [Seleccionar]

public class ArrayTest {

private Integer[] arreglo = {1,2,3,4,5,6,7,8,9,10};

public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayTest test = new ArrayTest();
int opc = Integer.parseInt(JOptionPane.showInputDialog("Ingresa el numero a buscar"));
int posicion = test.obtenerIndexPorValor(opc);
if(posicion != -1)
System.out.println("Numero encontrado en la posicion:\t"+posicion);
else System.out.println("Numero no encontrado.");
}

public int obtenerIndexPorValor(int valor) {
int posicion = Arrays.asList(arreglo).indexOf(valor);

return posicion;
}

}


PD: Si tu duda fue despejada, por favor marca el tema como solucionado. Salu2.

ale95121

Muchisimas gracias nuevamente en verdad me sirvio de mucho este programa me a traido dolores de cabeza no habia podido solucionarlo gracias, ya solo marca un error en la linea 16 espero poder solucionarlo gracias nuevamente.

Mitsu

El código que te puse antes tenía un ligero error (cosas que pasan cuando codeas en un editor de texto xD). Prueba el código nuevamente, debe correr sin problema alguno.

Saludos y suerte con tu aprendizaje.

1mpuls0

En mi opinion no recomiendo que el chico utilice
Código (java) [Seleccionar]
Arrays.asList(numeros).indexOf(3)

Se nota que está aprendiendo y es mejor que utilice ciclos, bucles, loops o como gusten llamarle para que así vaya desarrollando más su lógica.

Con solo ver su código se nota que no tiene idea de que está haciendo.

Código (java) [Seleccionar]

if(arreglo.length>=opc){
System.out.printf("El numero: "+opc+" se encuentra en el arreglo ");

? ._.

Eso no tiene mucho sentido, bueno no puedes generalizar, porque estás diciendo que si el tamaño del arreglo es mayor o igual a un número ingresado entonces si se encuentra en el arreglo.

arreglo.length, lo que hace es retornar el tamaño del arreglo en este caso el tamaño sería 9.

Qué pasa si yo ingreso el número 0?, segun tu condición
si(9>=0)
se encuentra en el arreglo y eso no es verdad.

Lo que debes hacer es mediante un ciclo for, while, do-while (para este caso recomiendo un for) es recorrer todo el arreglo.
y dentro de ese for ir comparando con tu dato ingresado

Por cierto en Java y en muchos otros lenguajes los indices de los arreglos inician en 0.
Esto no es correcto (para este caso) para otro tipo de problemas puedes inicializarlo de acuerdo a tus necesidades)
Código (java) [Seleccionar]
for (int contador=1

dato = lee_valor
para(indice = 0, indice<tamano_arreglo, incrementa_indice)
 si dato = arreglo(indice)
 imprime "si se encuentra en el arreglo"
  rompre_ciclo


Espero pueda servirte.


Saludos.

abc

Mitsu

Tienes toda la razón Darhius. Lo que intenté hacer en el código que puse, fue mantener todo lo más simple posible, pero es probable que el autor del tema se haya confundido (si es así, discúlpame). Como dice Darhius, puedes usar loops para reemplazar Arrays.asList(arreglo).indexOf(3). Salu2.

ale95121

Hola buenos dias, tienes toda la razon dariuh no entiendo mucho o nada de los arreglos quisiera me pudieras orientar tambien en el codigo ya que se me hace mas facil aprender de un codigo que de pseudocodigo.
mitsu no hay ningun problema me sirvio tu codigo para poner mas empeño en los codigos y saber donde es el detalle del problema.
muchas gracias de antemando un cordial saludos a ambos

1mpuls0

#9
Hola @Mitsu no te disculpes, al contrario se agradecen las buenas intenciones.
Tal vez en un futuro, pueda implementar como lo mencionas para ahorrar tiempos.

Por cierto esto fue sin la intención de ofender.

Cita de: 1mpuls0 en 24 Marzo 2014, 17:44 PM
Con solo ver su código se nota que no tiene idea de que está haciendo.

@ale95121
Lo que dejé fue un pseudocódigo o un intento de


dato = lee_valor //lees tu dato
para(indice = 0, indice<tamano_arreglo, incrementa_indice) //realizas el ciclo para ir recorriendo el arreglo
 si dato == arreglo(indice) //realizas comparación
 imprime "si se encuentra en el arreglo" //si son iguales muestras el mensaje.
 rompre_ciclo //si son iguales, además rompes el ciclo para que ya no continue recorriendo el arreglo.


Intenta hacer el código, si te quedas en algo, comentalo aquí mismo, para eso estamos para ayudarnos a disipar las dudas.
abc