java 学习

 代码如下:
import java.util.StringTokenizer;

class Deck{
Card [] cards;
Deck(){
cards = new Card[52];//54张牌
}
Deck(int i){
cards =new Card[i];
}
public void printDeck(){//打引一副纸牌
for(int i=0;i <this.cards.length;i++){
this.cards[i].printCard();
}
}
public void swapCards(Deck deck){//洗牌,算法如下
Card tcard=new Card();//暂存
for (int j = 0; j <deck.cards.length; j++)
{
int r=( int )Math.random()*(deck.cards.length+1);
tcard.setR(deck.cards[j].rank);
tcard.setS(deck.cards[j].suit);
deck.cards[j].setR(deck.cards[r].rank);
deck.cards[j].setS(deck.cards[r].suit);
deck.cards[r].setR(tcard.rank);
deck.cards[r].setS(tcard.suit);//将j位置的扑克牌与随机取的扑克牌交换位置;
}
}
public void sortDeck(){//将一副扑克牌排序
Card tcard=new Card();//暂存
Card ttcard= new Card();//暂存
tcard.setR(this.cards[0].rank);
tcard.setS(this.cards[0].suit);
for(int k=0;k <this.cards.length;k++)
{
for(int j=1;j <this.cards.length; j++)
{
if(tcard.suit>this.cards[j].suit && tcard.rank>this.cards[j].rank)
{
tcard.setR(this.cards[j].rank);
tcard.setS(this.cards[j].suit);//将j位置的扑克牌与随机取的扑克牌交换位置;
}
}
ttcard.setR(this.cards[k].rank);
ttcard.setS(this.cards[k].suit);
this.cards[k].setR(tcard.rank);
this.cards[k].setS(tcard.suit);
tcard.setR(ttcard.rank);
tcard.setS(ttcard.suit);
}
//参考,采用选择排序,算法如下:它将一次又一次的遍历扑克牌数组,
//第一次循环时,算法将找出最小的一张牌,并将它交换到数组第0个位置;
//第i次循环时,找出I右侧剩下数组内最小的一张牌,
//并将它交换到数组第i个位置
}
}
class Card {
final static String[] SUITS = {"Clubs","Diamonds","Hearts","Spades"};
final static String[] RANKS = {"Ace", "2", "3", "4" ,"5", "6" , "7" , "8" , "9" , "10" , "Jack" , "Queen" , "King" };
int suit;
int rank;

Card(){
this.suit = 0;
this.rank = 0;
}

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

void setS(int i){
this.suit=i;
}
void setR(int i){
this.rank=i;
}
//打印一张扑克牌
public void printCard(){
System.out.println(RANKS[this.rank] + " of " + SUITS[this.suit]);
}

public Card parseCard(String st1){
Card testC=new Card();
StringTokenizer fff = new StringTokenizer(st1," ");//空格分割
String str="";
while (fff.hasMoreTokens()){
 str = fff.nextToken();
 for(int i=0;i <SUITS.length;i++){
 if(str.equals(SUITS[i]))
 testC.setS(i);
 }
 for(int j=0;j <RANKS.length;j++){
 if(str.equals(RANKS[j]))
 testC.setR(j);
 }
}
return testC;
}
//判断两张扑克牌是否相同
public boolean sameCard(Card c1,Card c2){
return (c1.suit == c2.suit && c1.rank == c2.rank);
}

//比较两张扑克牌的大小
public int compareCard(Card c1,Card c2){
if (c1.suit > c2.suit) return 1;
if (c1.suit  < c2.suit) return -1;
if (c1.rank > c2.rank) return 1;
if (c1.rank  < c2.rank) return -1;
return 0;
}
}
public class TESTCard {
public static void main(String[] args){
Card cc=new Card(1,2);
cc.printCard();
//cc=cc.parseCard(args[0]);//测试输入
Card[] test1= new Card[52];
Deck test=new Deck();
for(int i=0;i <test1.length;i++)//初始化一副牌
{
test1[i].setR(i%5);
test1[i].setS(i%14);
}
test.printDeck();//测试初始化
}
}

编译无措,执行结果:
3 of Diamonds
Exception in thread "main" java.lang.NullPointerException
at TESTCard.main(TESTCard.java:124)
没有达到预期目的,原因分析:

没有初始化好对象数组?

总结:对象数组需要对每个对象进行初始化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值