为了账号安全,请及时绑定邮箱和手机立即绑定

如何多次检查特定事件?

如何多次检查特定事件?

MM们 2022-09-22 19:39:32

我是一个初学者程序员。我的代码假设用户将输入一个带有“*”(星号)的单词,如果*之前和之后的字符相同,则显示“相同”。例如,对于输入 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");


查看完整描述

2 回答

?
Helenr

TA贡献1471条经验 获得超3个赞

首先,您需要修复循环索引。它应该从 到 ,否则如果最后一个或第一个字符是 .,则会出现索引超出边界的异常。1s.length() - 1*


其次,如果两边至少有1对字符不同,那么似乎要输出“不同”。你可以通过在找到一对不同的货币对时退出循环来做到这一点:*break


// be careful of bounds of the indexes    

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

    if ((s.charAt(i) == '*')) {

            if ((s.charAt(i-1)) == s.charAt(i+1)) {

                ind = "SAME";

            } else {

                ind = "DIFFERENT";

                break;

            }

        }

    }

    System.out.print(ind);

或者,您可以使用正则表达式解决方案:


if (Pattern.compile("(.)\\*(?!\\1)").matcher(s).find()) {

    System.out.println("DIFFERENT");

} else {

    System.out.println("SAME");

}


查看完整回答
反对 回复 2022-09-22
?
饮歌长啸

TA贡献1645条经验 获得超1个赞

您必须将循环从第 2 个字符限制到从末尾的第 2 个字符开始,并在找到匹配项时中断(我想):


String ind = "DIFFERENT";

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

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

        ind = "SAME";

        break;

    }

}

System.out.print(ind);

同时删除:


System.out.print("NO");


查看完整回答
反对 回复 2022-09-22

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信