¿Cómo encontrar el índice de un elemento en una matriz int?

¿Cómo puedo encontrar un índice de un cierto valor en una matriz Java de tipo int ?

Intenté usar Arrays.binarySearch en mi matriz no ordenada, solo a veces da la respuesta correcta.

 Integer[] array = {1,2,3,4,5,6}; Arrays.asList(array).indexOf(4); 

Tenga en cuenta que esta solución es segura para los hilos porque crea un nuevo objeto de tipo Lista.

Además, no desea invocar esto en un bucle o algo así ya que estaría creando un nuevo objeto cada vez

Otra opción si está utilizando Guava Collections es Ints.indexOf

 // Perfect storm: final int needle = 42; final int[] haystack = [1, 2, 3, 42]; // Spoiler alert: index == 3 final int index = Ints.indexOf(haystack, needle); 

Esta es una gran opción cuando el espacio, el tiempo y la reutilización del código son muy importantes. También es muy escueto.

Una mirada a la API y dice que primero tienes que ordenar la matriz

Asi que:

 Arrays.sort(array); Arrays.binarySearch(array, value); 

Si no desea ordenar la matriz:

 public int find(double[] array, double value) { for(int i=0; i 

Copia este método en tu clase

  public int getArrayIndex(int[] arr,int value) { int k=0; for(int i=0;i 

Llame a este método con pass two perameters Array y value y almacene su valor de retorno en una variable entera.

 int indexNum = getArrayIndex(array,value); 

Gracias

Puede convertirlo en una lista, luego use el método indexOf:

 Array.asList(array).indexOf(1); 

http://download.oracle.com/javase/1.5.0/docs/api/java/util/Arrays.html#asList(T …) http://download.oracle.com/javase/1.5.0 /docs/api/java/util/List.html#indexOf(java.lang.Object )

Debe ordenar los valores antes de usar la búsqueda binaria. De lo contrario, la forma manual es probar todas las entradas en su pestaña.

 public int getIndexOf( int toSearch, int[] tab ) { for( int i=0; i< tab.length ; i ++ ) if( tab[ i ] == toSearch) return i; return -1; }//met 

Un método alternativo podría ser mapear todos los índices para cada valor en un mapa.

 tab[ index ] = value; if( map.get( value) == null || map.get( value) > index ) map.put( value, index ); 

y luego map.get (value) para obtener el índice.

Saludos, Stéphane

@pst, gracias por tus comentarios. ¿Puedes publicar otro método alternativo?

Sencillo:

 public int getArrayIndex(int[] arr,int value) { for(int i=0;i 

Puede recorrer el conjunto hasta encontrar el índice que está buscando, o utilizar una List lugar. Tenga en cuenta que puede transformar la matriz en una lista con asList() .

 /** * Method to get the index of the given item from the list * @param stringArray * @param name * @return index of the item if item exists else return -1 */ public static int getIndexOfItemInArray(String[] stringArray, String name) { if (stringArray != null && stringArray.length > 0) { ArrayList list = new ArrayList(Arrays.asList(stringArray)); int index = list.indexOf(name); list.clear(); return index; } return -1; } 

Puedes hacerlo así:

  public class Test { public static int Tab[] = {33,44,55,66,7,88,44,11,23,45,32,12,95}; public static int search = 23; public static void main(String[] args) { long stop = 0; long time = 0; long start = 0; start = System.nanoTime(); int index = getIndexOf(search,Tab); stop = System.nanoTime(); time = stop - start; System.out.println("equal to took in nano seconds ="+time); System.out.println("Index of searched value is: "+index); System.out.println("De value of Tab with searched index is: "+Tab[index]); System.out.println("=========================================================="); start = System.nanoTime(); int Bindex = bitSearch(search,Tab); stop = System.nanoTime(); time = stop - start; System.out.println("Binary search took nano seconds ="+time); System.out.println("Index of searched value is: "+Bindex); System.out.println("De value of Tab with searched index is: "+Tab[Bindex]); } public static int getIndexOf( int toSearch, int[] tab ){ int i = 0; while(!(tab[i] == toSearch) ) { i++; } return i; // or return tab[i]; } public static int bitSearch(int toSearch, int[] tab){ int i = 0; for(;(toSearch^tab[i])!=0;i++){ } return i; } 

}

Se agregó un XOR 🙂

En el método principal usando bucles for: -el tercer bucle for en mi ejemplo es la respuesta a esta pregunta. -en mi ejemplo hice una matriz de 20 enteros aleatorios, asigné a una variable el número más pequeño y detuve el ciclo cuando la ubicación de la matriz alcanzaba el valor más pequeño mientras contaba el número de bucles.

 import java.util.Random; public class scratch { public static void main(String[] args){ Random rnd = new Random(); int randomIntegers[] = new int[20]; double smallest = randomIntegers[0]; int location = 0; for(int i = 0; i < randomIntegers.length; i++){ // fills array with random integers randomIntegers[i] = rnd.nextInt(99) + 1; System.out.println(" --" + i + "-- " + randomIntegers[i]); } for (int i = 0; i < randomIntegers.length; i++){ // get the location of smallest number in the array if(randomIntegers[i] < smallest){ smallest = randomIntegers[i]; } } for (int i = 0; i < randomIntegers.length; i++){ if(randomIntegers[i] == smallest){ //break the loop when array location value ==  break; } location ++; } System.out.println("location: " + location + "\nsmallest: " + smallest); } } 

El código muestra todos los números y sus ubicaciones, y la ubicación del número más pequeño seguido del número más pequeño.

En caso de que alguien aún esté buscando la respuesta,

  1. Puede usar ArrayUtils.indexOf () de la [Biblioteca de Apache Commons] [1].

  2. Si está utilizando Java 8 también puede usar la API de Strean:

     public static int indexOf(int[] array, int valueToFind) { if (array == null) { return -1; } return IntStream.range(0, array.length) .filter(i -> valueToFind == array[i]) .findFirst() .orElse(-1); } 

    [1]: https://commons.apache.org/proper/commons-lang/javadocs/api-3.1/org/apache/commons/lang3/ArrayUtils.html#indexOf(int%5B%5D,%20int)

 Integer[] array = {1, 2, 3, 4, 5, 6}; for (int i = 0; i < array.length; i++) { if (array[i] == 4) { system.out.println(i); break; } }