2D阵列打印不稳定的输出

时间:2017-05-13 18:52:42

标签: java arrays sorting

我的测试程序应该采用一维数组并将其排序为二维数组。

该文件是从'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],但我仍然坚持如何填充数组...

感谢任何帮助!

2 个答案:

答案 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]);
            }
        }
    }
}