Java - arraylist1.get(arraylist2.indexOf(nextCharacter))返回-1

时间:2015-07-03 22:17:57

标签: java arraylist indexof

我(对于这个例子)有两个ArrayList。明文字母和加密字母表。我想从明文字母表中取一封信,并从加密字母表中获取相应索引的字母。但是,它始终将索引返回-1,即使该条目存在。

public class Rotor {
    String currentIndex;
    private ArrayList rotorType = new ArrayList();
    private ArrayList control = new ArrayList();
    private final char[] alpha = new char[]{
        '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'};

    static char[] I = new char[]{
        'E', 'K', 'M', 'F', 'L', 'G', 'D', 'Q',
        'V', 'Z', 'N', 'T', 'O', 'W', 'Y', 'H',
        'X', 'U', 'S', 'T', 'A', 'I', 'B', 'R',
        'C', 'J'};

    public Rotor(char[] rotor) {
        for (int i = 0; i < 25; i++) {
            rotorType.add(rotor[i]);
            control.add(alpha[i]);
        }
    }

    public void convert(String nextCharacter) {
        currentIndex = String.valueOf(rotorType.get(control.indexOf(nextCharacter)));
    }
}

什么会导致返回索引-1?

1 个答案:

答案 0 :(得分:0)

首先:您使用原始类型,you should not do

第二:正如Sotirios Delimanolis指出的那样,Character不是String。因此,您不应该问ArrayList是否包含Character,是否包含String。这导致了问题。

第三:您的字母有26个字符,而不是25个。因此,for循环应该只与i <= 26重复,而不是i <= 25

我稍微重写了你的代码,结果似乎是正确的。

import java.util.ArrayList;

public class Main {
    String currentIndex;
    private ArrayList<Character> rotorType = new ArrayList<Character>();
    private ArrayList<Character> control = new ArrayList<Character>();

    static final char[] alpha = {
        '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'};

    static final char[] I = {
        'E', 'K', 'M', 'F', 'L', 'G', 'D', 'Q',
        'V', 'Z', 'N', 'T', 'O', 'W', 'Y', 'H',
        'X', 'U', 'S', 'T', 'A', 'I', 'B', 'R',
        'C', 'J'};

    public Main(char[] rotor) {
        assert (alpha.length == rotor.length) : "rotor must be of same length as alpha.";
        for (int idx = 0; idx < alpha.length; ++idx) {
            rotorType.add(rotor[idx]);
            control.add(alpha[idx]);
        }
    }

    public void convert(char nextCharacter) {
        currentIndex = String.valueOf(rotorType.get(control.indexOf(nextCharacter)));
    }
}