import java.util.*; 
public class ApplycationCard 

public static void main(String[] args) 
{ Deck deckcards=new Deck(); 
deckcards.riffleCard(); 
deckcards.dealCard(); } 

一个类; 
import java.util.*; 
public class Deck 
{ public Card[] cards; 
public Deck() { 
cards=new Card[52]; 
for(int i=0;i <4;i++) 

for(int j=1;j <14;j++) 

cards[i*13+j-1]=new Card(Suit.values()[i],Rank.values()[j]); 


for(Card e:cards) 
System.out.println(e.toString()); 
} public void riffleCard() 

Card[] tempCard=new Card[52]; 
for(int i=52;i>=1;i--) 
{ int temp=(int)Math.round((Math.random()*100))%i; 
tempCard[52-i]=cards[temp]; 
cards[temp]=cards[i-1]; 

for(int i=0;i <52;i++) 
cards[i]=tempCard[i]; } 
public void dealCard() 

Card[] tempOne=new Card[13]; 
Card[] tempTwo=new Card[13]; 
Card[] tempThree=new Card[13]; 
Card[] tempFour=new Card[13]; for(int i=0;i <52;) 

tempOne[i/4]=cards[i]; 
tempTwo[(i-1)/4]=cards[i+1]; 
tempThree[(i-2)/4]=cards[i+2]; 
tempFour[(i-3)/4]=cards[i+3]; 
i+=4; 

for(Card e:tempOne) 
System.out.println(e.toString()); 
for(Card e:tempTwo) 
System.out.println(e.toString()); 
for(Card e:tempThree) 
System.out.println(e.toString()); 
for(Card e:tempFour) 
System.out.println(e.toString()); } 

一个类; import java.util.*; enum Suit{CLUBS,SPADE,DIAMONDS,HEARTS} 
enum Rank{Ace,Deuce,Three,Four,Five,Six,Seven,Eight,Nine,Ten,Jack,Queen,King} 
public class Card 

public Suit suit; 
public Rank rank; 
public void Card() 
{} public Card(Suit newsuit,Rank newrank) 

suit=newsuit; 
rank=newrank; 
} public String toString() 

return "The"+rank+"of"+suit+"s"; 
} } 
一个类; 
运行,mian出错Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException,编译正常通过。我是新手,希望高手解答。(一副牌,import java.util.*; 
public class ApplycationCard //应用类,主函数

public static void main(String[] args) 
{ Deck deckcards=new Deck(); 
deckcards.riffleCard(); 
deckcards.dealCard(); } 

一个类; 
import java.util.*; 
public class Deck //定义一个牌
{ public Card[] cards; 
public Deck() { 
cards=new Card[52]; 
for(int i=0;i <4;i++) 

for(int j=1;j <14;j++) 

cards[i*13+j-1]=new Card(Suit.values()[i],Rank.values()[j]); 


for(Card e:cards) 
System.out.println(e.toString()); 
} public void riffleCard() //洗牌

Card[] tempCard=new Card[52]; 
for(int i=52;i>=1;i--) 
{ int temp=(int)Math.round((Math.random()*100))%i; 
tempCard[52-i]=cards[temp]; 
cards[temp]=cards[i-1]; 

for(int i=0;i <52;i++) 
cards[i]=tempCard[i]; } 
public void dealCard() //发牌

Card[] tempOne=new Card[13]; 
Card[] tempTwo=new Card[13]; 
Card[] tempThree=new Card[13]; 
Card[] tempFour=new Card[13]; for(int i=0;i <52;) 

tempOne[i/4]=cards[i]; 
tempTwo[(i-1)/4]=cards[i+1]; 
tempThree[(i-2)/4]=cards[i+2]; 
tempFour[(i-3)/4]=cards[i+3]; 
i+=4; 

for(Card e:tempOne) 
System.out.println(e.toString()); 
for(Card e:tempTwo) 
System.out.println(e.toString()); 
for(Card e:tempThree) 
System.out.println(e.toString()); 
for(Card e:tempFour) 
System.out.println(e.toString()); } 

一个类; import java.util.*; enum Suit{CLUBS,SPADE,DIAMONDS,HEARTS} 
enum Rank{Ace,Deuce,Three,Four,Five,Six,Seven,Eight,Nine,Ten,Jack,Queen,King} 
public class Card //把花色和大小定义一个类

public Suit suit; 
public Rank rank; 
public void Card() 
{} public Card(Suit newsuit,Rank newrank) 

suit=newsuit; 
rank=newrank; 
} public String toString() 

return "The"+rank+"of"+suit+"s"; 
} } 
一个类; 
运行,mian出错Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException,编译正常通过。我是新手,希望高手解答。谢谢(一副牌,除去大小王,分给四个人)

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主截止到2008-06-19 10:11:05的汇总数据:
    注册日期:2007-9-12
    上次登录:2008-6-19
    发帖数:2
    结贴数:0
    结贴率: 0.00%
    如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
      

  2.   

    for(int i=52;i>=1;i--)

    好像回过这个帖子
      

  3.   

    for(int j=1;j <14;j++) 

    cards[i*13+j-1]=new Card(Suit.values()[i],Rank.values()[j]); 

    主要是这里出得问题。是把int转换成枚举(Suit和Rank)类型。不知道如何简答。
      

  4.   

    怎么又一个
    估计是你的逻辑有问题,
    你这代码看 不大明白,你如果用数组的循环时,最好用length属性获得数组长度,
    否则很容易出现在数组越界异常,
    也没准出在你这里i*13+j-1,自己看看吧
      

  5.   

    for(int i=0;i <52;) 

    tempOne[i/4]=cards[i]; 
    tempTwo[(i-1)/4]=cards[i+1]; 
    tempThree[(i-2)/4]=cards[i+2]; 
    tempFour[(i-3)/4]=cards[i+3]; 
    i+=4; 
    } 你这里应该有问题 
      

  6.   

    谢谢5楼!!!!确实哪里有问题。我修改后,问题依旧。错误指示
    for(int j=1;j <14;j++) 

    cards[i*13+j-1]=new Card(Suit.values()[i],Rank.values()[j]); //此行

    主要是这里出得问题。是把int转换成枚举(Suit和Rank)类型。不知道如何转换?
      

  7.   

    改为cards[i*13+j-1]=new Card(Suit.values()[i],Rank.values()[j - 1]);
      

  8.   

    感谢7楼,在你的提示下,我把问题解决了。但是出现另一个问题,cards[temp]=cards[i-1]; 这条语句有错误,需要改cards[temp]=cards[i]; 就可以了,问题已经解决。谢谢大家!