java面向对象,从入门到入土,你学费了吗?!!回归正题,要实现以上目的,这里我定义了多个类分步实现对应功能。
在ColorType类中定义了扑克牌的花色(即♠,♥,♣,♦)
ColorType类中代码如下:
public class ColorType {
private String color;
private int size;
public ColorType(String color, int size) {
this.color = color;
this.size = size;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
}
用PokerDot类定义扑克牌的点数 即(2,3,4,5,6,7,8,9,10,J,Q,K,A)
PokerDot中代码如下:
public class PokerDot {
private String num;
private int size;
public PokerDot(String num, int size) {
this.num = num;
this.size = size;
}
public String getNum() {
return num;
}
public void setNum(String num) {
this.num = num;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
}
在PokerManager中保存并初始化一副牌实现洗牌功能
PokerManager类代码如下:
import java.util.*;
public class PokerManager {
//保存一副牌
private Poker[] pokers;
String[] nums = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
String[] colors = {"♠", "♥", "♣", "♦"};
//记录当前取到第几张牌的位置
int currentIndex = 0;
//初始化一副牌
public void initPokers(){
pokers = new Poker[52];
for (int i = 0; i < nums.length; i++) {
for (int j = 0; j < colors.length; j++) {
//定义一张扑克
Poker poker = new Poker();
poker.dot = new PokerDot(nums[i],i);
poker.type = new ColorType(colors[j],4-j);
//将这个张扑克添加到数组中
pokers[i*4+j] = poker;
}
}
//洗牌
shuffle();
}
//洗牌
private void shuffle(){
Random random = new Random();
for (int i = 0; i < 52; i++) {
int i1 = random.nextInt(52);
int i2 = random.nextInt(52);
Poker temp = pokers[i1];
pokers[i1] = pokers[i2];
pokers[i2] = temp;
}
}
//显示一副牌
public void show(){
for(Poker poker:pokers){
System.out.print(poker+" ");
}
System.out.println();
}
//获取一张扑克
public Poker getPoker(){
Poker poker = pokers[currentIndex];
currentIndex++;
return poker;
}
}
用Poker类实现牌的大小比较(花色,点数)
Poker类代码如下:
public class Poker {
PokerDot dot;
ColorType type;
@Override
public String toString() {
//3♠
return dot.getNum() + type.getColor();
}
/**
* this:指访问这个方法的对象本身
* 两张牌比大小
* return: 1 this > other
* 0 this = other
* -1 this < other
*/
public int compare(Poker other){
//先比点数
if (this.dot.getSize() > other.dot.getSize()){
return 1;
} else if(this.dot.getSize() < other.dot.getSize()){
return -1;
}else{
//点数相同 比 花色
if (this.type.getSize() > other.type.getSize()){
return 1;
}else if(this.type.getSize() < other.type.getSize()){
return -1;
}else{
return 0;
}
}
}
}
最后定义一个MyClass类运行程序
MyClass类中代码如下:
class MyClass {
public static void main(String[] args) {
/**
* 产生一副扑克牌
* 扑克牌 数字 + 花色
* 1. 找对象 牌 - 扑克管理器
* 2. 定义类 Poker: num color
* compare 比较两张牌的大小
* PokerManager:pokers
* initPokers() 产生牌
* show() 显示内容
*
*/
PokerManager manager = new PokerManager();
manager.initPokers();
manager.show();
Poker p1 = manager.getPoker();
Poker p2 = manager.getPoker();
int result = p1.compare(p2);
if (result > 0){
System.out.println(p1 + ">" + p2);
}else {
System.out.println(p1 + "<" + p2);
}
}
}
运行结果如下: