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

本博客提供了Java编程第九章课后编程练习题的详细解答,包括图像绘制、图形生成、图形组合等多道题目的实现代码及解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

1、

</pre></p><p><pre name="code" class="java">package Ninth;

/* File: Luoriver.java
 * ------------------------
 * the ninth chapter: 课后编程练习第1题
 * 注意把图像放在包目录下
 * http://blog.youkuaiyun.com/netluoriver
 * 
 */

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

public class Luoriver extends GraphicsProgram {

	@Override
	public void run() {
		// 此时这里的图像要放在工程的根目录才可以显示
		add(new GImage("luoriver.jpeg", 50, 50));
	}

}


2、

package Ninth;

/**
 * File: ninthFound.java
 * -------------------------
 * 第9章课后编程练习第2题
 */

import java.awt.Color;

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

public class ninthFound extends GraphicsProgram {
	public void run() {
		/*
		 * 设置正方形为屏幕中间
		 */
		double x = getWidth() / 2;
		double y = getHeight() / 2;
		double dx = x - FOUND_WIDTH / 2;
		double dy = y - FOUND_WIDTH / 2;

		while (true) {
			GRect foundGRect = new GRect(dx, dy, FOUND_WIDTH, FOUND_WIDTH);
			foundGRect.setFilled(true);
			foundGRect.setColor(Color.white);
			foundGRect.setFillColor(rgen.nextColor());
			add(foundGRect);
			pause(1000);
		}
	}

	/*
	 * create an instance variable for the random number generator
	 */
	private RandomGenerator rgen = RandomGenerator.getInstance();

	/**
	 * 正方形的宽度和高度
	 * 
	 * @param FOUND_WIDTH
	 *            定义正方形的宽度
	 */
	private static final double FOUND_WIDTH = 100;

}

3、
GDimand

package Ninth;

/* File: GDiamond.java
 * ------------------------
 * 第9章第3题 
 * http://blog.youkuaiyun.com/netluoriver
 * 
 */

import acm.graphics.*;
public class GDiamond extends GPolygon{
	public GDiamond(double width, double height) {
			
		double dx = width / 2;
		double dy = height / 2;
		addVertex(-dx / 2, 0);
		addVertex(0, dy / 2);
		addVertex(dx / 2, 0);
		addVertex(0, -dy / 2);
		
	}
}


GTrapezoid

package Ninth;

/* File: GTrapezoid.java
 * ------------------------
 * 第9章: 课后编程练习第4题
 * 
 * http://blog.youkuaiyun.com/netluoriver
 * 
 */

import acm.graphics.GMath;
import acm.graphics.GPolygon;

public class GTrapezoid extends GPolygon {
	
	public GTrapezoid(double side_top,double height, double angle){
		addVertex(- side_top / 2, -height / 2);
		addVertex(side_top / 2, -height / 2);
		addPolarEdge(height  * GMath.tanDegrees(angle), -angle );
		addPolarEdge(side_top + height  * GMath.tanDegrees(angle), 3 * angle);
	
	}
	
}


GTshape

package Ninth;

/* File: GTshape.java
 * ------------------------
 * 第9章: 课后编程练习第4题
 * 
 * http://blog.youkuaiyun.com/netluoriver
 * 
 */


import acm.graphics.GMath;
import acm.graphics.GPolygon;
import acm.program.GraphicsProgram;

public class GTshape extends GPolygon {
	public GTshape(double width, double height, double thickness) {
		double w = width;
		double h = height;
		double t = thickness;

		addVertex(-w, -h);
		addEdge(w, 0);
		addEdge(0, t);
		addEdge(-(w / 2 - t / 2), 0);
		addEdge(0, h - t);
		addEdge(-t, 0);
		addEdge(0, -(h - t));
		addEdge(-(w / 2 - t / 2), 0);

	}
}

5

package Ninth;



/**
 * Pumpkin.java
 * ---------------------------
 *  * 第9章: 课后编程练习第5题
 * 
 * http://blog.youkuaiyun.com/netluoriver
 * 
 *this is a show hallowmas
 * @author luoriver
 *
 * 2014年7月13日上午9:40:36
 */
import java.awt.Color;
import acm.program.*;
import acm.graphics.GOval;

public class Pumpkin extends GraphicsProgram{
	public void run(){
		double dx =  (getWidth() - head_width) / 2;
		double dy= (getHeight() - head_width) / 2;
		
		/**
		 * draw head
		 */
		GOval head = new GOval(head_width, head_width);
		head.setFillColor(Color.ORANGE);
		head.setFilled(true);
		add(head, dx, dy);
		
		
		/**
		 * draw leftEye
		 */
		Pumpkin_Eye leftEye = new Pumpkin_Eye(eye_height, eye_width);
		add(leftEye, dx + eye_insert, dy + head_width / 4);
		
		/**
		 * draw rightEye
		 */
		Pumpkin_Eye rightEye = new Pumpkin_Eye(eye_height, eye_width);
		add(rightEye, dx + head_width -  eye_insert, dy + head_width / 4);
		
		/**
		 * draw Nose
		 */
		Pumpkin_Nose nose = new Pumpkin_Nose(nose_height, nose_width);
		add(nose, getWidth() / 2, (getHeight() + nose_height) / 2 );
	
	}

	//定义头的大小
	private static final int head_width = 100;
	
	//定义眼睛的大小
	private static final int eye_height = 20;
	private static final int eye_width = 20;
	private static final int eye_insert=25;

	//定义鼻子的大小
	private static final int nose_width = 20;
	private static final int nose_height = 20;
}


构造函数:

Pumpkin_Eye

package Ninth;

/* File: Pumpkin_Eye.java
 * ------------------------
 * 第9章: 课后编程练习第5题
 * 
 * http://blog.youkuaiyun.com/netluoriver
 * 
 */

import java.awt.Color;

import acm.program.GraphicsProgram;
import acm.graphics.GMath;
import acm.graphics.GPolygon;

public class Pumpkin_Eye extends GPolygon{
	public Pumpkin_Eye(int eye_height, int eye_width){
		addVertex(-eye_width / 2, 0);
		addVertex( eye_width / 2, 0);
		addVertex(eye_width/16, eye_height);
		setFilled(true);
		setFillColor(Color.BLACK);
	}
}

Pumpkin_Nose
package Ninth;

/* File: Pumpkin_Nose.java
 * ------------------------
 * 第9章: 课后编程练习第5题
 * 
 * http://blog.youkuaiyun.com/netluoriver
 * 
 */
import java.awt.Color;
import acm.program.GraphicsProgram;
import acm.graphics.GMath;
import acm.graphics.GPolygon;

public class Pumpkin_Nose extends GPolygon {
	public Pumpkin_Nose(int Nose_height, int Nose_width){
		addVertex(Nose_width / 16, -Nose_height /2 );
		addVertex(Nose_width /2 , Nose_height /2 );
		addVertex(-Nose_width /2, Nose_height /2 );
		setFilled(true);
		setFillColor(Color.BLACK);
	}
}

6、

package Ninth;

/* File: Pumpkin_pices.java
 * ------------------------
 * 第9章: 课后编程练习第6题
 * 
 * http://blog.youkuaiyun.com/netluoriver
 * 
 */

import java.awt.Color;
import acm.program.GraphicsProgram;
import acm.graphics.GArc;
import acm.graphics.GMath;
import acm.graphics.*;
import acm.graphics.GPolygon;
import acm.program.*;
import acm.graphics.*;
import java.awt.*;

public class  Pumpkin_pices extends GraphicsProgram {

		
		private static final long serialVersionUID = 1L;
		private double sweep = 360 / N_PIECES + 360 % N_PIECES;
	 
		// Create the pie by the piece
		public void run() {
			for (int i = 0; i < N_PIECES; i++) {
				piePiece(r, sweep * i);
			}
		}
	 
		// Create the object, set the properties, and add it to the canvas.
		private void piePiece(double radius, double start) {
			GArc piece = new GArc(2 * radius, 2 * radius, start, sweep);
			piece.setFilled(true);
			piece.setFillColor(Color.ORANGE);
			add(piece, (getWidth() - 2 * radius) / 2, (getHeight() - 2 * radius) / 2);
		}
	 
		private static final int N_PIECES = 9;
		private static final int r = 50;
}


7、8

package Ninth;

/* File: Heart.java
 * ------------------------
 * 第9章: 课后编程练习第7题
 * 
 * http://blog.youkuaiyun.com/netluoriver
 * 
 */

import java.awt.Color;

import acm.program.GraphicsProgram;
import acm.graphics.GMath;
import acm.graphics.GPolygon;

public class Heart extends GPolygon{
	public Heart (int SIDE){
		
		addVertex(SIDE /2, 0);
		addVertex(0, SIDE /2 );
		addVertex(-SIDE / 2, 0);
		
		addArc(SIDE * GMath.sinDegrees(45) , SIDE * GMath.sinDegrees(45), -135, -180);
		addArc(SIDE * GMath.sinDegrees(45), SIDE * GMath.sinDegrees(45), -225, -180);
		setFilled(true);
		setFillColor(Color.RED);
		
	}
}


9、不会

10、不会,只写了个圆圈:

package Ninth;

/* File: Ninth_ten.java
 * ------------------------
 * 第9章: 课后编程练习第10题
 * 
 * http://blog.youkuaiyun.com/netluoriver
 * 
 */

import javafx.scene.shape.Circle;
import acm.program.GraphicsProgram;
import acm.program.GraphicsProgram;
import acm.graphics.GLabel;
import acm.graphics.GLine;
import acm.graphics.GMath;
import acm.graphics.GOval;
import acm.graphics.GPolygon;

public class Ninth_ten extends GraphicsProgram {
	public void run() {
		int x = getWidth();
		int y = getHeight();
		
		// dx为打印位置的开始
		int dx = x / 2 - R;

		int sy = vertical_distance;
		int count =(y - vertical_distance)  / (2 * R + vertical_distance);
		println("the width is :"  + x );
		println("the height is :"  + y );
		print(count);
		for (int i = 0; i < count; i++) {
			for (int j = 0; j <= i; j++) {
				GOval circle = new GOval(R, R);
				add(circle, dx - i * R + j * 2 * R, sy + i * ( vertical_distance));
				GLabel digit = new GLabel("1");
	//			add(digit, dx - i * R + j * 2 * R, sy + i * ( vertical_distance + R));

			}
		}

	
	}

	/*
	 * for(int i = 0; i < 10; i++){ for(int j = 0; j< i; j++ ){ print(j);
	 * 
	 * 
	 * } println(); }
	 */

	private static final int R =10;
	private static final int cross_distance = 6;
	private static final int vertical_distance = 10;

}


11、不会,只写了第1图形

package Ninth;

/* File: Embroidery.java
 * ------------------------
 * 第9章: 课后编程练习第11题
 * 
 * http://blog.youkuaiyun.com/netluoriver
 * 
 */

import java.awt.Color;

import acm.program.GraphicsProgram;

public class Embroidery extends GraphicsProgram{
	public void run(){
		wood_block newBlock = new wood_block(LENGTH);
		newBlock.setColor(Color.black);
		add(newBlock);
		
		nested_square nested = new nested_square(LENGTH);
		add(nested, 200, 200);
		
		
	}
	
	private static final double LENGTH= 67;

}

构造函数:

QulitBlock

package Ninth;

/* File: QulitBlock.java
 * ------------------------
 * 第9章: 课后编程练习第11题
 * 
 * http://blog.youkuaiyun.com/netluoriver
 * 
 */

import java.awt.Color;

import org.omg.CORBA.DoubleSeqHelper;

import acm.graphics.GCompound;
import acm.graphics.GRect;
import acm.graphics.*;

public class QulitBlock extends GCompound{
	
	public QulitBlock(double LENGTH){
		GRect found = new GRect(LENGTH, LENGTH);
		found.setFilled(true);
		found.setFillColor(Color.white);
		add(found, 0,0);	
	}
	
	/*
	 * 设置正方形的边长
	 */
//	private static final double  WIDTH = 20;
	
}


wood_block

package Ninth;

/* File: wood_block.java
 * ------------------------
 * 第9章: 课后编程练习第11题
 * 
 * http://blog.youkuaiyun.com/netluoriver
 * 
 */

import java.awt.Color;

import com.sun.javafx.geom.AreaOp.AddOp;

import Ninth.QulitBlock;
import acm.program.*;
import acm.graphics.*;

public class wood_block extends QulitBlock {
//	@Override
	
	public wood_block(double LENGTH){
		super(LENGTH);
		double WOOD_HEIGHT = LENGTH - WOOD_WIDTH;
		
		for (int i = 0; i < 4; i++) {
			GRect rect1 = new GRect(WOOD_WIDTH - 2 * i * WOOD_HEIGHT, WOOD_HEIGHT);
			rect1.setFilled(true);
			rect1.setFillColor(Color.gray);
			add(rect1,i * WOOD_HEIGHT, i * WOOD_HEIGHT);
			
			GRect rect2 = new GRect(WOOD_HEIGHT, WOOD_WIDTH - 2 * i * WOOD_HEIGHT);
			rect2.setFilled(true);
			rect2.setFillColor(Color.gray);
			add(rect2,i * WOOD_HEIGHT, (i +1) * WOOD_HEIGHT);
			
			GRect rect3 = new GRect(WOOD_WIDTH - 2 * i * WOOD_HEIGHT, WOOD_HEIGHT);
			rect3.setFilled(true);
			rect3.setFillColor(Color.gray);
			add(rect3,(i+1) * WOOD_HEIGHT, WOOD_WIDTH - i * WOOD_HEIGHT);
			
			GRect rect4 = new GRect(WOOD_HEIGHT, WOOD_WIDTH - 2 * i * WOOD_HEIGHT);
			rect4.setFilled(true);
			rect4.setFillColor(Color.gray);
			add(rect4, WOOD_WIDTH - i * WOOD_HEIGHT,  i * WOOD_HEIGHT);
			
			/*new GRect(WOOD_WIDTH - 2 * i * WOOD_HEIGHT, WOOD_HEIGHT).setFilled(true);
			new GRect(WOOD_WIDTH - 2 * i * WOOD_HEIGHT, WOOD_HEIGHT).setFillColor(Color.GRAY);
			add(new GRect(WOOD_WIDTH - 2 * i * WOOD_HEIGHT, WOOD_HEIGHT), i
					* WOOD_HEIGHT, i * WOOD_HEIGHT);*/
			/*add(new GRect(WOOD_HEIGHT, WOOD_WIDTH - 2 * i * WOOD_HEIGHT),
					WOOD_WIDTH - i * WOOD_HEIGHT, i * WOOD_HEIGHT);
			add(new GRect(WOOD_WIDTH - 2 * i * WOOD_HEIGHT, WOOD_HEIGHT),
					WOOD_HEIGHT + i * WOOD_HEIGHT, WOOD_WIDTH - i * WOOD_HEIGHT);
			add(new GRect(WOOD_HEIGHT, WOOD_WIDTH - 2 * i * WOOD_HEIGHT), i
					* WOOD_HEIGHT, WOOD_HEIGHT + i * WOOD_HEIGHT);*/
		}
	}

//	private static final double LENGTH = 67;
	private static final double WOOD_WIDTH = 60;
}

12

package Ninth;

/* File: draw_pc_man.java
 * ------------------------
 * 第9章第12题 
 * http://blog.youkuaiyun.com/netluoriver
 * 
 */

import java.awt.Color;
import java.beans.Visibility;

import org.omg.CORBA.PRIVATE_MEMBER;

import acm.graphics.GArc;
import acm.graphics.GCompound;
import acm.graphics.GPolygon;
import acm.program.GraphicsProgram;

import com.sun.javafx.geom.AreaOp.AddOp;

public class draw_pc_man extends GraphicsProgram{
	
	public void run() {
		
		int start = 60;
		int sweep = 240;
		int step_angle = 15;
		int dy = 2 * step_angle;
		int move_location = 0;
		int  Y = getHeight() / 2;
		
		while(true){
			
			/**
			 ** 画一个与背景色一样的圆形是为了遮挡pc_man张开时生成的阴影,可以将这段代码注释后
			 **查看不用这段代码产生的效果 
			 */
			 
			
			
			Pc_man man = new Pc_man(side, start, sweep);
			
			add(man,0,Y - side / 2);
			 man.move(move_location, 0);
			 
		//	pause(pause_time);
			pause(MOUSE_PAUSE_TIEM);
			start += step_angle;
	        sweep -= dy;
	      
	        
	        //当小于0度或大于60度时便向相反的方向运动
	        if(start <= 0 || start > 60) step_angle = -step_angle;
	        
	        //当大于360或小于240度时便向相反的方向运动
	        if(sweep >= 360  || sweep < 240) dy = -dy;
	   
	        GArc man1 = new GArc(side, side, 0, 360);
			man1.setFilled(true);
			man1.setColor(Color.white);
			man1.setFillColor(Color.white);
			add(man1,0,Y);
			man1.move(move_location, 0);
			
	        move_location += move_rate;

	        removeAll();
	        
	     //   double i = man.getLocation();
			
		}
	}
		
	private static final double side = 30;
	private int move_rate = 1;
	private static final int MOUSE_PAUSE_TIEM = 100;
	
}

构造函数:

package Ninth;

import java.awt.Color;

import jdk.internal.dynalink.beans.StaticClass;

import org.omg.CORBA.PRIVATE_MEMBER;
import org.omg.CORBA.PUBLIC_MEMBER;

import com.sun.xml.internal.ws.api.config.management.policy.ManagedClientAssertion;

import acm.graphics.GArc;
import acm.graphics.GCompound;
import acm.graphics.GPolygon;
import acm.program.GraphicsProgram;

//public class Pc_man extends GraphicsProgram{	
public class Pc_man extends GCompound {

	public Pc_man(double side, int start, int sweep) {

		GArc man = new GArc(side, side, start, sweep);
		man.setFilled(true);
		man.setFillColor(Color.YELLOW);
		add(man, 0, 0);
	}

}

后面的没有做

辑推荐 本书采用现代面向对象方法,从零开始介绍最有用的类层次结构,全文使用图形和交互式程序,充分激发学生的学习兴趣。本书使用传记简介、引用以及哲学片段来突出计算的历史和理性背景,着重强调算法和问题解决,而今天的初级教科书通常忽略了这一点。 内容简介 自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、付费专栏及课程。

余额充值