在我的 MainActivity 中,我有以下代码行:
//data.getFirstUserInput()-1 is equal to user input.
deck.setCardNumberEmpty(data.getFirstUserInput()-1);
System.out.println("\n Cards on table");
ArrayList<Deck> deck= deck.getCards();
Collections.sort(cards);
for (Deckc: deck
System.out.print((format("%10s","\033[F[ " + c.getOneSpecificNumber())+ " ]"));}
这会打印出我的随机卡号。但问题是它们没有按数字排序,
知道我能做什么吗?
卡片类别
public class Card {
private String cardLetter;
private String cardNumber;
private String nullValue;
public Card(String cardLetter, String cardNumber, String nullValue){
this.cardLetter = cardLetter;
this.cardNumber = cardNumber;
this.nullValue = nullValue;
}
public String getOneSpecificNumber() { return cardNumber;}
public void setCardNumber(String x){ cardNumber = x; }
private ArrayList<Deck> deck = new ArrayList();
public Deck(){
char A = 'A';
int repeats = 2, numOfCards = 8;
for ( int i = 0; i<numOfCards;i++){
for (int j = 0; j<repeats; j++){
cards.add(new Card((char) ( A + i ) + "",i+1,""));
}
}
}
最佳答案
为了根据 cardNumber
对 cards
数组进行排序,您的 Card
类必须实现 Comparable
并覆盖 compareTo()
。
这是代码片段:
public class Card implements Comparable<Card> {
private String cardLetter;
private String cardNumber;
private String nullValue;
public Card(String cardLetter, String cardNumber, String nullValue){
this.cardLetter = cardLetter;
this.cardNumber = cardNumber;
this.nullValue = nullValue;
}
public int compareTo(Card c) {
if(StringUtils.isEmpty(this.cardNumber) ||
StringUtils.isEmpty(c.cardNumber)) return -1;
return Integer.parseInt(this.cardNumber) - Integer.parseInt(c.cardNumber);
}
public String getOneSpecificNumber() { return cardNumber; }
public void setCardNumber(String x) { cardNumber = x; }
}
StringUtils
是 Apache Commons Lang3 的一部分,如果您不想将其包含在您的项目中,那么您可以执行以下操作:
if(null == this.cardNumber || "".equals(this.cardNumber) ||
null == c.cardNumber || "".equals(c.cardNumber)) return -1;
现在您只需执行此操作即可排序:
Collections.sort(cards);
示例:
System.out.println("\n Cards on table");
List<Card> cards = deck.getCards();
Collections.sort(cards);
for (Card c: cards) {
System.out.print((format("%10s","\033[F[ " + c.getOneSpecificNumber())+ " ]"));
}
关于ArrayList 中的 Java 字符串对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36247651/