我这里的测试程序应该采用一个 1D 数组并将其分类为 2D 数组。
该文件是从"a"到"z"的 3000 个常用单词。设置似乎正确,我什至得到了一个开始正确的输出。但是,在以"b"开头的单词之后,我只得到空值。
public static void main(String[] args) throws FileNotFoundException {
int listSize = 0;
File file = new File("3000-Common-Words.txt");
Initialize a = new Initialize();
String[] oneArray = a.Initialization(file);
for (int i = 0; i < 26; i++) {
int sizeCheck = 0;
for (int j = 0; j < 3000; j++) {
if (oneArray[j].charAt(0) == (char) (i + 97)) {
sizeCheck++;
}
if (sizeCheck > listSize) {
listSize = sizeCheck;
}
}
}
String[][] twoArray = new String[26][listSize];
for (int i = 0; i < 26; i++) {
for (int j = 0; j < listSize; j++) {
if (oneArray[j].charAt(0)==(char)(i+97)){
twoArray[i][j]=oneArray[j];
}
}
}
for (int i = 0; i < 26; i++) {
for (int j = 0; j < listSize; j++) {
System.out.println(twoArray[i][j]);
}
}
}
第一个数组的初始化是正确的(我已经检查了输出(。
我明白为什么我的数组在"c"之前停止。这是因为我有oneArray[j]
但我仍然坚持如何填充数组......
任何帮助不胜感激!
填充数组的逻辑略有缺陷。您已经正确计算出稀疏矩阵的最小维度。在字母表的任何字母中,最多单词数将是 26。但是,您尚未选择独立的迭代计数器来读取单词列表和填充数组。
这是一个可行的解决方案:
public class WordSort {
public static void main(String[] args) {
int listSize = 0;
String[] oneArray = {"a1","b1","c1","d1","e1","f1","g1","h1","i1","j1","k1","l1","m1","n1","o1","p1","q1","r1","s1","t1","u1","v1","w1","x1","y1","z1","a2","b2","d2","g2","n2","l2","z2","v2","g3","h3","p0","h9","r5","t3","o9","l7","h6","f5","q5",};
for (int i = 0; i < 26; i++) {
int sizeCheck = 0;
for (int j = 0; j < oneArray.length; j++) {
if (oneArray[j].charAt(0) == (char) (i + 97)) {
sizeCheck++;
}
if (sizeCheck > listSize) {
listSize = sizeCheck;
}
}
}
String[][] twoArray = new String[26][listSize];
for (int i = 0; i < 26; i++) {
int k = 0;
for (int j = 0; j < oneArray.length; j++) {
if (oneArray[j].charAt(0)==(char)(i+97)){
twoArray[i][k++]=oneArray[j];
}
}
}
for (int i = 0; i < 26; i++) {
for (int j = 0; j < listSize; j++) {
System.out.println(twoArray[i][j]);
}
}
}
}
sizeCheck 将以字母开头的单词数。列表大小将是其中的最大值。但是在您的第二个循环中
for (int j = 0; j < listSize; j++) {
if (oneArray[j].charAt(0)==(char)(i+97)){
twoArray[i][j]=oneArray[j];
}
}
您始终只"扫描"第一个数组中的第一个"listSize"字数,实际上长度为 3000 个单词。所以不要使用 j 来迭代 "oneArray",而是使用另一个变量。