当前位置: 首页 > 知识库问答 >
问题:

如何编写一个方法以将2个不同的数组返回到另一个类?

程举
2023-03-14

我有一个4类的代码,甲板,卡,玩家和测试。

我的想法是创建一个21点游戏,玩家有你的“手”与甲板上提供的卡。我的代码工作正常,但是我只想要一个方法返回两个不同的数组。

我的代码简历:

牌:一张牌(价值,花色)

套牌:创建一个包含 52 张牌的牌阵列。一个类的方法提供Cards()来获取玩家的卡。

玩家:一类有牌阵列的“手牌”

问题在哪里?

看“Deck”类,我使用了2个方法,provideCards()和provideNewCards(),这两个方法是相同的,但是为每个玩家返回不同的数组。我不能在我的方法中使用provide cards()" ArrayList player = new ArrayList

我的代码:

甲板等级:

    package jamilzin.cassino;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Random;

 // /*
   public class Deck {
    private ArrayList<Card> deck = new ArrayList<>();
    public  ArrayList<Card> playerA = new ArrayList<>();
    public  ArrayList<Card> playerB = new ArrayList<>();

    private ArrayList<String> suits = new ArrayList(Arrays.asList(" Diamonds", " Clubs", " Spades", " Hearts"));
    Random gerador = new Random();
    
    public Deck(){
  for(int j=0; j<suits.size(); j++){ // Idea: create a 13 cards for each suits
      for(int i=0; i<13; i++){ 
 deck.add(new Card((i + 1), suits.get(j))); 
    } // for i
  } // for j
   Collections.shuffle(deck); // randomize the deck
} // deck()
    
public ArrayList<Card> provideCards(){
   int  number = gerador.nextInt(52);
   while(deck.get(number)==null){ 
        number = gerador.nextInt(52);}
   Card card = (deck.get(number));
  playerA.add(card);
   deck.set(number, null);
        return  playerA ;} 

public ArrayList<Card> provideNewCards(){
   int  number = gerador.nextInt(52);
   while(deck.get(number)==null){ 
        number = gerador.nextInt(52);}
   Card card = (deck.get(number));
  playerB.add(card);
   deck.set(number, null);
        return  playerB ;} 


@Override
public String toString(){
    return deck.toString();
    }   
   } 

卡类:

package jamilzin.cassino;

public class Card {
    
    private String suit;
    private int value;
    
    Card(int value, String suit){
    this.value = value;
    this.suit = suit;
    }

    public String getSuit() {
        return suit;
    }

    public int getValue() {
        return value;
    }

    @Override
    public String toString() {
     return getValue() + getSuit();
    //return Integer.toString(getValue());
}
}

玩家等级:

package jamilzin.cassino;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.*;
public class Player {
 ArrayList<Card>  hands = new ArrayList<>();

 
   public Player(){
this.hands = new ArrayList<>();
    }

   
    public ArrayList<Card> getHands() {
    return hands;
    }
    
    public void setHands(ArrayList<Card> hands) {
        this.hands = hands;
    }
}

测试类:

package jamilzin.cassino;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Cassino {
    
    public static void main(String[] args) {
 Deck deckMaster = new Deck();
Player PlayerA = new Player();
Player PlayerB = new Player();
for(int i=1;i<=5;i++){
 PlayerA.setHands(deckMaster.provideCards());}
for(int i=1;i<=5;i++){
PlayerB.setHands(deckMaster.provideNewCards());}

        System.out.println(PlayerA.getHands());
        System.out.println(PlayerB.getHands());
        
        System.out.println(deckMaster);
    }
 }

类测试结果:运行项目结果

共有1个答案

羊舌自强
2023-03-14

枚举套装

public enum Suit {
    DIAMONDS, CLUBS, SPADES, HEARTS
}

卡西诺

public class Cassino {
    public static void main(String[] args) {
        Blackjack game = new Blackjack(2);

        System.out.println(game);
    }
}

21点

public class Blackjack {
    private final Player[] players;
    private final Deck deck;

    public Blackjack(int player) {
        this.players = createPlayer(player);
        this.deck = new Deck();
    }

    public Player[] createPlayer(int player){
        Player[] players = new Player[player];
        for (int i = 0; i < player; i++) {
            List<Card> cards = new ArrayList<>();
            for (int j = 0; j < 5; j++) {
                cards.add(deck.provideCard());
            }
            players[i] = new Player(cards);
        }
        return players;
    }

    public Player[] getPlayers() {
        return players.clone();
    }

    public Deck getDeck() {
        return deck;
    }

    @Override
    public String toString() {
        return "Blackjack{" +
                "players=" + Arrays.toString(players) +
                ", deck=" + deck +
                '}';
    }
}

甲板

public class Deck {
    private final LinkedList<Card> deck;

    public Deck() {
        Suit[] suits = Suit.values();
        List<Card> cards = new ArrayList<>();
        for (Suit suit : suits) { // Idea: create a 13 cards for each suits
            for (int j = 0; j < 13; j++) {
                cards.add(new Card((j + 1), suit));
            }
        }
        Collections.shuffle(cards); // randomize the deck
        deck = new LinkedList<>(cards) {
        };
    } // deck()

    public Card provideCard() {
        return deck.pollFirst();
    }

    @Override
    public String toString() {
        return "Deck{" +
                "deck=" + deck +
                '}';
    }
}

    public class Card {
    private final Suit suit;
    private final int value;

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

    public Suit getSuit() {
        return suit;
    }

    public int getValue() {
        return value;
    }

    @Override
    public String toString() {
        return getValue() + getSuit().toString();
        //return Integer.toString(getValue());
    }
}

选手

    public class Player {
    List<Card> hand;

    public Player(List<Card> cards) {
        this.hand = cards;
    }


    public List<Card> getHand() {
        return hand;
    }

    public void setHand(List<Card> hand) {
        this.hand = hand;
    }

    public void addToHand(Card card){
        this.hand.add(card);
    }

    @Override
    public String toString() {
        return "Player{" +
                "hand=" + hand +
                '}';
    }
}
  1. 尽可能为变量和方法使用更通用的类型,因为如果您使用安装的LinkedList,它不会改变逻辑。
  2. 你不需要随机的,因为你的牌已经被刷掉了,所以你不需要从刷掉的牌列表中随机选择一个。相反,您应该使用显式链接列表。这将为您提供pollFirst方法,该方法轮询列表的第一个/头,并减少列表,即您的甲板
  3. Suits应该是一个枚举,而不是字符串列表,因为它是一个不变的枚举。所以新的Enum很适合
  4. 玩家的手不应该在玩家类中,有什么原因吗
  5. 你需要更多的类来给游戏一个逻辑和类似的结构
 类似资料:
  • 问题内容: 在Python中,我想编写一个返回另一个函数的函数。返回的函数应该可以通过参数调用,并返回高度和半径为圆柱的体积。 我知道如何从Python中的函数返回 值 ,但是如何返回 另一个函数 ? 问题答案: 使用Python尝试一下: 这样使用它,例如与和: 注意,返回一个函数很简单,只需在函数内部定义一个新函数,然后在最后返回它- 小心地为每个函数传递适当的参数。仅供参考,从另一个函数返回

  • 以下是传入的JSON: 这里的JSONObject[“time”]不是字符串是我将它放入JSONArray时遇到的错误

  • 问题内容: 我想使用AsyncTask从服务器获取Ftp文件夹列表,并将文件夹名称ArrayList返回到主类并更新微调适配器。 在主班我有带适配器的微调器 在AsyncTask中: 那么我应该如何用主类中的ArrayList替换AsyncTask中的arraylist并动态更新Spinner Updater? 问题答案: 您已经将ArrayList 设为 static ,也将其设为public。

  • 问题内容: 我正在寻找在表上创建MySQL触发器。本质上,我正在创建活动流,并且需要记录用户的操作。当用户发表评论时,我希望该表上的数据库触发器触发并: 抓住最后插入的行的ID(注释行的ID)。 使用最后插入的行中的数据对活动表执行INSERT。 实际上,我将复制此触发器以删除评论。 我的问题: LAST_INSERT_ID()是获取ID的最佳方法吗? 如何正确存储最后插入的注释行中的数据,以便在

  • 问题内容: 在Bruce Eckel的“ Thinking In Java,第四版”的第428页(有关类型信息的章节)中,具有以下示例: 也许我有点累,但是我看不到add()方法中对add()的调用是如何工作的。我一直认为它应该有一个引用,或者是一个静态方法(并且我在ArrayList或List中找不到静态add())。我想念什么? 我只是为自己测试,发现这可行: 问题答案: Java为这样的方法