数组中的值未分配 - 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);
findFree()
将在 pairings
二维数组中找到数组的索引,其索引 0 处的值为 null
,假设它为 0。
l
的值将分配给 [0][0]
- 您再次调用
findFree()
- pairings[0]
将不会被选中,因为它已经包含 l
(不为空)索引 0,因此将选择下一个(假设为 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);
我的二维数组没有按应有的方式分配值。 方法在这里调用:
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);
findFree()
将在pairings
二维数组中找到数组的索引,其索引 0 处的值为null
,假设它为 0。l
的值将分配给[0][0]
- 您再次调用
findFree()
-pairings[0]
将不会被选中,因为它已经包含l
(不为空)索引 0,因此将选择下一个(假设为 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);