只需要一点帮助调试我的代码

时间:2019-02-14 02:50:57

标签: java

我有3个文件,“ MyFile”,“ myOtherFile”,“ yetAnotherFile”,我的代码将从这些文件中提取单词并将其放入数组中,检查它们是否以大写字母开头,如果确实以大写字母开头,还将按字母顺序对它们进行排序。 所有3个单词都包含3个或更多单词,一个单词只有一个以小写字母开头的单词,因此我可以测试无效的输入打印行

我莫名其妙地让所有3个人打印无效行

添加了一个计数器,因此如果counter> 0则执行打印语句

    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.*;

   public class StringSorter {
    private String inputFileName;
    //private String line;
    public StringSorter(String fileName) {
        inputFileName = fileName;
        }

    public void sortStrings() throws IOException {
        FileReader input = new FileReader(inputFileName);
        BufferedReader myReader = new BufferedReader(input);
        String line, data = "";

        String[] words;

        int posCount = 0;


        while ((line = myReader.readLine()) != null)
            data += line;
        words = data.split(",");

        for(int posi = 0; posi < words.length; posi++) {
            if(!Character.isUpperCase(words[posi].charAt(0))) {
            posCount++;
            }
        }
        if(posCount > 0) {
            System.out.print("Invalid input. Word found which does not     start with an uppercase letter.");
        }
        else {
        for (int k = 0; k < words.length; k++) {
            for (int i = k - 1; i >= 0; i--) {
                if (words[i].charAt(0) < words[k].charAt(0)) {

                    String temp = words[k];
                    words[k] = words[i];
                    words[i] = temp;
                    k = i;
                }
        }

        }           
                    for(int print = 0; print < words.length - 1; print++){ 

                        System.out.print(words[print].trim() + ", ");
                }

                System.out.print(words[words.length-1]);

                        }
                     input.close();
                            myReader.close();
                    }

                }


     import java.io.*;
    public class TestStringSorter {

    public static void main(String[] args) throws IOException {
        StringSorter sorterA = new StringSorter("MyFile.txt");
        sorterA.sortStrings();

        StringSorter sorterB = new StringSorter("myOtherFile.txt");
        sorterB.sortStrings();

        StringSorter sorterC = new  StringSorter("yetAnotherFile.txt");
        sorterC.sortStrings();
    }

}

 Invalid input. Word found which does not start with an uppercase letter.

无效的输入。找到不以大写字母开头的单词。    输入无效。找到不以大写字母开头的单词。

2 个答案:

答案 0 :(得分:1)

我知道可能是什么问题。您正在对','进行分割,但是逗号后有空格。因此,您将拥有一个像“狗”之类的“单词”,并且如果您测试该单词的第一个字符,那么您将会失败,因为空格不是大写字母。

尝试分裂:

words = data.split("[,\\s]+");

这将解决数据中的空格问题。

我看到另一个问题,可能会导致您无法获得预期的结果。您是将多行连接在一起,但没有在行之间放置任何内容,因此,一行上的最后一个单词将与下一行中的第一个单词合并。将它们串联在一起时,您可能希望在每行之间放置一个“,”。

我想您想编写自己的排序。我将其留给您或其他人进行调试。但是你可以:

Arrays.sort(words)

答案 1 :(得分:0)

也许您在每个单词前都加了一个空格,这就是您要检查的是否大写...

相关问题