我的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。
答案 0 :(得分:1)
我不确定这是唯一的问题,但似乎错了:
pairings[findFree()][0] = Character.toString(l);
pairings[findFree()][1] = Character.toString(s);
findFree()
将在pairings
2D数组中找到数组的索引,其索引0处的值为null
,让它说它为0。l
的值将分配给[0][0]
findFree()
- pairings[0]
将不会被选中,因为它已在索引0处包含l
(非空),因此下一个将被选中(让我们说1)l
的值将分配给[1][1]
。因此,您最终会得到[l][null]
和[null][s]
,而不是期望的[l][s]
(至少我认为这是您想要的结果)。
要修复它,请执行以下操作:
int freeIndex = findFree();
pairings[freeIndex][0] = Character.toString(l);
pairings[freeIndex][1] = Character.toString(s);