3

我有以下数组

String[] arrKey  = new String[] {"A","B","C","D","E",......"Y","Z"};

我想搜索数组并给我字母所在位置的索引。比如说我想搜索字母“E”,当我搜索数组时,它应该给我“E”的位置,所以我应该得到索引位置 4。我不想在循环中这样做。可能吗?我一直在四处寻找,找不到答案。

4

8 回答 8

16

我不想循环执行此操作。

某处必须有一个循环- 在您的代码或库代码中。

所以是的,你可以使用

int index = Arrays.asList(arrKey).indexOf("E");

...但这会在幕后循环。

如果您知道您的数组已排序开始,您可以使用:

int index = Arrays.binarySearch(arrKey, "E");

这将更有效率 - 但它仍然是一个循环......

当然,如果您知道您的数组始终是AZ,那么您可以在没有循环的情况下执行此操作 - 但我假设您的实际情况更笼统......

于 2012-11-08T15:07:38.983 回答
1

如果您必须处理chars 而不是字符串,请查看getNumericValue方法。

如果您想要更通用的解决方案,您应该考虑使用 aMap<String,Integer>而不是数组。

于 2012-11-08T15:09:58.020 回答
1

这基本上是一个面试问题,以测试你的递归技巧,这就是你的做法。

private static <T> int findIndex(T[] items, T item, int index) {
    if (items.length == index) {
        return -1;
    }
    if (items[index].equals(item)) {
        return index;
    }
    return findIndex(items, item, index+1);
}

这是运行它的方法

int val = findIndex(new String[]{"A","B","C"}, "C", 0);
于 2016-12-13T17:28:24.727 回答
0

这是我正在处理的代码。这就是我目前所拥有的。这对我来说只是练习 JAVA 和理解 Ceaser Cipher 的练习轮。

public class CeaserCipher
{
public static void main (String [] args) {
    Scanner keyboard = new Scanner(System.in);
    System.out.println("Enter test letters for Caesar cipher in capitals");
    String input = keyboard.nextLine();
    char[] strArray = input.toCharArray();

    System.out.print("What is the key: "); 
    int key = keyboard.nextInt();
    //String[] arrKey  = new String[] {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
    String c  = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    char[] arrKey = c.toCharArray();

    for (int i = 0; i < strArray.length ; i++){

        char cipherValue = strArray[i];
        int index = Arrays.binarySearch(arrKey, cipherValue);
        int j = (key + index)%26;
        System.out.print(arrKey[j]);

    }
}
}
于 2012-11-09T08:54:57.383 回答
0

使用 indexOf

   return arrKey.get(arrKey.indexOf("E"));
于 2012-11-08T15:14:22.047 回答
0

仅当您假设您拥有此数组(或类似数组)时才有可能,因为您可以计算索引。

String s = "E";
int index = s.charAt(0) - 'E'; // == 4
于 2012-11-08T15:16:08.067 回答
0

使用indexOf

Java - 获取数组中的元素位置

于 2012-11-08T15:08:38.023 回答
0

您可以在这种情况下使用递归:

let arr = ["A","B","C","D","E","Y","Z"];
let index = 0;

function find(str){
  if(str[0] === "E")
  { 
    return str[0];
  }
  else {
    str.shift(); 

//从str数组中删除第一个元素并再次调用该函数

        index++;
        return find(str);
      }
    }
    
    console.log("Found",find(arr));
    console.log("at Index:",index);
    console.log("Peace Out! XD");
于 2021-02-03T19:56:20.393 回答