Java 如何手动按词典进行比较;abcd"&&引用&引用;abcde“;有效地
我想编写自己的compareTo方法,因此我编写了以下简单代码:Java 如何手动按词典进行比较;abcd"&&引用&引用;abcde“;有效地,java,compareto,lexicographic,Java,Compareto,Lexicographic,我想编写自己的compareTo方法,因此我编写了以下简单代码: public int myCompare(String a, String b) { int min = Math.min(a.length(), b.length()); for (int i=0; i < min; i++) { int diff = a.charAt(i) - b.charAt(i); if (diff == 0) { conti
public int myCompare(String a, String b) {
int min = Math.min(a.length(), b.length());
for (int i=0; i < min; i++) {
int diff = a.charAt(i) - b.charAt(i);
if (diff == 0) {
continue;
} else {
return diff;
}
}
// meaning both strings are equals so far
if (a.length() == b.length()) {
return 0;
} else if (a.length() > b.length()) {
return -1;
} else {
return 1;
}
}
public int myCompare(字符串a、字符串b){
int min=Math.min(a.length(),b.length());
对于(int i=0;ib.length()){
返回-1;
}否则{
返回1;
}
}
好吧,这段代码运行正常,但我讨厌最后的
if/else
语句-你有什么建议如何改进这段代码吗?这取决于你想自己写多少。你可以用
return a.length() - b.length(); // as length is non-negative
或
在第一个循环中,您还可以编写
for (int i = 0; i < a.length() && i < b.length(); i++) {
int diff = a.charAt(i) - b.charAt(i);
if (diff != 0)
return diff;
}
for(int i=0;i
@AndyTurner是的,但是char-char
是一个int
和byte-byte
或byte%byte
:PYeah,在我写了它之后意识到了这一点。我仍然更喜欢WrappedPrimitive。请注意,比较方法。@我经常想知道为什么程序员如此害怕基础数学,以至于更复杂的表达式更吸引人。我反复强调的原因是为了避免减法溢出的问题。我猜“短于int
”类型没有问题;但我想我刚刚印上了“使用比较”的图案。我想这是另一件需要忘记的事情。@Andy Turner当你是初学者时,你打破了所有的规则,因为你不知道它们是什么,当你成为高级开发人员时,你必须学习规则,当你成为专家时,你知道打破规则是有意义的,你应该知道,有些人会认为这违反了一条规则,这是一个很好的时间来评论为什么这样做。
for (int i = 0; i < a.length() && i < b.length(); i++) {
int diff = a.charAt(i) - b.charAt(i);
if (diff != 0)
return diff;
}