有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何为deck类toString方法编写函数

基本上,我有一个toString方法,可以显示已排序的卡片。基本上,如果我有一副完整的卡片,这就是输出的样子

{Ace of Clubs | Two of Clubs | Three of Clubs | Four of Clubs | Five of Clubs | Six of Clubs | Seven of Clubs | Eight of Clubs | Nine of Clubs | Ten of Clubs | Jack of Clubs | Queen of Clubs | King of Clubs | Ace of Diamonds | Two of Diamonds | Three of Diamonds | Four of Diamonds | Five of Diamonds | Six of Diamonds | Seven of Diamonds | Eight of Diamonds | Nine of Diamonds | Ten of Diamonds | Jack of Diamonds | Queen of Diamonds | King of Diamonds | Ace of Hearts | Two of Hearts | Three of Hearts | Four of Hearts | Five of Hearts | Six of Hearts | Seven of Hearts | Eight of Hearts | Nine of Hearts | Ten of Hearts | Jack of Hearts | Queen of Hearts | King of Hearts | Ace of Spades | Two of Spades | Three of Spades | Four of Spades | Five of Spades | Six of Spades | Seven of Spades | Eight of Spades | Nine of Spades | Ten of Spades | Jack of Spades | Queen of Spades | King of Spades}

目前,我通过一个简单的循环来实现这一点,它在开始处放置一个花括号,循环甲板中有多少元素,并添加甲板的输出。得到(我)。getCard()+“|”。最后从结尾处减去三个字符,再加上一个大括号。但这不是一个非常花哨的解决方案,是非常有程序性的,我喜欢优雅的解决方案,我认为有一些函数可以达到这种目的,但我真的不知道lambda表达式或任何这样的,所以我想知道是否有人可以教我如何做到这一点。下面你会找到我目前的解决方案。感谢您的帮助,干杯

public String toString(){
        Collections.sort(deck);

        String result = "{";
        for(int i = 0; i < deck.size(); i++){
            result += deck.get(i).getCard() + " | ";
        }

        if(deck.size() == 0){
            return "{}";
        }

        result = result.substring(0, result.length() - 3);
        result += "}";

        shuffle();
        return result;
    } 

共 (2) 个答案

  1. # 1 楼答案

    使用Java Lamda表达式,您可以用更少的代码和精力实现预期的结果。 比如:

    public String toString(){
            Collections.sort(deck);
            String result = "{"+ deck.stream().map(element->element.getCard()).collect(Collectors.joining("|")) + "}";
            shuffle();
            return result;
    
        } 
    
  2. # 2 楼答案

    根据MadProgammer的建议,我对StringJoiner做了一些实验(我不知道它的存在)

    以下是一种方法:

    List<String> deck = new ArrayList<>();
    deck.add("Ace of Clubs");
    deck.add("Two of Clubs");
    deck.add("Three of Clubs");
    
    StringJoiner stringJoiner = new StringJoiner("|", "{", "}");
    for (String card : deck) {
      stringJoiner.add(card);
    }
    System.out.println(stringJoiner.toString());
    
    

    这将作为输出提供:

    {Ace of Clubs|Two of Clubs|Three of Clubs}
    

    也就是说,我不确定为什么要使用toString方法进行洗牌,因为这样做没有意义?如果是为了打印,就按照马腾的建议复制一份