首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在一个测试用例中,比较字符串的新方法失败

在一个测试用例中,比较字符串的新方法失败
EN

Stack Overflow用户
提问于 2017-09-06 09:57:54
回答 2查看 476关注 0票数 1

我被要求检查String a是否更大,String b是否更大。所以,在考虑compareTo()方法之前,我就有了一个新的想法。

  1. 取a& b两种长度的最小长度。
  2. 迭代一个for循环,直到最小长度,并将每个字符的ascii之和分别存储在a&b中。
  3. 比较ascii以打印结果。

这是我的密码

代码语言:javascript
复制
private static void isInLexicographicOrder(String a, String b) {
    char[] arr1 = a.toCharArray();
    int asciCount1 = 0;

    char[] arr2 = b.toCharArray();
    int asciCount2 = 0;

    long asciLength = (a.length() < b.length()) ? a.length() : b.length();
    for(int i=0; i<asciLength; i++) {
        asciCount1 += arr1[i];
        asciCount2 += arr2[i];
    }

    if(asciCount1 < asciCount2) {
        System.out.println("In Lexicographic Order");
    }
    else {
        System.out.println("Not In Lexicographic Order");
    }

}

它对我提供的许多输入都很好,然后我找到了这个链接Java中的字符串比较,所以为了确认我在代码中使用了比较方法。

代码语言:javascript
复制
System.out.println((a.compareTo(b)) < 0 ? "In Lexicographic Order" : "Not In Lexicographic Order");

现在,当我提交代码时,另一个网站说代码在一个测试用例中失败了。

样本输入

代码语言:javascript
复制
vuut
vuuuuu

他们希望产出以No (即,Not In Lexicographic Order )的形式出现。但是我的逻辑和compareTo()逻辑说的是In Lexicographic Order。所以有什么不对的,我的逻辑完全正确吗?

如果我错了,这就是我得到有个问题。的链接

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-06 10:03:25

你的逻辑不对。比较字符的总和是错误的,因为"bab“、"abb”和"bba“具有相同的价值,但这并没有告诉你它们中的哪一个是第一位的。

您应该分别比较每一对字符。当第一次遇到一对不相等的字符时,值较低的字符属于应该放在第一位的字符串。

代码语言:javascript
复制
for(int i=0; i<asciLength; i++) {
    if (arr1[i] > arr2[i]) {
        System.out.println("Not In Lexicographic Order");
        return;
    } else if (arr1[i] < arr2[i]) {
        System.out.println("In Lexicographic Order");
        return;
    }
}
// at this point we know that the Strings are either equal or one 
// is fully contained in the other. The shorter String must come first
if (arr1.length <= arr2.length) {
    System.out.println("In Lexicographic Order");
} else {
    System.out.println("Not In Lexicographic Order");
} 
票数 1
EN

Stack Overflow用户

发布于 2017-09-06 10:03:37

comareTo方法迭代两个字符串的字符,直到到达两个字符不同的位置。返回值是两个代码点值之间的差异。

您的实现将所有代码点添加到和中,并返回此加法结果的差异。

尝试使用值abcddcba的方法。我希望您的方法返回0,而不是负数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46072221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档