当前位置: 代码迷 >> java >> 只需要一点帮助调试我的代码
  详细解决方案

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

热度:43   发布时间:2023-08-02 10:34:09.0

我有 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.

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

我明白可能是什么问题。 您在 ',' 上拆分,但逗号后有空格。 所以你会有一个像“Dog”这样的“单词”,如果你测试它的第一个字符,你会失败,因为空格不是大写字母。

尝试拆分:

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

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

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

我猜你想写自己的排序。 我会把它留给你或其他人来调试。 但你可以:

Arrays.sort(words)

也许您在每个单词之前放置一个空格,这就是您要检查它是否为大写的内容...

  相关解决方案