扑克排名是2345..9TJQKA
给定一系列卡片String s [] = {“Qh”,“Jd”,“2h”}。
我想回来
s [] = {“2h”,“Jd”,“Qh”}
这是我的代码:
Arrays.sort(s, new Comparator<String>() {
@Override
public int compare (String s1, String s2) {
int v1 = (int) s1.charAt(0);
int v2 = (int) s2.charAt(0);
if (v1 == 65) v1 = 100; //changes the value of A
if (v2 == 65) v2 = 100;
if (v1 == 75) v1 = 85; //changes the value of K
if (v2 == 75) v2 = 85;
if (v1 == 84) v1 = 60;
if (v2 == 84) v2 = 60; //changes the value of T
return v1 - v2;
}
}
它保持数组不变。
答案 0 :(得分:1)
我使用以下代码测试了您的代码:
import java.util.*;
public class test {
public static void main(String... args) {
String s[] = {"Qh", "Jd", "2h"};
Arrays.sort(s, new Comparator<String>() {
@Override
public int compare (String s1, String s2) {
int v1 = (int) s1.charAt(0);
int v2 = (int) s2.charAt(0);
if (v1 == 65) v1 = 100; //changes the value of A
if (v2 == 65) v2 = 100;
if (v1 == 75) v1 = 85; //changes the value of K
if (v2 == 75) v2 = 85;
if (v1 == 84) v1 = 60;
if (v2 == 84) v2 = 60; //changes the value of T
return v1 - v2;
}
});
for (String card : s) {
System.out.println(card);
}
}
}
打印:
2h
Jd
Qh
它对我有用,所以问题可能在于你调用/使用你的排序程序
答案 1 :(得分:0)
浏览javadocs on comparatorInstance.compare:
比较其订单的两个参数。当第一个参数小于,等于或大于第二个参数时,返回负整数,零或正整数。
所以,你正在返回v1和v2之间的区别,看起来,在它的表面上,奇怪。
答案 2 :(得分:0)
如果没有看到更多的程序,很难确切地说出错误的原因,但是,您正在通过实施compare
来弥补自己的失败。通过重复if
语句而不是if/else
,您可以在v1或v2上执行两个if语句。考虑使用switch
。
另一个观察是,这种事情有助于封装。为什么不使用卡类来隐藏每张卡的值,而不是试图在compare
方法中“翻译”它?
答案 3 :(得分:0)
您正在为每只手的第一个字母修改 ASCII代码的临时副本,而不是修改真实字符串。
不是说我建议你现在就这样做,首先循环替换字符串,然后用自定义逻辑对它们进行排序。 这是O(n * 2)但它仍然很快,你一次不能处理数百万只手,是吗?
我很厌倦为你做这件事:
import java.util.*;
import java.lang.*;
class Main {
public static void main(String[] args) throws java.lang.Exception {
String s[] = {
"Ad", "2h", "Qh" //I replaced it with an A so your replacement code can kick in
}; //See http://www.asciitable.com/index/asciifull.gif
String mod[] = new String[s.length];
for(int i = 0; i < s.length; i++) {
int v1 = s[i].charAt(0);
int v2 = s[i].charAt(1);
if (v1 == 65) v1 = 100; //changes the value of A
if (v1 == 75) v1 = 85; //changes the value of K
if (v1 == 84) v1 = 60;
String a1 = (char)v1 + "";
String a2 = (char)v2 + "";
mod[i] = a1 + a2 + "";
}
Arrays.sort(mod, new Comparator < String > () {
@Override
public int compare(String s1, String s2) {
int v1 = (int) s1.charAt(0);
int v2 = (int) s2.charAt(0);
return v1 - v2;
}
});
for (int i = 0; i < mod.length; i++)
System.out.println(mod[i]);
}
}
Woops,它肯定不是O(n * 2),因为文档引用的是登录类型,对不起。