数组中的值未分配 - java

时间:2015-01-06 17:44:14

标签: java arrays 2d assign

我的2D数组没有按预期分配值。 这里调用该方法:

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的值分配到第一个空单元格的2D数组中:

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

但是,单元格的值仍为null。

1 个答案:

答案 0 :(得分:1)

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

pairings[findFree()][0] = Character.toString(l);
pairings[findFree()][1] = Character.toString(s);
  1. findFree()将在pairings 2D数组中找到数组的索引,其索引0处的值为null,让它说它为0。
  2. l的值将分配给[0][0]
  3. 您再次致电findFree() - pairings[0]将不会被选中,因为它已在索引0处包含l(非空),因此下一个将被选中(让我们说1)
  4. l的值将分配给[1][1]
  5. 因此,您最终会得到[l][null][null][s],而不是期望的[l][s](至少我认为这是您想要的结果)。

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

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