数组中的值未分配 - java

Value in array not not assigned - java

我的二维数组没有按应有的方式分配值。 方法在这里调用:

public static void inputPair() throws IOException {
    System.out.println("Enter symbol which you want to pair letter to:");
    char s = 'a';
    while (s == 'a') {
        try {
            s = input.next(".").charAt(0);
        } catch (InputMismatchException e) {
            System.out.println("Please enter a valid symbol!");
            input.next();
        }
    }

    System.out.println("Enter letter which you want to pair symbol to:");
    char l = '#';
    while (l == '#') {
        try {
            l = input.next(".").charAt(0);
        } catch (InputMismatchException e) {
            System.out.println("Please enter a valid letter!");
            input.next();
        }
        if ((s <= 'a') && (s >= 'z')) {
            System.out.println("Please enter a valid letter!");
            l = '#';
        }
    }
    makePair(s, l);
    System.out.println("Pair made!");
}

和 makePair 方法:

public static void makePair(char s, char l) {
    for (int i = 0; i < words.length; i++) {
        words[i] = words[i].replace(s, l);
    }
    try {
        pairings[findFree()][0] = Character.toString(l);
        pairings[findFree()][1] = Character.toString(s);
    } catch (Exception e) {
        System.out.println("Please start again!");
        System.exit(0);
    }
}

由于 findFree 方法,这应该将 l 和 s 的值赋给二维数组中的第一个空单元格:

public static int findFree() {
    for (int i = 0; i < pairings.length; i++) {
        if (pairings[i][0] == null) {
            return i;
        }
    }
    return 27; // Greater than 26
}

但是单元格仍然具有空值。

我不确定这是唯一的问题,但它似乎是错误的:

pairings[findFree()][0] = Character.toString(l);
pairings[findFree()][1] = Character.toString(s);
  1. findFree() 将在 pairings 二维数组中找到数组的索引,其索引 0 处的值为 null,假设它为 0。
  2. l 的值将分配给 [0][0]
  3. 您再次调用 findFree() - pairings[0] 将不会被选中,因为它已经包含 l(不为空)索引 0,因此将选择下一个(假设为 1)
  4. l 的值将分配给 [1][1]

因此你最终会得到 [l][null][null][s],而不是想要的 [l][s](至少我假设这是你想要的结果)。

要修复它,请执行以下操作:

int freeIndex = findFree();
pairings[freeIndex][0] = Character.toString(l);
pairings[freeIndex][1] = Character.toString(s);