我写的 乱序 洗牌 代码,请大家给点 意见,多多批评

[code="java"]

import java.util.ArrayList;
import java.util.List;
import java.io.*;

public class Cards {
private List list;

public Cards() {
    list = new ArrayList<String>();
}

public void put(String card) {
    list.add(card);
}

public void get() {
    System.out.println("你拿到的牌是");
    for (int i = 0; i < list.size(); i++) {
        String cad = list.get(i);
        System.out.print(cad + ",");
    }
}

public static void main(String[] args) {
    String[] cards = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10",
            "J", "Q", "K" };
    String color[] = { "黑桃", "红桃", "梅花", "方块" };
    Cards deck = new Cards();
    for (int i = 0; i < cards.length; i++) {
        int num = 0;
        if (Math.random() <= 0.25) {
            num = 1;
        }
        if (Math.random() > 0.25 && Math.random() <= 0.5) {
            num = 2;
        }
        if (Math.random() > 0.5) {
            num = 3;
        }
        String suit = color[num];
        String face = cards[(int) Math.ceil((Math.random() * 20 + 4) / 2)];
        String card = suit + face;
        deck.put(card);
    }
    deck.get();

}

}

[/code]
[b]问题补充:[/b]
[code="java"]
//我修改后的代码,觉得还行

import java.util.ArrayList;
import java.util.List;

public class Cards {
private List list;

public Cards() {
    list = new ArrayList<String>();
}

public void put(String card) {
    list.add(card);
}

public void get() {
    System.out.println("你的牌是");
    String cad;
    for (int i = 0; i < list.size(); i++) {
        cad = list.get(i);
        System.out.print(cad + ",");
    }
}

public static void main(String[] args) {
    String[] cards = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10",
            "J", "Q", "K" };
    String color[] = { "黑桃", "红桃", "梅花", "方块" };
    Cards deck = new Cards();
    double random;
    int num = 0;
    for (int i = 0; i < cards.length; i++) {
        random = Math.random();
        if (random > 0.25 && random <= 0.5) {
            num = 1;
        }
        if (random > 0.5&&random<=0.75) {
            num = 2;
        }
        if (random > 0.75) {
            num = 3;
        }
        String suit = color[num];
        String face = cards[(int) Math.ceil((Math.random() * 20 + 4) / 2)];
        String card = suit + face;
        deck.put(card);
    }
    deck.get();
}

}

[/code]
[b]问题补充:[/b]
[code="java"]
import java.util.ArrayList;
import java.util.List;
// 应该是这个
public class Cards {
private List list;

public Cards() {
    list = new ArrayList<String>();
}

public void put(String card) {
    list.add(card);
}

public void get() {
    System.out.println("你的牌是");
    String cad;
    for (int i = 0; i < list.size(); i++) {
        cad = list.get(i);
        System.out.print(cad + ",");
    }
}

public static void main(String[] args) {
    String[] cards = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10",
            "J", "Q", "K" };
    String color[] = { "黑桃", "红桃", "梅花", "方块" };
    Cards deck = new Cards();
    double random;
    int num = 0;
    String suit;
    String face;
    for (int i = 0; i < cards.length; i++) {
        random = Math.random();
        if (random > 0.25 && random <= 0.5) {
            num = 1;
        }
        if (random > 0.5&&random<=0.75) {
            num = 2;
        }
        if (random > 0.75) {
            num = 3;
        }
        suit = color[num];
        face = cards[(int) Math.ceil((Math.random() * 20 + 4) / 2)];
        String card = suit + face;
        deck.put(card);
    }
    deck.get();
}

}

[/code]

楼上的很细心,哈哈

帮助整理了一下

[code="java"]

import java.util.ArrayList;
import java.util.List;
import java.io.*;

public class Cards {
private List list;

public Cards() {
    list = new ArrayList<String>();
}

public void put(String card) {
    list.add(card);
}

public void get() {
    System.out.println("你拿到的牌是");
    String cad;
    for (int i = 0; i < list.size(); i++) {
        cad = list.get(i);
        System.out.print(cad + ",");
    }
}

public static void main(String[] args) {
    String[] cards = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10",
            "J", "Q", "K" };
    String color[] = { "黑桃", "红桃", "梅花", "方块" };
    Cards deck = new Cards();
    String suit;
    String face;
    String card;
    double random;
    int num = 0;
    for (int i = 0; i < cards.length; i++) {
        num = 0;
        random = Math.random();
        if (random <= 0.25) {
            num = 1;
        }
        if (random > 0.25 && random <= 0.5) {
            num = 2;
        }
        if (random > 0.5) {
            num = 3;
        }
        suit = color[num];
        face = cards[(int) Math.ceil((random * 20 + 4) / 2)];
        card = suit + face;
        deck.put(card);
    }
    deck.get();

}

}
[/code]

初步看,还可以

[code="java"]if (Math.random() <= 0.25) {
num = 1;
}
if (Math.random() > 0.25 && Math.random() <= 0.5) {
num = 2;
}
if (Math.random() > 0.5) {
num = 3;
}[/code]
[quote="lovewhzlq"]初步看,还可以[/quote]
这串if-else问题很大呀。Math.random()有副作用,每次调用都不一定得到一样的值。应该在每轮循环开头int r = Math.random()之后就用r才好。
[code="java"]int r = Math.random();
if (r <= 0.25) {
num = 1;
}
if (r > 0.25 && r <= 0.5) {
num = 2;
}
if (r > 0.5) {
num = 3;
}[/code]

这个程序在SUN 官方教程 java tutorial 都有。。。并且还演示了使用Java 5枚举特性的版本。

JDK1.6的Collections有乱序的方法shuffle