Foro de elhacker.net

Programación => Java => Mensaje iniciado por: ale95121 en 24 Marzo 2014, 03:20 am



Título: Arreglo de java
Publicado por: ale95121 en 24 Marzo 2014, 03:20 am
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");
}
}
}


Título: Re: Arreglo de java
Publicado por: Mitsu en 24 Marzo 2014, 15:30 pm
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
  1. Integer[] numeros = {3,25,9,74,0,46,88,64};
  2. int i = Arrays.asList(numeros).indexOf(3); // convierte el array a lista y obtiene el indice del objeto pasado por parametro
  3.  

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
  1. for (int contador=0;contador<arreglo.length;contador++)
  2. System.out.printf("%5d%8d\n", contador, arreglo[contador]);
  3. }

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
Código:
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.


Título: Re: Arreglo de java
Publicado por: ale95121 en 24 Marzo 2014, 16:34 pm
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.


Título: Re: Arreglo de java
Publicado por: Mitsu en 24 Marzo 2014, 16:58 pm
Mete mano al código sin miedo a equivocarte, así es como se aprende.

Código
  1. public class ArrayTest {
  2.  
  3. private Integer[] arreglo = {1,2,3,4,5,6,7,8,9,10};
  4.  
  5. public static void main(String[] args) {
  6. // TODO Auto-generated method stub
  7. ArrayTest test = new ArrayTest();
  8. int opc = Integer.parseInt(JOptionPane.showInputDialog("Ingresa el numero a buscar"));
  9. int posicion = test.obtenerIndexPorValor(opc);
  10. if(posicion != -1)
  11. System.out.println("Numero encontrado en la posicion:\t"+posicion);
  12. else System.out.println("Numero no encontrado.");
  13. }
  14.  
  15. public int obtenerIndexPorValor(int valor) {
  16. int posicion = Arrays.asList(arreglo).indexOf(valor);
  17.  
  18. return posicion;
  19. }
  20.  
  21. }

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


Título: Re: Arreglo de java
Publicado por: ale95121 en 24 Marzo 2014, 17:35 pm
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.


Título: Re: Arreglo de java
Publicado por: Mitsu en 24 Marzo 2014, 17:42 pm
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.


Título: Re: Arreglo de java
Publicado por: 1mpuls0 en 24 Marzo 2014, 17:44 pm
En mi opinion no recomiendo que el chico utilice
Código
  1. 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
  1. if(arreglo.length>=opc){
  2. System.out.printf("El numero: "+opc+" se encuentra en el arreglo ");
  3.  
? ._.

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
  1. 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.



Título: Re: Arreglo de java
Publicado por: Mitsu en 24 Marzo 2014, 17:51 pm
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.


Título: Re: Arreglo de java
Publicado por: ale95121 en 24 Marzo 2014, 18:04 pm
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


Título: Re: Arreglo de java
Publicado por: 1mpuls0 en 24 Marzo 2014, 18:05 pm
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.

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

Código:
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.


Título: Re: Arreglo de java
Publicado por: ale95121 en 24 Marzo 2014, 18:39 pm
hola Darhius mira asi es como me queda mi codigo:

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};

for (int contador=0;contador<arreglo.length;contador++)

int opc=Integer.parseInt(JOptionPane.showInputDialog("Dame un numero"));

if(arreglo[contador]==opc){

System.out.printf("El numero se encuentra en el arreglo");

}

else{

System.out.printf("EL numero no se encuentra en el arreglo");

}

}



Título: Re: Arreglo de java
Publicado por: 1mpuls0 en 24 Marzo 2014, 18:52 pm
Hola.

Vas bien...

Solo que no puedes pedir el dato cada vez que incremente el contador.

Código
  1. for (int contador=0;contador<arreglo.length;contador++)
  2. int opc=Integer.parseInt(JOptionPane.showInputDialog("Dame un numero"));

Lo que hace esa instrucciones es  mas o menos así.

1. inicia el contador en 0
2. compara si contador es menor que el tamaño del arreglo.
3. Si es menor entra al bloque.
4. Pide un numero y hace todo lo demás
5. incrementa el contador

6. contador es igual a 1.
2. compara si contador es menor que tamaño de arreglo
...
4. VUELVE  a pedir otra vez un numero.
....

* Lo que necesitamos es que pida solamente una vez el número, así que necesitas sacar tu petición del número del for.

Cuando por fin encuentre el número hay que terminar el ciclo para que ya que no siga recorriendolo, hay varias formas.
utilizando la palabra reservada break (muchos no la recomiendan pero es lo más usado xD), igualando el contador al tamaño del arreglo, y utilizando banderas booleanas, por ahora solo te recomiendo el break.

Por cierto, aquí donde escrbibes el mensaje hay un combobox (select) que dice "GeSHi" busca una opción que dice "Java" y ahí colca el código (solo el código de java)


Título: Re: Arreglo de java
Publicado por: ale95121 en 24 Marzo 2014, 19:48 pm
Código
  1. [/import javax.swing.JOptionPane;
  2. public class InicArreglo{
  3. public static void main (String args[]){
  4. int arreglo[]={1,2,3,4,5,6,7,8,9,10};
  5. for (int contador=0;contador<=10;contador++);{
  6. int opc=Integer.parseInt(JOptionPane.showInputDialog("Dame un numero"));
  7. break;
  8. if(arreglo[contador]==opc){
  9. System.out.printf("El numero: "+opc+" se encuentra en el arreglo");
  10. }else{
  11. System.out.printf("EL numero: "+opc+" no se encuentra en el arreglo");
  12. }
  13. }
  14. }
  15. }]
  16.  
  17. asi es como me dijiste que saque el numero para contarlo de 0 y el break para detenerlo??


Título: Re: Arreglo de java
Publicado por: 1mpuls0 en 24 Marzo 2014, 19:51 pm
Hola.
Como te comenté antes, solo el código colocalo en geshi.

Creo que no estás prestando mucha atención a lo que he escrito, re-leelo.

esta parte está incorrecta, contador<=10, vas a tener un nullpointerexception.

el break lo tienes que hacer cuando hayas encontrado el numero.
el break sirve para romper el ciclo.

edito:
correlo tu mismo para que veas lo que hace y analices entre lo que hace y lo que escribes en tu código.

Saludos!


Título: Re: Arreglo de java
Publicado por: Mitsu en 24 Marzo 2014, 20:17 pm
  • Break (Romper): Sirve para romper una condición. Se usa para romper las condiciones de los bucles y terminar el mismo.
  • Arrays: Los arreglos son una estructura de datos cuya finalidad es almacenar uno o muchos valores de un mismo tipo (salvo se declare como un array de Object). Los arrays son estáticos, es decir, tienes que darle un tamaño y éste no variará. En Java y muchos otros lenguajes, los arreglos empiezan desde la posición cero. Ej:

    Código
    1. String[] array = new int[5];
    2. array[0] = "valor 1";
    3. array[1] = "valor 2";
    4. array[2] = "valor 3";
    5. array[3] = "valor 4";
    6. array[4] = "valor 5";

    La manera de trabajar de un bucle es por medio de una condición. En el caso del loop for, la sintaxis es así:

    Código
    1. for (variable de control; condicion; incremento/decremento) {
    2.    // acciones aqui
    3. }

    Supongamos que variable de control es un entero llamado i que vale 0. Pensamos recorrer un array, entonces, la condición será:

    Citar
    mientras que i sea menor al tamaño del array

    Y funciona así:

    Código
    1. for(int i=0; i<arreglo.length; i++) {
    2. // i(0) es menor al tama&#241;o del array ? (5) Si. Entonces i incrementa en 1 y vuelve a la condicion.
    3.        // i(1) es menor a 5? Si. Entonces incrementa en 1 y vuelve a la condicion.
    4.        // .... asi con 2,3,4 e incrementa en 1
    5.        // i(5) es menor a 5? No. Sale del bucle y
    6. }
    7. // continua aqui


    Existen dos maneras de acceder a un array: La manera tradicional con un loop for, y con un foreach:

    For: Ésta forma es ideal cuando vamos a trabajar con los subíndices del array:
    Código
    1. for(int i=0; i<arreglo.length; i++) {
    2. // operaciones aqui
    3. }

    Foreach: Ésta nueva forma es ideal cuando no necesitamos trabajar con los subíndices, si no con los elementos del array:
    Código
    1. int suma = 0;
    2. for(int elementoActual : array o coleccion de enteros) {
    3. suma += elementoActual;
    4. }

    El parámetro de la derecha, es el array o lista que se va a recorrer. Hay que tener en cuenta el tipo de datos que almacena este array o colección, ya que el parámetro de la izquierda representa el elemento actual de la lista en la iteración, por lo que debe ser del mismo tipo.

    Espero hayas entendido, porque he tratado de ser lo más explícito posible. Salu2.


Título: Re: Arreglo de java
Publicado por: ale95121 en 24 Marzo 2014, 20:21 pm
Disculpa en verdad le pongo demasiada atencion pero como podras ver mi logica es algo lenta disculpa creo que ya te entendi hasta el for mira (por favor tenme paciencia);
Código
  1. [import javax.swing.JOptionPane;
  2. public class InicArreglo{
  3. public static void main (String args[]){
  4. int arreglo[]={1,2,3,4,5,6,7,8,9,10};
  5. int opc=Integer.parseInt(JOptionPane.showInputDialog("Dame un numero"));
  6. for(int indice=0; indice<=arreglo.length; indice++);
  7. if(opc==arreglo[indice]){
  8. System.out.println("El numero se encuentra en el arreglo");
  9. break;
  10. }else{
  11. System.out.println("El numero no se encuentra en el arreglo");
  12. }
  13. }
  14. }/code]


Título: Re: Arreglo de java
Publicado por: ale95121 en 24 Marzo 2014, 20:30 pm
mitsu gracias por la informacion me ah quedado un poco mas claro para que es el for pero en la lista que pones de el arreglo ya lo habia querido hacer asi antes pero marca error en los corchetes a que se debera?
Citar
[String[] array = new int[5];
arreglo[0] = "valor 1";
arreglo[1] = "valor 2";
arreglo[2] = "valor 3";
arreglo[3] = "valor 4";
arreglo[4] = "valor 5";]


Título: Re: Arreglo de java
Publicado por: Mitsu en 24 Marzo 2014, 20:32 pm
Me equivoqué con el nombre del array nada más. Verifica nuevamente el código que puse.


Título: Re: Arreglo de java
Publicado por: 1mpuls0 en 24 Marzo 2014, 20:43 pm
Disculpa en verdad le pongo demasiada atencion pero como podras ver mi logica es algo lenta disculpa creo que ya te entendi hasta el for mira (por favor tenme paciencia);
Código
  1. [import javax.swing.JOptionPane;
  2. public class InicArreglo{
  3. public static void main (String args[]){
  4. int arreglo[]={1,2,3,4,5,6,7,8,9,10};
  5. int opc=Integer.parseInt(JOptionPane.showInputDialog("Dame un numero"));
  6. for(int indice=0; indice<=arreglo.length; indice++);
  7. if(opc==arreglo[indice]){
  8. System.out.println("El numero se encuentra en el arreglo");
  9. break;
  10. }else{
  11. System.out.println("El numero no se encuentra en el arreglo");
  12. }
  13. }
  14. }/code]

Bravo! ves como si puedes, con un poco de ayuda.
Solo falta algo... suponiendo que se recorre todo el arreglo

Código
  1. <=arreglo.length
  2.  

al entrar en esta parte
Código
  1. arreglo[indice]
  2.  

verifica esa parte :) y ya estuvo


Título: Re: Arreglo de java
Publicado por: ale95121 en 24 Marzo 2014, 21:07 pm
pero en el break me da un error y el if tambien mira y el if entonces le tengo que poner arreglo[indice].length??;
Código
  1. [InicArreglo.java:7: error: cannot find symbol
  2. if(opc==arreglo[indice]){
  3.                ^
  4.  symbol:   variable indice
  5.  location: class InicArreglo
  6. InicArreglo.java:9: error: break outside switch or loop
  7. break;
  8. ^
  9. 2 errors
  10. /code]


Título: Re: Arreglo de java
Publicado por: Mitsu en 24 Marzo 2014, 21:14 pm
Éste es tu error, estás colocando punto y coma luego del for. Si colocas un punto y coma seguido de un loop (menos do-while) significa que ese loop es un loop vacío y el compilador lo ignora.

Código
  1. for(int indice=0; indice<=arreglo.length; indice++);

Por lo que if, en realidad no está dentro de ningún loop, y la variable 'indice' no existe, ya que solo existe dentro del loop. Solo puedes usar break cuando estás dentro de un loop.


Título: Re: Arreglo de java
Publicado por: ale95121 en 24 Marzo 2014, 22:12 pm
ya me corre pero cuando le doy el 1 me dice en numero se encuentra en el arreglo 1
cuando le doy el 2 me dice el numero no se encuentra en el arreglo
el numero se encuentra en la posicion 2,
como le hago para que se deje de reptir el mensaje el numero de veces que yo le de el numero? por ejemplo si le doy el 5 me dice 5 veces que no se encuentra en el arreglo y despues me imprime que se encuentra en la posicion 5.
como lo puedo solucionar?


Título: Re: Arreglo de java
Publicado por: Mitsu en 24 Marzo 2014, 22:31 pm
Eso pasa porque todo lo haces dentro del loop. Acostúmbrate a usar banderas, ésto no es más que una variable (normalmente booleana) que actúa como un informante. Si ocurre un determinado caso, la bandera va a guardar un valor, por ejemplo true, ésto dentro del loop.

Luego, fuera del loop analizas la bandera, si es true haces algo, si no, haces otra cosa.

Código
  1. public static void main(String[] args) {
  2. //launch(args);
  3. int[] array = {0,1,2,3,4,5,6,7,8,9,10};
  4. int numero = Integer.valueOf(javax.swing.JOptionPane.showInputDialog("Ingrese el numero a buscar"));
  5. boolean encontrado = false; // bandera que informa si se ha encontrado el numero
  6. int posicion = 0; // posicion del numero si se encuentra
  7. for(short i=0; i<array.length; i++) {
  8. if(numero == array[i]) {
  9. encontrado = true; // informa que se encontro el numero en
  10. posicion = i; // esta posicion
  11. }
  12. }
  13. // verifica el valor de 'encontrado' que sera true si se ha encontrado
  14. // el numero, de lo contrario sera false.
  15. if(encontrado)
  16. System.out.println("Numero encontrado en la posicion:\t"+posicion);
  17. else
  18. System.out.println("Numero no encontrado.");
  19. System.exit(0); // termina el programa
  20. }


Título: Re: Arreglo de java
Publicado por: ale95121 en 25 Marzo 2014, 14:29 pm
Hola genial ya me funciona perfectamente Gracias a ambos espero poder contar con ustedes mas adelante, espero y mi profesora ahora no me ponga peros por no entenderle a el programa.
Nuevamente gracias Darhius, gracias Mitsu.