java语言的科学与艺术 第六章 课后编程

欢迎大家转载,为保留作者成果,转载请注明出处,http://blog.youkuaiyun.com/netluoriver,有些文件在资源中也可以下载!如果你没有积分,可以联系我索要!

1、

package SixthCharter;

/*
* File: Poker.java
* ---------------------------
* 这是第6章的第一题
* Author luoriver
*/

import acm.program.*;

import acm.util.*;

public class Poker extends ConsoleProgram {
	public void run(){
		println("这个程序是随机显示选择的扑克");
		
		while(true){
			println();
			int i = readInt();
			showPoker();
			if (i==2) break;
		}
	}
	
	/*
	 * 显示随机的扑克牌
	 */
	private void showPoker(){
		int num = rgen.nextInt(1,13);
	//	rgen.setSeed(2);
		switch(num){
			case 1: 
				print("Ace"); break;
			case 11: 
				print("Jack"); break;
			case 12:
				print("Queen"); break;
			case 13:
				print("King"); break;
			default: print(num);
		}
		
		print(" of ");
		int color = rgen.nextInt(1,4);
		switch(color){
			case 1: 
				print ("Spades"); break;
			case 2: 
				print("Diamonds"); break;
			case 3:
				print("Clubs"); break;
			case 4:
				print("Hearts"); break;
		}
		
		
		
	}
	
	/*create an instance variable for the random number generator
	 */
	private RandomGenerator rgen =RandomGenerator.getInstance();
}

2、

package SixthCharter;

/*
* File: TossCoin.java
* ---------------------------
* 这是第6章的第2题
* Author luoriver
*/

import acm.program.*;
import acm.util.*;

public class TossCoin extends ConsoleProgram {
	public void run(){
		println("这个程序是抛硬币,一直抛到出现3个连续的下面为止,并显示被抛的总次数:");
		int toss_num = 0;
		//设置检查点,是否到了连续的次数
		int n = 0;
				
		while(n < CHECK_NUM){
			tossCoin();
			toss_num ++;
			if(tossCoin().equals("Head")){
				println("Head");
				n++;	
			}else{
				println("Tails");
				n = 0;
			}
		}
		println("一共运行了" + toss_num + "次。");
		
	}
	
	/**
	 * 这里是进行的投币方法
	 */
	private String tossCoin(){
		int n = rgen.nextInt(1, 2);
		return returnContent(n);
	}
	
	
	/**
	 * 这里是显示返回硬币的哪一面
	 * @Head
	 * @Tails
	 */
	
	private String returnContent(int num){
		if(num == 1){
			return "Head"; 
		 }else{
			 return "Tails";  
		 }
	}
		
	
	/*create an instance variable for the random number generator
	 */
	private RandomGenerator rgen =RandomGenerator.getInstance();
	private static final int CHECK_NUM = 3;
}

3、

package SixthCharter;

/*
* File: ThrowDart.java
* ---------------------------
* 这是第6章的第3题
* Author luoriver
*/

import acm.program.*;
import acm.graphics.*;
import acm.util.*;

public class ThrowDart extends ConsoleProgram {
	public void run(){
		println("这个程序来用投镖来模拟正方形与圆形的面积之比是一个近似的 PI值:");
		
		double SquareArea = 4 * (R * R);
		double CircleArea = PI * (R * R);
		println("圆形与正方形的面积之比为" + CircleArea / SquareArea);
		println("投镖时落在圆形与正方形内的次数之比为" + throwDart());
		//println(3.14/4);
		//throwDart();
	}
	
	private double throwDart(){
		double circlenum = 0;
		double squarenum = 0;
		
		while(squarenum < ThrowNum){
			double rx = rgen.nextDouble(-1.0, 1.0);
			double ry = rgen.nextDouble(-1.0, 1.0);
	//		rgen.setSeed(2);
			if(((rx * rx) + (ry * ry)) < 1){
				circlenum ++;
				squarenum ++;
			}else{
				squarenum ++;
			}
		}
		println();
		println("投在圆形内的次数为" + circlenum);
		println("投在正方形内的次数为" +squarenum);
		
		return circlenum / squarenum;
		
	}
	
	
		
		
	
	/*create an instance variable for the random number generator
	 */
	private RandomGenerator rgen =RandomGenerator.getInstance();
	
	//设置投镖的次数
	private static final int ThrowNum = 10000;
	
	private static final double PI = 3.14;
	
	private static final double R= 1; 
}

4、

package SixthCharter;

/*
* File: Poker.java
* ---------------------------
* 这是第6章的第一题
* Author luoriver
*/

import acm.program.*;

import acm.util.*;

public class HalfLife extends ConsoleProgram {
	public void run(){
		println("这个程序是模拟原子的半衰期");
		println("There are " + RADIOACTIVE_ACTOM_NUM + "actom initially");
		int left_num = RADIOACTIVE_ACTOM_NUM;
		int year = 0;
		while(left_num > 0){
			int new_actom_num = left_halflife_actom_num(left_num);
			left_num -= new_actom_num;
			year ++;
			println("There are " + left_num + " actom at the end of year" + year);
			new_actom_num = 0;
		}
		
	}
	//定义衰减原子的数量
	private int left_halflife_actom_num(int num){
		int actom_num = 0;
		for(int i = num; i > 0; i -- ){
			while(rgen.nextBoolean()){
				actom_num ++;
				break;
			}
		}
		return actom_num;
	}
	
	
	/*create an instance variable for the random number generator
	 */
	private RandomGenerator rgen =RandomGenerator.getInstance();
	
	/**
	 * 定义放射性原子的数量
	 * @RADIOACTIVE_ACTOM_NUM
	 */
	private static final int RADIOACTIVE_ACTOM_NUM = 10000;
}

5、

package SixthCharter;

/*
 * File: Poker.java
 * ---------------------------
 * 这是第6章的第5题
 * Author luoriver
 */

import acm.program.*;
import java.util.Scanner;
import acm.util.*;

public class Bingo extends ConsoleProgram {
	public void run() {
		/*
		 * 首先询问是否要介绍下赌博规则,这里以后再写 读取文字不会先用数字代替吧,1代表继续,2代表不玩了
		 */
		println();
		int know_rules = readInt("你想了解赌博机的规则吗?1代表为想了解,2代表已经知道规则:");
		if (know_rules == 1) {
			println(/*"内容太多,我没有写呢,看看Java语言的科学与艺术第172页吧"*/  RULES);
		}
		println("开始玩吧!祝玩的愉快!");
		start_play();
	}

	private void start_play(){
		int remain_money = CLIENT_INIT_MONEY;
		
		print_remain_money(remain_money);
		
		while(remain_money > 0){
			remain_money --;
			if(remain_money == 0){
				println("");
			}
			String first_show = show_result();
		//	print("111111" + first_show);
			String second_show = show_result();
		//	println("22222" + first_show);
			String third_show = show_result();
		//	print("333333333" + first_show);
			/*Scanner num = new Scanner(System.in);
			int n = num.nextInt();*/
			int n = readInt();
			if(n == 2) break;
		//	print_remain_money(remain_money);
					
			if(first_show.equals("BAR") && second_show.equals("BAR") && third_show.equals("BAR")){
				remain_money += 250;
				println(first_show + " " + second_show  + " " + third_show +" you win" );
				print_remain_money(remain_money);
			}else if(first_show.equals("BELL") && second_show.equals("BELL") && (third_show.equals("BELL") || third_show.equals("BAR"))){
				remain_money += 20;
				println(first_show + " " + second_show  + " " + third_show +" you win" );
				print_remain_money(remain_money);
			}else if(first_show.equals("PLUM") && second_show.equals("PLUM") && (third_show.equals("PLUM") || third_show.equals("BAR"))){
				remain_money += 14;
				println(first_show + " " + second_show  + " " + third_show +" you win" );
				print_remain_money(remain_money);
			}else if(first_show.equals("ORANGE") && second_show.equals("ORANGE") && (third_show.equals("ORANGE") || third_show.equals("BAR"))){
				remain_money += 10;
				println(first_show + " " + second_show  + " " + third_show +" you win" );
				print_remain_money(remain_money);
			}else if(first_show.equals("CHERY") && second_show.equals("CHERY") && third_show.equals("CHERY")){
				remain_money += 7;
				println(first_show + " " + second_show  + " " + third_show +" you win" );
				print_remain_money(remain_money);
			}else if(first_show.equals("CHERY") && second_show.equals("CHERY")){
				remain_money += 5;
				println(first_show + " " + second_show  + " " + third_show +" you win" );
				print_remain_money(remain_money);
			}else if(first_show.equals("CHERY")){
				remain_money += 2;
				println(first_show + " " + second_show  + " " + third_show +" you win" );
				print_remain_money(remain_money);
			}else{
				println(first_show + " " + second_show  + " " + third_show +" you loss" );
				print_remain_money(remain_money);
			}
			
			}
	//	print_remain_money(remain_money); 
	}
			
	private void print_remain_money(int remain){
		println("you have $" + remain + " would you like to play?");
	}

	private String show_result() {
		int random_show = rgen.nextInt(1, 6);
		switch (random_show) {
		case 1:
			return "BAR";
		case 2:
			return "LEMON";
		case 3:
			return "ORANGE";
		case 4:
			return "PLUM";
		case 5:
			return "BELL";
		default:
			return "CHERRY";
		}
	}

	/*
	 * 设定系统给用户初始钱
	 */
	private static final int CLIENT_INIT_MONEY = 50;

	/*
	 * create an instance variable for the random number generator
	 */
	private RandomGenerator rgen = RandomGenerator.getInstance();
	
	private static final String RULES= "典型的赌博机有3个轮子,他们在一个狭窄的窗口后面旋转。每个轮子都标记为CHERRY、LEMON、ORANGE、PLUM、BELL和BAR。然而,窗口每次只允许看到一个轮子的一个符号。"
			+"下面显示的是典型的获胜模式及其相关回报:"
			+"BAR      BAR      BAR              -- 支付 $250"
			+ "BELL    BELL   BELL/BAR         -- 支付 $20"
			+ "PLUM    PLUM   PLUM/BAR         -- 支付 $14"
			+ "ORANGE  -  ORANGE  - ORANGE/BAR       -- 支付 $10"
			+ "CHERRY  -  CHERRY  - CHERRY           -- 支付 $7"
			+ "CHERRY  -  CHERRY  - --               -- 支付 $5"
			+ "CHERRY  -  CHERRY  - --               -- 支付 $2";
   
    
};

6、7合并了

package SixthCharter;

/*
 * File: Poker.java
 * ---------------------------
 * 这是第6章的第5题
 * Author luoriver
 */

import acm.program.*;

import java.util.Scanner;

import acm.util.*;

public class Calculate extends ConsoleProgram {
	public void run() {
		int first = rgen.nextInt(0, 20);
		int second = rgen.nextInt(0, 20);
		sys_question(first, second);
	}

	/*
	 * 定义系统提出问题的方法
	 */
	private void sys_question(int first, int second) {
		for (int i = 0; i < PROBLEM_NUM; i++) {
			first = rgen.nextInt(0, 20);
			second = rgen.nextInt(0, 20);
			int sys_answer = first + second;

			if (sys_answer <= 20) {
				print(first + " + " + second + " = ");
				answer(sys_answer);
			} else {
				i--;
			}
		}
	}

	/*
	 * 定义学生回答的方法
	 */
	private void answer(int sys_answer) {
		int student_answer = readInt();
		if (student_answer == sys_answer) {
			println(success());
		} else {
			for (int i = 0; i < ANSWER_NUM; i++) {
				println("答案不正确,请再输入一遍");
				student_answer = readInt();
			}
			println("正确答案是" + sys_answer);
		}
	}

	/*
	 * 显示输入正确答案后的鼓励信息
	 */
	private String success() {
		int n = rgen.nextInt(1, 3);
		switch (n) {
		case 1:
			return "You got it";
		case 2:
			return "connect";
		default:
			return "That's the answer";
		}
	}

	/*
	 * create an instance variable for the random number generator
	 */
	private RandomGenerator rgen = RandomGenerator.getInstance();
	/*
	 * 定义出题的个数
	 */
	private static final int PROBLEM_NUM = 5;

	/*
	 * 定义学生错误回答问题的次数
	 */
	private static final int ANSWER_NUM = 3;
}

8、

package SixthCharter;

/*
* File: Poker.java
* ---------------------------
* 这是第6章的第9题
* Author luoriver
*/

import acm.program.*;

import acm.util.*;

public class NewPoker extends ConsoleProgram {
	public void run(){
		println("这个程序是随机显示选择的扑克");
		int level = level();
		String color = color();
		Card show = new Card(level, color);
		println();
		println("直接显示show类为" + show);
		println();
		print(show.toString(level, color));
			
		}
	
	
	public class Card{
		
		public Card (int level, String color){
			println("等级是" + level + "花色是" + color);
		}
		public String toString(int level, String color){
			return "toString 方法显示等级为" + level + "花色是" + color;
		}
		
	}
	
	public int getLevel(){
		return level();
	}
	
	public String getColor(){
		return color();	
	}
	
	
	
	/*
	 * 显示随机的扑克牌
	 */
	private void showPoker(){
		int num = rgen.nextInt(1,13);
	//	rgen.setSeed(2);
		switch(num){
			case 1: 
				print("Ace"); break;
			case 11: 
				print("Jack"); break;
			case 12:
				print("Queen"); break;
			case 13:
				print("King"); break;
			default: print(num);
		}
	}
	
	private String color(){
		int color = rgen.nextInt(1,4);
		switch(color){
			case 1: 
			//	print("Spades");
				return "Spades";
			case 2: 
			//	print("Diamonds");
				return "Diamonds";
			case 3:
			//	print("Clubs");
				return "Clubs";
			default:
			//	print("Hearts");
				return "Hearts";
		}
	}
	
	private int level(){
		int n = rgen.nextInt(1, 4);
		switch(n){
		case 1: 
			return LEVEL1;
		case 2: 
			return LEVEL2;
		case 3: 
			return LEVEL3;
		default: 
			return LEVEL4;
	}
	
	
	
	/*private void color(){
		int color = rgen.nextInt(1,4);
		switch(color){
			case 1: 
				print("Spades");
			case 2: 
				print("Diamonds");
			case 3:
				print("Clubs");
			case 4:
				print("Hearts");
	}
		*/
		
		
	}
	
	/*create an instance variable for the random number generator
	 */
	private RandomGenerator rgen =RandomGenerator.getInstance();
	
	/*
	 * 定义扑克的花色常量
	 */
	private static final String CLUBS = "CLUBS";
	private static final String DIMONDS = "DIMONDS";
	private static final String HEARTS = "HEARTS";
	private static final String SPADES = "SPADES";
	
	/*
	 * 定义等级常量的值 
	 */
	private static final int LEVEL1 = 1;
	private static final int LEVEL2 = 11;
	private static final int LEVEL3 = 12;
	private static final int LEVEL4 = 13;
	
}

9、

package SixthCharter;

public class LibaryRecord {
	public LibaryRecord(String book_name, String author, int catalog_number, String publisher, int public_date, boolean isCurrent){
		this.book_name = book_name;
		this.author = author;
		this.catalog_number = catalog_number;
		this.publisher = publisher;
		this.public_date = public_date;
		this.isCurrent = isCurrent;
	}
	
	public LibaryRecord(String book_name, String author, int catalog_number, String publisher, int public_date){
		this.book_name = book_name;
		this.author = author;
		this.catalog_number = catalog_number;
		this.publisher = publisher;
		this.public_date = public_date;
		isCurrent = true;
	}
	
	public String getBookName(){
		return book_name;
	}
	
	public String getAuthor(){
		return author;
	}
	
	public int getCatalogNum(){
		return catalog_number;
	}
	
	public String getPublisher(){
		return publisher;
	}
	
	public int getPublic_date(){
		return public_date;
	}
	
	public boolean getisCurrent(){
		return isCurrent;
	}
	
	public void setisCurrent(boolean isCurrent){
		this.isCurrent = isCurrent;
	}
	
	@Override
	public String toString(){
		return "Book_name" + book_name + " author: " + author + " 目录号: " + catalog_number + "出版者" + publisher + " 出版年份: "
				+ public_date + " 当前是否流通: " + isCurrent;
	}
	
	/*
	 * 定义书名
	 */
	private String book_name;
	private String author;
	private int catalog_number;
	private String publisher;
	private int public_date;
	private boolean isCurrent;

}

10、没有做


编辑推荐 本书采用现代面向对象方法,从零开始介绍最有用的类层次结构,全文使用图形和交互式程序,充分激发学生的学习兴趣。本书使用传记简介、引用以及哲学片段来突出计算的历史和理性背景,着重强调算法和问题解决,而今天的初级教科书通常忽略了这一点。 内容简介 自1995年首次发布以来,Java编程语言作为一种教学语言变得日益重要,现在已经成为初级计算课程斯坦福大学的标准语言Java语言可以让学生编写高度交互式程序,这充分激发了他们的学习兴趣。但Java语言很复杂,老师和学生们在理解Java语言的结构时,复杂性成为了最大的障碍。   在本书中,斯坦福大学教授、著名的计算机科学教育领导者Eric S.Roberts着重强调了更适合于初学者的友好讲解方式,使用ACM Java库简化编程。本书简练清晰地介绍了传统CS1课程的内容,同时也包含了最近的Computing Curriculum 2001报告计算机科学卷中指定为CS101O或CS111O课程的全部主题。 作者简介 Eric S. Roberts,美国斯坦福大学计算机科学系教授,并担任主管教学事务的系主任。同时还由于教学改革所取得的成就被评为Charles Simonyi荣誉教授。他于1980年获得哈佛大学应用数学博士学位,并曾在加州Palo Alto的DEC公司的系统研究中心工作了5年。作为一位成功的教育工作者,Roberts还获得了1993年的Bing Award奖。 目录 第1章 前言  1.1 计算简史  1.2 计算机科学的含义  1.3 计算机硬件简介  1.4 算法  1.5 编程过程的几个阶段  1.6 Java和面向对象范例  1.7 Java和WWW  1.8 小结  1.9 复习题 第2章 编程示例  2.1 “Hello world”程序  2.2 编程过程的观点  2.3 两数相加的程序  2.4 编程习语和模式  2.5 类和对象  2.6 图形程序  2.7 小结  2.8 复习题  2.9 编程练习 第3章 表达式  3.1 原始数据类型  3.2 常量变量  3.3 运算符和操作数  3.4 赋值语句  3.5 布尔表达式  3.6 设计改变  3.7 小结  3.8 复习题  3.9 编程练习 第4章 语句形式  4.1 Java的语句类型  4.2 控制语句和问题解决  4.3 if 语句  4.4 switch语句  4.5 while语句  4.6 for语句  4.7 小结  4.8 复习题  4.9 编程练习 第5章 方法  5.1 方法概述  5.2 编写自己的方法  5.3 方法调用过程的技巧  5.4 分解  5.5 算法方法  5.6 小结  5.7 复习题  5.8 编程练习 第6章 对象和类  6.1 使用RandomGenerator类  6.2 javadoc文档系统  6.3 定义自己的类  6.4 表示学生信息  6.5 有理数  6.6 扩展现有类  6.7 小结  6.8 复习题  6.9 编程练习 第7章 对象和内存  7.1 内存结构  7.2 将内存分配给变量  7.3 原始类型对象  7.4 链接对象  7.5 小结  7.6 复习题  7.7 编程练习 第8章 字符串和字符  8.1 枚举的原则  8.2 字符  8.3 作为抽象概念的字符串  8.4 使用String类中的方法  8.5 字符串处理案例研究  8.6 小结  8.7 复习题  8.8 编程练习 第9章 面向对象图形  9.1 acm.graphics模型  9.2 acm.graphics程序包的结构  9.3 使用形状类  9.4 创建复合对象  9.5 小结  9.6 复习题  9.7 编程练习 第10章 事件驱动程序  10.1 Java事件模型  10.2 简单的事件驱动程序  10.3 响应鼠标事件  10.4 响应键盘事件  10.5 创建简单的GUI  10.6 Swing 交互器层次结构  10.7 管理组件布局  10.8 使用TableLayout类  10.9 小结  10.10 复习题  10.11 编程练习 第11章 数组ArrayList类  11.1 数组简介  11.2 数组的内部表示法  11.3 数组作为参数传递  11.4 使用数组制作表格  11.5 数组初始化  11.6 多维数组  11.7 图像处理  11.8 ArrayList类  11.9 小结  11.10 复习题  11.11 编程练习 第12章 搜索排序  12.1 搜索  12.2 排序  12.3 评估算法效率  12.4 使用数据文件  12.5 小结  12.6 复习题  12.7 编程练习 第13章 数组ArrayList类  13.1 ArrayList类回顾  13.2 HashMap类  13.3 Java集合架构  13.4 面向对象设计的原则  13.5 小结  13.6 复习题  13.7 编程练习 第14章 展望  14.1 递归  14.2 并发  14.3 使用网络  14.4 编程模式  14.5 小结  14.6 复习题  14.7 编程练习
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值