0

Java新手,请放轻松!

创建一个简单的教育应用程序来检查论文句子中的人称代词。我几乎让它工作了,我的问题是该方法打印了 12 次(而不是检查 12 个代词并打印一行)。

public static void pronoun (String thesis){    

            String [] personalPronouns = {"I","me","you","we","us","our","he","him","she","her","they","them"};

            for (int i = 0; i < 12; i++){
                if (thesis.contains(personalPronouns[i])){
                    System.out.println("Oops! Looks like your thesis contains personal pronouns. Remember, avoid using I, you, me, we, us, our, etc. in persuasive essays.");
                } else {
                    System.out.println("Looks good. Now it's time to start writing! Your essay outline is saved to a txt file called EssayTutorOutline.");
                  }
            }
}

如果我输入“我有论文”。它返回这个:

看起来不错...

看起来不错...

看起来不错...

看起来不错...

看起来不错...

看起来不错...

哎呀!...

看起来不错...

看起来不错...

看起来不错...

看起来不错...

看起来不错...

我相信这对你们大多数人来说是显而易见的。整晚都在谷歌上搜索答案。任何帮助表示赞赏。

4

2 回答 2

3

浏览你的代码,一边解释一边解释,你就会发现问题所在。

// repeat for each number from 0 to 11
for (int i = 0; i < 12; i++) {
    // if this string contains the string in personalPronouns[i]
    if (thesis.contains(personalPronouns[i])){
        // print this message
        System.out.println("Oops! Looks like your thesis contains personal pronouns. Remember, avoid using I, you, me, we, us, our, etc. in persuasive essays.");
    } else { // otherwise
        // print this message
        System.out.println("Looks good. Now it's time to start writing! Your essay outline is saved to a txt file called EssayTutorOutline.");
    }
}

相反,您要做的是弄清楚是否存在任何代词。您可以通过设置一个boolean变量(称为flag)来做到这一点,只要人称代词匹配,该变量就会更改:

boolean personalPronounSeen = false;
for (int i = 0; i < 12; i++) {
    if (thesis.contains(personalPronouns[i])){
        personalPronounSeen = true;
    }
}
if(personalPronounSeen) {
    // print your message...
}

请注意,虽然使用标志是一般问题的一般解决方案,但由于多种原因,这仍然不能满足您的要求。特别是,该contains方法匹配一个子字符串,因此您会得到很多误报,例如任何大写字母 I、welcomedelicious等词。您也不会匹配任何具有不同大小写的人称代词。

一种更强大的方法是拆分thesis空格,从每个结果单词中去掉标点符号,将它们全部添加到 aSet中,然后查看是否有Set#contains任何代词。如果你使用TreeSet,你可以告诉集合忽略大小写和对待"We""we"同样:

Set<String> wordList = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
wordList.add("we");
wordList.contains("We"); // true

最后,看看增强的for循环;它使对数组或集合的迭代更加干净且不易出错。如果您确实需要手动迭代,请始终使用personalPronouns.length而不是硬编码 number 12

于 2013-10-18T00:49:48.387 回答
0

你有一个循环;里面有一个 if 语句,如果测试为真,则打印一件事,如果测试为假,则打印另一件事。为什么不期望 12 行输出?

如果您的意图是查看 12 个代词,并在最后报告是否使用了其中的任何一个,则您必须等待打印,直到循环完成。我建议一个初始化为“未找到”的变量,如果找到任何变量,则将其设置为“找到一个”(此时,您可以停止循环,但也没有)。然后在循环之后添加您的 if 语句,检查该变量。

于 2013-10-18T00:45:38.257 回答