Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的排序_Java_Arrays_String_Sorting - Fatal编程技术网

Java中的排序

Java中的排序,java,arrays,string,sorting,Java,Arrays,String,Sorting,可能重复: 我有一张卡片清单 clubsArray = {TC, KC, 7C, AC} 这些代表(10个俱乐部、俱乐部之王、7个俱乐部和俱乐部王牌) 我想知道如何对它们进行排序并得到这样的输出 空调、KC、TC、7C 我试着这样做来分类 private String clubsOutput = ""; public void clubsSort() { String order = {"A","K","Q","T","9","8","7","6"

可能重复:

我有一张卡片清单

clubsArray = {TC, KC, 7C, AC}
这些代表(10个俱乐部、俱乐部之王、7个俱乐部和俱乐部王牌) 我想知道如何对它们进行排序并得到这样的输出

空调、KC、TC、7C

我试着这样做来分类

private String clubsOutput = "";
    public void clubsSort()
        {
          String order = {"A","K","Q","T","9","8","7","6","5","4","3","2","1"};
            for (int i = 0; i < clubsArray.length; i++)
            {
                temp = clubsArray[i].charAt(0); // Gets the value of the card 
                tempS = Character.toString(temp); // Holds the character
for (int x = 0; x < order.length; x ++)
{
if (tempS.equals(order[x])
{
clubsOutput = clubsOutput + clubsArray[i]+ " , "; 
}
}
私有字符串clubsOutput=”“;
public void clubsort()
{
字符串顺序={“A”、“K”、“Q”、“T”、“9”、“8”、“7”、“6”、“5”、“4”、“3”、“2”、“1”};
对于(int i=0;i

我似乎无法解决这个问题。

解决这个问题的一个简单方法是将其作为实现可比较接口的对象

然后,您可以获取卡片对象列表,只需使用Collections.sort

)


实现这一点的一个简单方法是将其作为实现可比较接口的对象

然后,您可以获取卡片对象列表,只需使用Collections.sort

)


您正在使用字符串来完成这项工作。这似乎不是一个好方法,我建议您使用自己的类型,例如

public class Card implements Comparable<Card>
{
  public enum Suit { SPADE, HEART, DIAMOND, CLUBS };
  public enum Value { ACE, TWO, THREE, ... };

  private Suit suit;
  private Value value;

  Card(Suit suit, Value value} { this.suit = suit; this.value = value };

  public String toString()
  {
    // return string representation like you want eg TC KC 7C
    // you can have enums with string parameters too
  }

  public int compareTo(Card card)
  { 
    // this is where you define the custom sorter
    // take a look to Comparable interface in Java API doc
    // basically this:
    //   return 0 if two cards are equal
    //   return 1 if this card is greater than passed one
    //   return -1 otherwise
  }
}
在Java中应该这样做

枚举的好处在于,您可以按照正确的排序顺序定义它们,然后直接比较它们,这样您就可以执行以下操作:

public int compareTo(Card card) {
  int sc = suit.compareTo(card.suit);

  if (sc != 0)
    return sc;
  else
    return value.compareTo(card.value);
}

您正在使用字符串来完成这项工作。这似乎不是一个好方法,我建议您使用自己的类型,例如

public class Card implements Comparable<Card>
{
  public enum Suit { SPADE, HEART, DIAMOND, CLUBS };
  public enum Value { ACE, TWO, THREE, ... };

  private Suit suit;
  private Value value;

  Card(Suit suit, Value value} { this.suit = suit; this.value = value };

  public String toString()
  {
    // return string representation like you want eg TC KC 7C
    // you can have enums with string parameters too
  }

  public int compareTo(Card card)
  { 
    // this is where you define the custom sorter
    // take a look to Comparable interface in Java API doc
    // basically this:
    //   return 0 if two cards are equal
    //   return 1 if this card is greater than passed one
    //   return -1 otherwise
  }
}
在Java中应该这样做

枚举的好处在于,您可以按照正确的排序顺序定义它们,然后直接比较它们,这样您就可以执行以下操作:

public int compareTo(Card card) {
  int sc = suit.compareTo(card.suit);

  if (sc != 0)
    return sc;
  else
    return value.compareTo(card.value);
}

如果您的卡始终由2个字符串表示,您可以使用以下内容:

List<String> cards = new ArrayList<String>();
cards.add("TC");
cards.add("KC");
cards.add("7C");
cards.add("AC");

Collections.sort(cards, new Comparator<String>() {
    public int compare(String o1, String o2) {
        int i1 = "AKQT98765432".indexOf(o1.charAt(0));
        int i2 = "AKQT98765432".indexOf(o2.charAt(0));
        return i1 == i2 ? 0 : i1 < i2 ? -1 : 1;
    }
});

for (String card : cards) {
    System.out.println(card);
}
List cards=new ArrayList();
卡片。添加(“TC”);
卡片。添加(“KC”);
卡片。添加(“7C”);
卡片。添加(“AC”);
Collections.sort(卡片、新比较器(){
公共整数比较(字符串o1、字符串o2){
int i1=“AKQT98765432”。indexOf(o1.charAt(0));
int i2=“AKQT98765432”。indexOf(o2.charAt(0));
返回i1==i2?0:i1
如果您的卡始终由两个字符串表示,您可以使用以下内容:

List<String> cards = new ArrayList<String>();
cards.add("TC");
cards.add("KC");
cards.add("7C");
cards.add("AC");

Collections.sort(cards, new Comparator<String>() {
    public int compare(String o1, String o2) {
        int i1 = "AKQT98765432".indexOf(o1.charAt(0));
        int i2 = "AKQT98765432".indexOf(o2.charAt(0));
        return i1 == i2 ? 0 : i1 < i2 ? -1 : 1;
    }
});

for (String card : cards) {
    System.out.println(card);
}
List cards=new ArrayList();
卡片。添加(“TC”);
卡片。添加(“KC”);
卡片。添加(“7C”);
卡片。添加(“AC”);
Collections.sort(卡片、新比较器(){
公共整数比较(字符串o1、字符串o2){
int i1=“AKQT98765432”。indexOf(o1.charAt(0));
int i2=“AKQT98765432”。indexOf(o2.charAt(0));
返回i1==i2?0:i1
您似乎正在使用一个枚举作为卡标识。如果是这种情况,您的卡有一个自然顺序,即声明枚举成员的顺序。如果您的枚举名为“卡”,您可以声明一个
列表cardList;
并调用
Collections.sort(cardList)
对其进行排序

下面是一个演示该技术的方法:

public static void main( String[] args) { List cardList = new LinkedList(); cardList.add(Card.CA); cardList.add(Card.CQ); cardList.add(Card.C7); cardList.add(Card.CJ); Collections.sort(cardList); for (Card current : cardList) { System.out.println(current); } } 公共静态真空总管( 字符串[]args) { List cardList=新链接列表(); cardList.add(Card.CA); cardList.add(Card.CQ); 卡片列表。添加(卡片。C7); cardList.add(Card.CJ); 集合。排序(卡片列表); 用于(当前卡:卡片列表) { 系统输出打印项次(当前); } }
您似乎正在使用枚举作为卡标识。在这种情况下,您的卡有一个自然顺序,即声明枚举成员的顺序。如果您的枚举名为“卡”,则可以声明
列表cardList;
并调用
Collections.sort(cardList)
对其进行排序

下面是一个演示该技术的方法:

public static void main( String[] args) { List cardList = new LinkedList(); cardList.add(Card.CA); cardList.add(Card.CQ); cardList.add(Card.C7); cardList.add(Card.CJ); Collections.sort(cardList); for (Card current : cardList) { System.out.println(current); } } 公共静态真空总管( 字符串[]args) { List cardList=新链接列表(); cardList.add(Card.CA); cardList.add(Card.CQ); 卡片列表。添加(卡片。C7); cardList.add(Card.CJ); 集合。排序(卡片列表); 用于(当前卡:卡片列表) { 系统输出打印项次(当前); } }
…是同一个人问的?原始答案有什么问题?…是同一个人问的?原始答案有什么问题?