我的测试程序应该采用一维数组并将其排序为二维数组。
该文件是从'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]
,但我仍然坚持如何填充数组...
感谢任何帮助!
答案 0 :(得分:0)
sizeCheck将是以字母开头的单词数。 listSize将是那些的最大值。 但是在你的第二个循环中
for (int j = 0; j < listSize; j++) {
if (oneArray[j].charAt(0)==(char)(i+97)){
twoArray[i][j]=oneArray[j];
}
}
你总是只扫描&#34;第一个&#34; listSize&#34;第一个数组中的单词数量,实际上是3000个单词长。因此,不要使用j来迭代直播,而是使用另一个变量。
答案 1 :(得分:0)
填充数组的逻辑略有缺陷。 您已正确计算出稀疏矩阵的最小维数。 它将是字母表中任何字母中最高字数的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]);
}
}
}
}