如何多次检查特定事件?

我是一个初学者程序员。我的代码假设用户将输入一个带有“*”(星号)的单词,如果*之前和之后的字符相同,则显示“相同”。例如,对于输入 ja'*'aisfun,我的输出应该是“相同的”,因为 * 介于相同的字母之间。我的代码似乎适用于大多数情况,例如几颗星星,但是当我尝试像“ja''a'isfun”这样的用户输入时,输出是“相同的”,即使它应该显示“不同”,因为“a”和“i”是不同的字母。在这种情况下,我想我的代码只能检查第一颗星。如何解决此问题?(考虑没有撇号的星星)

String ind = "DIFFERENT";

    for (int i = 0; i< s.length(); i++) {

        if ((s.charAt(i) == '*') && (s.charAt(i-1)) == s.charAt(i+1))

            ind = "SAME";

        }

        System.out.print(ind);

    }

    System.out.print("NO");


MM们
浏览 111回答 2
2回答

Helenr

首先,您需要修复循环索引。它应该从 到 ,否则如果最后一个或第一个字符是 .,则会出现索引超出边界的异常。1s.length() - 1*其次,如果两边至少有1对字符不同,那么似乎要输出“不同”。你可以通过在找到一对不同的货币对时退出循环来做到这一点:*break// be careful of bounds of the indexes&nbsp; &nbsp;&nbsp;for (int i = 1; i< s.length() - 1; i++) {&nbsp; &nbsp; if ((s.charAt(i) == '*')) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ((s.charAt(i-1)) == s.charAt(i+1)) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ind = "SAME";&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ind = "DIFFERENT";&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; System.out.print(ind);或者,您可以使用正则表达式解决方案:if (Pattern.compile("(.)\\*(?!\\1)").matcher(s).find()) {&nbsp; &nbsp; System.out.println("DIFFERENT");} else {&nbsp; &nbsp; System.out.println("SAME");}

饮歌长啸

您必须将循环从第 2 个字符限制到从末尾的第 2 个字符开始,并在找到匹配项时中断(我想):String ind = "DIFFERENT";for (int i = 1; i < s.length() - 1; i++) {&nbsp; &nbsp; if ((s.charAt(i) == '*') && (s.charAt(i-1)) == s.charAt(i+1)) {&nbsp; &nbsp; &nbsp; &nbsp; ind = "SAME";&nbsp; &nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; }}System.out.print(ind);同时删除:System.out.print("NO");
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java