【问题标题】:Object Oriented 21 card game not working?面向对象的 21 张纸牌游戏不起作用?
【发布时间】:2016-11-18 02:11:39
【问题描述】:

好的,所以我现在的问题是我的老师要我们做 3 节课。一个类(PlayingCard)为每张牌返回一个等级和花色,这是我开始工作的。另一个,deckofplayingcards,应该使用 52 个扑克牌对象数组的 2 个实例变量,以及牌组中最上面一张牌的索引。我的构造函数给我带来了问题。我将我的值作为字符串从 PlayingCard 传回,并且我需要将一组唯一对象卡声明为这些字符串。至少可以说,它不起作用。我附上了他具体要求的照片。 H.W. assignment descirption

我现在的问题是,我不能使对象数组(在代码末尾的 DeckOfPlayingCards 中)等于字符串(在 PlayingCard 中的 finalValue 方法中生成)。请问有什么帮助吗?此外,我的硬件/代码的任何其他更正或提示将不胜感激。这是我的代码。它会在正常工作时返回,例如 1 of heart。 扑克牌:

public class PlayingCard {

private String suit;
private String rank;

public String getSuit(String suitCounter){
    String newSuit = null;
    switch(suitCounter){
    case("S"):
        newSuit = "Spades";
    break;
    case("H"):
        newSuit = "Hearts";
    break;
    case("C"):
        newSuit = "Clubs";
    break;
    case("D"):
        newSuit = "Diamonds";
    break;
    }
    suit = newSuit;
    return suit;
}
public String getValue(int valueCounter){
    String newValue = null;
    switch(valueCounter){
    case(1):
        newValue = "Ace";
    break;
    case(2):
        newValue = "2";
    break;
    case(3):
        newValue = "3";
    break;
    case(4):
        newValue = "4";
    break;
    case(5):
        newValue = "5";
    break;
    case(6):
        newValue = "6";
    break;
    case(7):
        newValue = "7";
    break;
    case(8):
        newValue = "8";
    break;
    case(9):
        newValue = "9";
    break;
    case(10):
        newValue = "10";
    break;
    case(11):
        newValue = "Jack";
    break;
    case(12):
        newValue = "Queen";
    break;
    case(13):
        newValue = "King";
    }
    rank = newValue;
    return rank;
}
public String finalValue(String passedSuit, int passedValue){
    String newSuit = getSuit(passedSuit);
    String newValue = getValue(passedValue);
    return newValue + " of " + newSuit
}
}

DeckOfPlayingCards

public class DeckOfPlayingCards {
PlayingCard[] card = new PlayingCard[52];
PlayingCard cardTop = new PlayingCard();

DeckOfPlayingCards(){
    cardTop = card[0];
    String randomNumberResult=null;
    String randomNum1 = null;
    String newval=null;
    int randomNumGen1 = (int)(Math.random() * (4-1))+1;
    if(randomNumGen1==1){
        newval = "H";
    }
    else if(randomNumGen1==2){
        newval = "S";
    }
    else if(randomNumGen1==3){
        newval = "C";
    }
    else if(randomNumGen1==4){
        newval = "D";
    }
    randomNum1 = newval;
    int randomNumGen2 = (int)(Math.random() * (13-1))+1;
    int randomNum2 = randomNumGen2;
    PlayingCard finalVal = new PlayingCard();
    for(int i=0; i<card.length; i++){
        card[i] = finalVal.finalValue(randomNum1, randomNum2);
    }
}
}

【问题讨论】:

  • 您的问题始于 PlayingCard —— getter 方法不应该需要参数。相反,您应该使用真正的 getter,以及设置字段的构造函数。
  • 它比它需要的复杂得多。
  • 我会为 Suit 使用枚举,为 Rank 使用枚举

标签: java arrays oop object random


【解决方案1】:

您不应该将“最终值”字符串保存到数组中,而应该将其保存到卡片中。由于该数组已经填充了PlayingCards,因此您应该修改您的方法以将新的西装/值分配给您的类中的字段,以便您可以在需要时调用finalValue()

我建议用 Map 实现替换你的 switch 语句,而不是为了快速访问和更清晰的代码(如果你还没有学习这些,那么我不建议将它们放在家庭作业中)。正如@Hovercraft Full of Eels 所说,你的代码有点复杂,应该使用构造函数而不是mutators(setter)。

【讨论】:

  • 我对你的意思还是有点困惑。就像,我不知道如何去做你所说的。你能澄清一下吗?对不起,我仍然是 java 的初学者。
猜你喜欢
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多