我的教授给了我一个具有挑战性的作业,其中的想法是重写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;
}
答案 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[]
数组并自己比较这些字符。