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);
集合。排序(卡片列表);
用于(当前卡:卡片列表)
{
系统输出打印项次(当前);
}
}
…是同一个人问的?原始答案有什么问题?…是同一个人问的?原始答案有什么问题?