[主观题]

阅读以下说明和Java代码,回答问题

[说明]

任何一种程序都是为了解决问题而撰写的,解决问题时需要实现一些特定的运算法则。在策略(Strategy)模式下,可以更换实现算法的部分而不留痕迹,切换整个算法,简化改为采用其他方法来解决同样问题。

以下是一个“剪刀石头布”游戏。猜拳时的“策略”有2种方法:第一种是“猜赢后继续出同样的招式”(WinningStrategy),第二种是“从上一次出的招式种,以概率分配方式求出下一个招式的几率”(ProbStrategy)。程序中定义了Hand类表示猜拳时的“手势”,类内部以0(石头)、1(剪刀)、2(布)来表示。Hand类的实例只会产生3个。

以下是Java语言实现,省略了不相关属性及方法,方法实现体亦有所省略,能够正确编译通过。

[Java代码]

//Hand.java文件

public class Hand{

public static final int HANDVALUE_GUU = 0; //石头

public static final int HANDVALUE_CHO = 1; //剪刀

public static final int HANDVALUE_PAA = 2; //布

public static final Hand[] hand = {

new Hand(HANDVALUE_GUU),

new Hand(HANDVALUE_CHO),

new Hand(HANDVALUE_PAA),

};

private int handvalue;(1) Hand(int handvalue){

this.handvalue = handvalue;

}

public (2) Hand getHand(int handvalue)(//从值取得对象实例

return hand[handvalue];

}

}

//Strategy.java文件

public interface Strategy{

public (3) Hand nextHand();

}

//ProbStrategy.java文件

import java.util.Random;

public class ProbStrategy implements Strategy{

public Hand nextHand(){

int handvalue = 0;

/*省略具体实现*/

return Hand.getHand(handvalue);

}

}

//WinningStrategy.java文件

import java.util.Random;

public class WinningStrategy implements Strategy {

/*省略了不相关属性*/

public Hand nextHand(){

if(!won){

prevHand = Hand.getHand(random.nextInt(3));

}

return prevHand;

}

}

//Player.java文件

public class Player {

private String name;

private Strategy strategy;

public Player(String name, (4) strategy){

this.name = name;

this.strategy = strategy;

}

public Hand nextHand(){//向战略请示手势

return (5) ;

}

}

参考答案与解析:

相关试题

阅读以下函数说明和C代码,回答问题[说明] 任何一种程序都是为了解决问题而撰写的

[试题]阅读以下函数说明和C代码,回答问题[说明]任何一种程序都是为了解决问题而撰写的,解决问题时需要实现一些特定的运算法则。在策略(Strategy)模式下,可以更换实现算法的部分而不留痕迹,切换整个算法,简化改为采用其他方法来解决同样问题。以下是一个“剪刀石头布”游戏。猜拳时的“策略”有2种方法:第一种是“猜赢后继续出同样的招式”(WinningStrategy),第二种是“从上一次出的招式种,以概率分配方式求出下一个招式的几率”(ProbStrategy)。程序中定义了Hand类表示猜拳时的“手势”

  • 查看答案
  • 阅读下列函数说明和C£«£«代码,回答问题[说明] 任何一种程序都是为了解决问题

    [试题]阅读下列函数说明和C++代码,回答问题[说明]任何一种程序都是为了解决问题而撰写的,解决问题时需要实现一些特定的运算法则。在策略(Strategy)模式下,可以更换实现算法的部分而不留痕迹,切换整个算法,简化改为采用其他方法来解决同样问题。以下是一个“剪刀石头布”游戏。猜拳时的“策略”有2种方法:第一种是“猜赢后继续出同样的招式”(WinningStrategy),第二种是“从上一次出的招式中,以概率分配方式求出下一个招式的几率”(ProbStrategy)。程序中定义了Hand类表示猜拳时的“手

  • 查看答案
  • 阅读以下应用说明、图和Java代码,根据要求回答问题1至问题5。 (说明) St

    [试题]阅读以下应用说明、图和Java代码,根据要求回答问题1至问题5。(说明)Stack类是java. ntil包中专门用来实现栈的工具类。以下Java程序是一个不使用库函数而实现字符串反转的程序。例如,输入:123456,则输出:654321:输入:asdfeg,则输出:gefdsa。(Java程序)import java.applet.Applet;import java.awt.*;import java.awt.event.*;import java.util.*;public class Us

  • 查看答案
  • 阅读以下说明和Java代码,回答问题[说明] 在某些系统中,存在非常复杂的对象,

    [试题]阅读以下说明和Java代码,回答问题[说明]在某些系统中,存在非常复杂的对象,可以采用循序渐进的方式进行组合将小对象组合,成复杂的对象。以下实例展示了Builder(生成器)模式。该实例用来建立“文件”,文件内容包括:一个标题、一串字符以及一些有项目符号的项目。Builder类规定组成文件的方法,Director类利用这个方法产生一份具体的文件。图6-1显示了各个类间的关系。以下是Java语言实现,能够正确编译通过。[Java代码]//Builder. java文件public (1) class

  • 查看答案
  • 阅读以下说明和Java代码,回答问题[说明] 对多个元素的聚合进行遍历访问时,需

    [试题]阅读以下说明和Java代码,回答问题[说明]对多个元素的聚合进行遍历访问时,需要依次推移元素,例如对数组通过递增下标的方式,数组下标功能抽象化、一般化的结果就称为迭代器(Iterator)。模式以下程序模拟将书籍(Book)放到书架(BookShelf)上并依次输出书名。这样就要涉及到遍历整个书架的过程。使用迭代器Iterator实现。图6-1显示了各个类间的关系。以下是JAVA语言实现,能够正确编译通过。[图6-1][Java代码]//Iterator. java文件public interfa

  • 查看答案
  • 阅读以下技术说明和程序代码,根据要求回答问题。 [说明] 某公司用ASP£«SQ

    [主观题]阅读以下技术说明和程序代码,根据要求回答问题。[说明]某公司用ASP+SQL Server开发的电子商务网站系统,提供了商品查询、网上购物车、订单管理、后台商品管理和支付等功能。图6~11是用ASP实现的电子商务网站的主页。系统的数据库名为 shangwu,所在服务器IP地址为211.54.32.21,其中,user表用于存放注册用户名和密码,结构如表 6-19所示。设计该电子商务网站时,某页面框架代码如下。该网页代码中定义了(1)个框架。

  • 查看答案
  • 阅读以下技术说明、Java源程序和运行测试部分,根据要求回答问题1和问题2。(说

    [试题]阅读以下技术说明、Java源程序和运行测试部分,根据要求回答问题1和问题2。(说明)1.HTTP◆ HTTP请求消息示例G.ET/index,htmlHTTP/1.1A.ccept:image/gif,image/jpeg,*/*A.ccept-Language:zh-chA.ccept-encoding:gzip,deflateUser-Agent:Mozilla/4.0(compatible: MSIE6.0;Windows 2003)H.ost:localhost:8080C.onnecti

  • 查看答案
  • 阅读下列程序说明和C代码,回答问题1~2。[说明] 本程序用古典的Eratost

    [试题]阅读下列程序说明和C代码,回答问题1~2。[说明]本程序用古典的Eratosthenes的筛法求从2起到指定范围内的素数。如果要找出2至10中的素数,开始时筛中有2到10的数,然后取走筛中的最小的数2,宜布它是素数,并把该素数的倍数都取走。这样,第一步以后,筛子中还留下奇数3、5、7、9:重复上述步骤,再取走最小数3,宣布它为素数,井取走3的倍数,于是留下5、7。反复重复上述步骤,直至筛中为空时,工作结束,求得2至 10中的全部素数。程序中用数组sieve表示筛子,数组元素sieve[i]的值为1

  • 查看答案
  • 阅读以下应用说明、图和C£«£«代码,根据要求回答问题1至问题3。 [说明] 已

    [主观题]阅读以下应用说明、图和C++代码,根据要求回答问题1至问题3。[说明]已知以下C++程序运行时的输出结果如下。1:11:11:1[C++程序]01 include <iostream>02 using namespace std;03 class Stock{04 protect:05 (1) { };06 Stock(int n, int pr=1) {07 shares = n; share_val=pr;08 };09 void ~Stock() { };10 public:11 //成员

  • 查看答案
  • 阅读以下说明和C程序,回答问题。[说明] 下面的程序用Dole Rob算法生成N

    [试题]阅读以下说明和C程序,回答问题。[说明]下面的程序用Dole Rob算法生成N阶(N为奇数)魔方阵(各行、列、对角线数字之和相等)。该算法的过程为:从1开始,按如下方法依次插入各自然数,直到N2为止。①在第一行的正中插入1。②新位置应当处于最近插入位置的右上方,若该位置已超出方阵的上边界,则新位置取应选列的最下一个位置;若超出右边界,则新位置取应选行的最左一个位置。③若最近插入的元素是N的整数倍,则选同列的下一行位置为新位置。例如,3阶魔方阵如下所示:8 1 63 5 74 9 2[C程序]inc

  • 查看答案
  • 阅读以下说明和Java代码,回答问题[说明] 任何一种程序都是为了解决问题而撰写