有 Java 编程相关的问题?

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

java有人能指出这段代码的错误吗?这是一个卡片重绘程序,但由于某些原因,一些卡片会重复

public class redrawCards {

    final int MAX_CARDS = 52;
    int[] number = {1,2,3,4,5,6,7,8,9,10,11,12,13};
    char[] suit = {'D','H','S','C'};            //diamond,heart,spade,club
    String[] card = new String[MAX_CARDS];

    public redrawCards(){
        boolean finalize = false;
        for(int i = 0; i < MAX_CARDS; i++) {
            do{
                StringBuilder temp = new StringBuilder();
                boolean notFinal = false;
                int randomSuit = randomNumGenerator(4, 1); //creating random suits
                int randomNum = randomNumGenerator(13, 1); //creating random numbers

                temp.append(suit[randomSuit - 1]).append(number[randomNum - 1]);
                card[i] = temp.toString();

                System.out.println(i + ": " + card[i]);

                if(i > 1) {
                    for (int j = 0; j < i; j++) {
                        System.out.println("......" + card[i] + " " + card[j]);
                        if (card[i] == card[j]) {
                            notFinal = true;
                            System.out.println("000000");
                        }
                    }
                }
                if(!notFinal){
                    finalize = true;
                }
            }while (!finalize);
        }
        printAllCards();
    }

    private void printAllCards(){ 
        for(int i = 0; i < MAX_CARDS; i++){
            System.out.println(card[i]);
        }
    }

    private int randomNumGenerator(int upperBound, int lowerBound){
        return (lowerBound + (int)(Math.random() * ((upperBound - lowerBound) + 1)));
    }

    public static void main(String[] args){
        new redrawCards();
    }

}

共 (1) 个答案

  1. # 1 楼答案

    你为什么这么复杂?你可以简单地创建一个列表,循环浏览每件西装和号码,然后将它们保存到列表中。然后你可以调用Collections#shuffle方法并用它洗牌。如果你需要限制你的牌组,你可以在洗牌后退出所有太多的牌