摘要:对于【程序员】软考考试而言,试题无疑是最重要的学习资料之一。在软考备考过程中,吃透试题、掌握试题所考知识点、熟悉试题的出题思路,对我们提升分数的效果是最明显的,通过对试题的反复练习,还可以查漏补缺。今天,给大家带来【2014年11月 程序员 下午题】部分试题的详解,一起来看看吧~



1、阅读以下说明和Java程序,填补代码中的空缺,将解答填入答题纸的对应栏内。[说明]很多依托扑克牌进行的游戏都要先洗牌。下面的Java代码运行时先生成一副扑克牌,洗牌后再按顺序打印每张牌的点数和花色。[Java代码]

    import
java.util.List;

    import
java.util.Arrays;

    import
java.util.Collections;

    class Card { //扑克牌类

    public static enum
Face  { Ace,  Deuce,  Three,  Four,  Five,  Six,

    Seven,
 Eight, Nine,  Ten,  Jack, Queen, King };      
       //枚举牌点

    public static enum
Suit { Clubs,  Diamonds, Hearts, Spades };  //枚举花色

    private final Face
face;

    private final Suit
suit;

    public Card( Face
face, Suit suit )  {

    ______ face =
face;

    ______ suit =
suit;

     }

     public Face
getFace()  {  return face;     }

     public Suit
getSuit()   {  return suit;     }

    public String
getCard()  {      //返回String来表示一张牌

    return
String.format( "%s, %s",  face,  suit);

    }

    }

    //牌桌类

    class DeckOfCards
 {

    private List< Card > list;              //声明List以存储牌

    public DeckOfCards
()  {                //初始化牌桌并进行洗牌

    Card[]  deck
= new Card[ 52 ];

    int count = 0;
                     
   //牌数

    //用Card对象填充牌桌

    for  ( Card.
Suit suit : Card. Suit.values()  )  {

    for  ( Card.
Face face : Card. Face. values()  )  {

    ______ = new Card(
face,  suit );

    }

    }

    list =
Arrays.asList( deck );

    Collections.
shuffle( list );        //洗牌

    }

    public void
printCards()

    {

    //按4列显示52张牌

    for ( int i = 0; i
< list.size(); i++ )

    System.out.printf(
"%-19s%s",  list. ______,

    ( ( i+1 ) % 4 == 0
) ? "\n  );

    }

    }

    public class
Dealer {

    public static void
main( String[]  args )   {

    DeckOfCards player
= ______;

    ______ printCards
();

    }

    }
答案:

this.
this.
deck[count++]    或等价表示
get(i).getCard()
new DeckOfCards()
player.


答题解析:

本题考查Java语言程序设计的能力,涉及类、对象、方法的定义和相关操作。要求考生根据给出的案例和代码说明,认真阅读,理清程序思路,然后完成题目。
先考查题目说明。本题目中涉及到扑克牌、牌桌、玩家等类以及洗牌和按点数排序等操作。根据说明进行设计。
Card类内定义了两个static枚举类型,Face枚举扑克牌点数,Suit枚举扑克牌花色。Card类有两个枚举类型的属性,face和suit,而且值不再变化,故用final修饰。
在使用构造方法public Card(Face face,Suit suit)新建一个Card的对象时,所传入的参数指定face和suit这两个属性值。因为参数名称和属性名称相同,所以用this.前缀区分出当前对象。在类Card中包含方法getFace()和getSuit(),分别返回当前对象的face和suit属性值。getCard()方法返回String来表示一张牌,包括扑克牌点数和花色。
牌桌类DeckOfCards包含持有Card类型元素的List类型对象的声明List,用以存储牌。List是Java中的一种集合接口,是Collection的子接口。构造方法中用Card对象填充牌桌并进行洗牌。先用Card对象填充牌桌,即创建52个Card对象加入deck数组,表示牌桌上一副牌(52张)。然后洗牌,即将数组中的Card对象根据花色和点数随机排列,使用集合工具类Collections中的shuffle方法,对以List类型表示的deck数组进行随机排列。Collections是Java集合框架中两个主要工具类之一,用以进行集合有关的操作。
printCards()方法将所有Card对象打印出来,按4列显示52张牌。每张拍的打印用list.get(i)获得list表示的deck中的第i个Card对象,然后进一步调用此对象的getCard()方法,得到String表示的当前一张牌。
玩家类中包括启动发牌洗牌等操作,主入口方法main中实现创建牌桌对象,并调用按4列显示52张牌。在main()中,先初始化DeckOfCards类的对象player,即生成一个牌桌:

DeckOfCards player=new DeckOfCards();
并发牌,即调用player的printCards()方法,实现按4列显示52张牌打印一副扑克牌中每张牌的点数和花色。在printCards()方法体内部,用list调用每个数组元素,并为每个数组元素调用getCard()返回当前对象所表示一张牌的花色和点数。用格式化方法进行打印,即:
System.out.printf("%-19s%s",list.get(i).getCard(),((i+1)%4
==0)?"\n":" ");
因此,空(1)和(2)需要表示当前对象的this.;空(3)需要牌桌上纸牌对象,并将数组元素下标加1,即数组元素deck[count++];空(4)也需要用list对象获得纸牌对象的字符串表示,即list.后的get(i).getCard();空(5)处为创建DeckOfCards类的对象指针player的new DeckOfCards();空(6)需要用对象player调用打印所有纸牌的printCards()函数,即player.。



查看完整试题>>>