重写整个String Class方法

时间:2014-10-18 04:01:34

标签: java compareto

我的教授给了我一个具有挑战性的作业,其中的想法是重写String类中的所有方法,而不使用 String,StringBuilder和Wrapper类。这是针对Intro to Java类的。我已经完成了一些方法,但是在使用其他方法时遇到了困难。这仅适用于主类,不会在其中创建任何字符串。

我拥有:"数据" 作为我的" MyOwnString"的char []数据对象

CompareTo方法:

public int compareTo(MyOwnString rhs){
    if (this.data == rhs.data){
        return 0;
    } else if (this.data > rhs.data){
        return 1;
    }
    else {
        return -1;
    }
}

这个显示错误。我的猜测是rhs需要在能够与分配给MyOwnString对象的任何字符串进行比较之前声明。 既然有compareTo方法和compareToIgnoreCase,那么我必须添加一行来忽略比较吗?


更新

这是我通过使用数组长度创建自己的方法而为compareTo方法提供的代码。

public int compareTo(MyOwnString cts){
    int word1 = data.length;
    int word2 = cts.length();
    int result = 0;
    for (int i=0; i<word1; i++){
        for (int j=0;j<word2; j++){
            if(word1 == word2){
                result = 0;
            }
            else if (word1 > word2){
                result = 1;
            }
            else {
                result = -1;
            }
        }
    }

    return result;

}

2 个答案:

答案 0 :(得分:2)

由于不允许使用String.compareTo() 因为java不支持&gt;对于您的自定义对象或char [](例如,不支持运算符重载),您必须以编程方式执行此操作。

换句话说,你有两个char数组,你必须循环遍历所有字符。你比较每个char数组的前两个字符(你可以使用&gt;或&lt;),如果它们是==你比较后两个字符,依此类推..直到找到两个打破领带的字符 - 你然后可以打破你的for循环并将结果返回-1,1。如果它们绑定在每个字符上,则返回0。

如果你想实现equals,你可以调用compareTo并通过检查字符串的长度来稍微优化它。如果它们不同那么当然字符串不相等


更新:我不确定您是否运行了上面的代码 - 尝试编译代码并在继续之前运行它。我相信它甚至不会编译。 我认为,这是一个正确的未经检查的版本。我可以一如既往地混合-1和1 ..

public int compareTo(MyOwnString cts){
    int word1Length = ((MyOwnString)this).data.length;
    int word2Length = cts.data.length;
    for (int i=0; i < Math.min(word1Length,word2Length); i++){
        if(this.data[i] == cts.data[i]){
            continue;
        }
        else if (this.data[i] > cts.cts[i]){
            return -1;
        }
        else if (this.data[i] < cts.cts[i]) {
            return 1;
        }
    }
    if (word1Length == word2Length){
        return 0;
    }
    else if(word1Length < word2Length){
        return 1;
    }
    else {
        return -1;
    }
}

public boolean equals(MyOwnString cts){
    int word1Length = ((MyOwnString)this).data.length;
    int word2Length = cts.data.length;
    if (word1Length != word2Length){
        return false;
    }
    else { // if they are equal
        int comparison = this.compareTo(cts);
        if (comparison==0){
            return true;
        }
        else {
            return false;
        }
    }
}

答案 1 :(得分:0)

您无法将char[]个对象与>运算符进行比较,因为它们未在其上定义。您必须遍历char[]数组并自己比较这些字符。

顺便说一句,在这个作业中很容易作弊,因为String类的代码可以在线获得。