卡片组程序故障?(Java) 公共类甲板 { 卡片[]卡片; 甲板() { //int[]ai=新的int[4]; //ai[0]=6; 卡片=新卡片[30]; 卡c; 对于(int e=0;e

卡片组程序故障?(Java) 公共类甲板 { 卡片[]卡片; 甲板() { //int[]ai=新的int[4]; //ai[0]=6; 卡片=新卡片[30]; 卡c; 对于(int e=0;e,java,class,object,Java,Class,Object,这是我的代码,用于调用一副牌。当我运行这个程序时,我注意到它是有效的,但它不是一次调用它(所有黑桃、红桃和钻石1-10),而是继续调用循环中的牌和它们的号码。如何停止此操作?您只需放下卡一次,因为您正在阵列中的每一张卡上循环。在上面的例子中,你在卡片上循环三次。。。我会避免重复大量代码。此外,幻数和字符串在OOP中是一个巨大的禁忌 公共类甲板{ 私人卡[]卡; 公共静态最终课程卡{ 私服; 私有整数秩; 公共卡(字符串套装,整数等级){ 这套衣服; 这个.等级=等级; } 公共字符串getSui

这是我的代码,用于调用一副牌。当我运行这个程序时,我注意到它是有效的,但它不是一次调用它(所有黑桃、红桃和钻石1-10),而是继续调用循环中的牌和它们的号码。如何停止此操作?

您只需放下卡一次,因为您正在阵列中的每一张卡上循环。在上面的例子中,你在卡片上循环三次。。。我会避免重复大量代码。此外,幻数和字符串在OOP中是一个巨大的禁忌

公共类甲板{
私人卡[]卡;
公共静态最终课程卡{
私服;
私有整数秩;
公共卡(字符串套装,整数等级){
这套衣服;
这个.等级=等级;
}
公共字符串getSuit(){
反诉;
}
public int getRank(){
返回等级;
}
}
公共甲板(){
卡片=新卡片[30];
卡c;
对于(int e=0;e<10;e++){
c=新卡(“黑桃”,e+1);
卡片[e]=c;
}
卡a;
对于(intb=10;b<20;b++){
a=新卡(“心”,b-9);
卡片[b]=a;
}
卡片w;
对于(int y=20;y<30;y++){
w=新卡(“钻石”,y-19);
卡片[y]=w;
}
}
公共卡[]获取卡(){
回程卡;
}
专用静态空位存放卡(甲板){
对于(卡片:deck.getCards()){
System.out.print(“Card:+Card.getSuit()+”,排名为“+Card.getRank());
System.out.println();
}
}
公共静态void main(字符串[]args){
甲板=新甲板();
叠放卡(甲板);
}
}

更好的方法 将套牌和牌数传递到
牌组的构造函数中

你还可以防止非法的牌组大小,购买时检查牌的数量是否可以被套牌的数量整除

公共类甲板{
私人卡[]卡;
公共静态最终课程卡{
私服;
私有整数秩;
公共卡(字符串套装,整数等级){
这套衣服;
这个.等级=等级;
}
公共字符串getSuit(){
反诉;
}
public int getRank(){
返回等级;
}
}
公共甲板(整数尺寸,字符串[]套装){
卡片=新卡片[30];
如果(尺寸%s.length!=0){
抛出新的IllegalArgumentException(“甲板尺寸必须可以被西装数量整除!”);
}
int rankMax=尺寸/长度;
对于(int i=0;i

更好的方法 代码可以通过创建一个卡片组对象来进一步清理,该对象根据可能的套装列表和最小/最大等级生成卡片

公共接口卡{
}
import java.util.ArrayList;
导入java.util.List;
公共抽象类组{
私人名单卡;
公共甲板(){
this.cards=new ArrayList();
}
公开名单{
回程卡;
}
公共卡(列表卡){
这个。卡片=卡片;
}
}
公共类扑克卡实现扑克卡{
私服;
私有整数秩;
公共扑克卡(字符串套装,整数等级){
这套衣服;
这个.等级=等级;
}
公共字符串getSuit(){
反诉;
}
public int getRank(){
返回等级;
}
@凌驾
公共字符串toString(){
返回String.format(“卡片:%s,排名为%d”、this.getSuit()、this.getRank());
}
}
公共类扑克牌组扩展扑克牌组{
私人最终字符串[]套装={“黑桃”、“红心”、“钻石”};
私有最终整数最小秩=1;
私人最终整数最大秩=10;
公共扑克牌组(){
超级();
适用于(细绳西服:西服){

对于(int rank=MIN\u rank;rank“在循环中连续调用”是什么意思?如何调用
Deck()
constructor?您只有1张数组
cards
layDownCards
方法在同一个数组上循环3次那么-为什么从20迭代到30,然后每次减去19
public class Deck 
{
   Card[] cards; 

   Deck( )
   {
       //int [] ai = new int[4];
       //ai[0] = 6;

       cards = new Card[30]; 

       Card c;

       for(int e = 0; e < 10; e++)
       {
       c = new Card("SPADE", e+1);
       cards[e] = c;
       }

       Card a; 

       for(int b = 10; b < 20; b++)
       {
       a = new Card("HEART", b-9);
       cards[b] = a;
       }

      Card w;

      for(int y = 20; y < 30; y++)
      {
       w = new Card("DIAMONDS", y-19);
       cards[y] = w; 
      }
   }
  }
void layDownCards()
   {
       for(Card c: cards)
       {
           System.out.print("Card: " + c.getSuit() + " and the rank is " + c.getRank());
           System.out.println();
       }
       for(Card a: cards)
       {
           System.out.print("Card: " + a.getSuit() + " and the rank is " + a.getRank());
           System.out.println();
       }
       for(Card w: cards)
       {
           System.out.print("Card: " + w.getSuit() + " and the rank is " + w.getRank());
           System.out.println();
       }
   }