排名扑克排名

时间:2013-01-16 01:53:26

标签: java

扑克排名是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;
        }
    }

它保持数组不变。

4 个答案:

答案 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),因为文档引用的是登录类型,对不起。