2011年1月广东自考JAVA语言程序设计(一)课后习题答案和源代码(第七章)
- 格式:doc
- 大小:324.00 KB
- 文档页数:22
java语言程序设计课后习题答案第一章:计算机、程序和JAVA概述1、2、1什么是硬件和软件?答:硬件指计算机中可见的物理部分;而软件提供不可见的指令,这些指令控制硬件并使硬件完成特定的任务。
1、2、2列举计算机的5个主要硬件组件。
答:中央处理器(CPU);内存(主存);存储设备(磁盘、光盘);输入设备(鼠标、键盘);输出设备(显示器、打印机);通信设备(调制解调器、网卡)。
1、2、3编写“CPU”代表什么含义?测量CPU速度的单位是什么?答:CPU(Central Proceing Unit)中央处理单元,包括控制单元和算术、逻辑单元;单位是HZ,现在通常以MHZ,GHZ数量级衡量。
1、2、4什么是比特?什么是字节?答:bit是计算机物理设备中存储的最小单位;8个bit为1个byte。
1、2、5内存是用来做什么的?RAM代表什么?为什么内存成为RAM?答:内存用来存储程序和数据;RAM(Random-Acce Memory)-可随机访问存储介质;因为内存可以按任意顺序存取字节所以被称为RAM(按功能划分)。
1、2、6用于测量内存大小的单位是什么?用于测量磁盘大小的单位是什么?答:GB,TB1、2、7内存和永久存储设备的主要不同是什么?答:内存是易失性存储介质(断电即失),存储容量小,传输速度快;永久存储设备为非易失性存储介质(断电可留),存储容量大,传输速度慢。
1、3、1CPU能理解什么语言。
机器语言。
1、3、2什么是汇编语言?什么是汇编器?汇编语言能用短的描述性单词来表示每一条机器语言指令,是一种低级语言。
汇编器可以将汇编语言转换成机器语言。
1、3、3什么是高级编程语言?什么是源程序?很像英语,易于学习和使用的编程语言称为高级编程语言。
使用高级编程语言编写的程序称为源程序。
1、3、4什么是解释器?什么是编译器?解释器会逐条读取源代码中的语言,并立刻翻译成机器代码或者虚拟机器代码,然后立刻运行。
第七章 (1)7.1 编写一个应用程序,绘制一个五角星。
(1)7.2 用Graphics2D绘制一条抛物线,设抛物线方程的系数从图形界面输入。
(3)7.3 利用Graphics2D的平移,缩放,旋转功能。
绘制一个六角星。
(7)7.4 编写画图程序。
(10)7.5 输入二次曲线的系数,画出二次曲线 (17)7.6. 写音乐播放器,只能播放wav,mid格式的。
(24)第七章7.1 编写一个应用程序,绘制一个五角星。
程序运行结果:源文件:Work7_1.javaimport java.awt.*;import javax.swing.*;/***7.1画一个五角星<BR>*@author黎明你好*/public class Work7_1{public static void main(String args[]){JFrame win = new JFrame("第七章,第一题");win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);win.setBounds(50, 50, 210, 250);win.add(new FiveStarCanvas(100), BorderLayout.CENTER);win.setVisible(true);win.validate();}}画板类源文件: FiveStarCanvas.java/***画板类,在上面画出五角星*@author黎明你好*/class FiveStarCanvas extends Canvas{private static final long serialVersionUID = 1L;/**五角星外接圆的半径*/private int radius;/***构造方法*@param r-初始化外接圆半径*/public FiveStarCanvas(int r){this.radius = r;}public void paint(Graphics g){int ax = radius; int ay = 0;int bx = (int) (radius * (1 - Math.cos((18 * Math.PI) / 180)));int cx = (int) (radius * (1 + Math.cos((18 * Math.PI) / 180)));int dx = (int) (radius * (1 - Math.cos((54 * Math.PI) / 180)));int ex = (int) (radius * (1 + Math.cos((54 * Math.PI) / 180)));int by = (int) (radius * (1 - Math.sin((18 * Math.PI) / 180)));int cy = (int) (radius * (1 - Math.sin((18 * Math.PI) / 180)));int dy = (int) (radius * (1 + Math.sin((54 * Math.PI) / 180)));int ey = (int) (radius * (1 + Math.sin((54 * Math.PI) / 180)));g.setColor(Color.RED);g.drawLine(dx, dy, ax, ay);g.drawLine(ax, ay, ex, ey);g.drawLine(ex, ey, bx, by);g.drawLine(bx, by, cx, cy);g.drawLine(cx, cy, dx, dy);g.setColor(Color.BLUE);g.drawOval(0, 0, 2 * radius, 2 * radius);g.drawLine(radius, radius, ax, ay);g.drawLine(radius, radius, bx, by);g.drawLine(radius, radius, cx, cy);g.drawLine(radius, radius, dx, dy);g.drawLine(radius, radius, ex, ey);}}7.2 用Graphics2D绘制一条抛物线,设抛物线方程的系数从图形界面输入。
第四章 (1)4.9 声明MyDate类 (1)4.10 求前n个质数 (5)4.11 编写实现从两个字符串中找出最长的相同字符列的代码。
(6)4.12 整理字符串 (7)4.13 编写用数组实现大整数的类,提供大整数的加、减、乘等运算。
(8)第四章4.9 声明MyDate类,功能:增加1天,增减1月和增加1年的方法;输出MyDate 对象日期的方法;求两个MyDate对象日期差的方法。
并提供能用当前日期初始化MyDate类对象的构造方法。
import java.util.Calendar;/***日历类*@author黎明你好*/public class MyDate{public static long YEAR_MSEL = 1000*60*60*24*365L;public static long MONTH_MSEL = 1000*60*60*24*30L;public static long DATE_MSEL = 1000*60*60*24L;public static long HOUR_MSEL = 1000*60*60L;public static long MINUTE_MSEL = 1000*60L;private int year;private int month;private int date;private int hour;private int minute;private int second;private Calendar calendar;/***构造方法使用当前时间日期初始化对象*/public MyDate(){calendar = Calendar.getInstance();year = calendar.get(Calendar.YEAR);month = calendar.get(Calendar.MONTH) + 1;date = calendar.get(Calendar.DAY_OF_MONTH);hour = calendar.get(Calendar.HOUR_OF_DAY);minute = calendar.get(Calendar.MINUTE);second = calendar.get(Calendar.SECOND);}/***构造方法使用指定年、月、日初始化对象*/public MyDate(int year, int month, int date){set(year, month, date);}/***构造方法使用指定年、月、日、时、分、秒初始化对象*/public MyDate(int year, int month, int date, int hourOfDay, int minute, int second){set(year, month, date, hourOfDay, minute, second);}/***设置日历字段year、month和date的值。
实验一:Java 基本语法
实验目的:
了解 Java 的数据类型,掌握各种变量的声明方式,理解运算符的优先级,掌握 Java 基本数据类型、运算符与表达式,掌握顺序结构、选择结构和循环结构语法的程序设计方法。
实验要求:
1、编写一个声明Java 不同数据类型变量的程序。
2、编写使用不同选择结构的程序。
3、编写使用不同循环结构结构的程序。
实验内容:
1、声明不同数据类型变量
1)编写声明不同数据类型变量的程序,代码见实验指导书。
运行结果:
2)Integer类在某对象中打包了原始类型为int的值。
Integer类型对象包含int型的单个域。
此外,此类提供了许多方法,可以将int型转换为string 型,也可以将Sring型转换为int型,还包含处理int类型时的其他有用常量和方法。
代码见实验指导书。
运行结果:
2、使用选择结构
使用if...else 语句,编写源程序文件,代码见实验指导书。
运行结果:
使用switch 语句
1)编写程序用swith语句实现从键盘读如1,2,3时,屏幕提示不同信息。
代码见实验指导书。
运行结果:
3、使用循环结构
使用for语句
1)程序源代码见实验指导书。
2)改正源程序中错误:
public static void main (String args[])
throws java.io.IOException
运行结果:。
自考Java语言程序设计(一)课后习题及答案自考Java语言程序设计(一)第一章Java语言概述课后习题一、Java语言概述1.Java语言有哪些特点?答:面向对象、简单、平台无关性、安全性、内存管理、分布式应用、多线程、动态、解释运行,高效能2.什么叫做类?什么叫做对象?答:在面向对象编程中,具体的客观实体称为对象,对象就是数据加方法。
对象在程序中是通过一种抽象数据类型来描述的,这种抽象数据类型称为类。
类是对具有相同属性和方法的一组相似对象的抽象,或者说类是对象的模板。
3.简述Java的运行机制。
答:Java程序的运行必须经过编写、编译、运行三个步骤。
编写是指在Java开发环境中进行程序代码的输入过程,最终形成后缀名为.java源文件。
编译是指使用Java编译器对源文件进行错误排查的过程,编译后将生成后缀名为.class的字节码文件。
运行是指使用Java解释器将字节码文件翻译成机器代码,在cpu上运行并显示结果的过程。
这一过程如图所示。
4.简述Java应用程序的开发流程。
答:Java应用程序的运行经过编写、编译、运行三个步骤。
第1步,编写程序。
使用记事本或其他软件编写程序的源代码,将源代码保存为文件filename.java文件。
第2步,编译程序。
在MS-DOS命令窗口,将当前目录转换到Java源程序所在的保存目录;输入“javame.java”形式的命令进行程序编译。
第3步,执行程序。
在同样的命令窗口中输入“javame”形式的命令执行程序。
来源:考试大完成了程序的开发,查看相应t目录,其中应该具有两个文件,分别是XXXX.java和XXXX.class。
考试大收集整理c5.当初Sun公司发展Java的原因是:(a)要发展航空仿真软件(b)要发展人工智能软件(c)要发展消费性电子产品b 6.Java是从哪种语言改进并重新设计?(a)Ade(b)C++(c)Pascala7.Java因为什么快速发展而走红?(a)个人计算机与网络(b)游戏软件(c)系统软件8.Java程序的种类有:(a)内嵌于Web文件中,由浏览器来观看的___Applet_______(b)可独立运行的_____Application_____考试大论坛(c)服务器端的____ Servlets _____9.Java是面向对象语言,对象是客观事物的__软件模型__,对象与之是一一对应的,它是很具体的概念。
第六章6.1 设计一个面板,该面板中有四个运动项目选择框和一个文本区。
当某个选择项目被选中时,在文本区中显示该选择项目。
程序运行结果:源文件:Work6_1.javaimport javax.swing.*;import java.awt.*;import ;/*** 6.1设计一个面板,该面板中有四个运动项目选择框和一个文本区。
<BR>*当某个选择项目被选中时,在文本区中显示该选择项目。
<BR>*@author黎明你好*/public class Work6_1 extends JFrame{private static final long serialVersionUID = 1L;private MyPanel6_1 panel;// 此面板public Work6_1(){super("第六章,第一题");panel = new MyPanel6_1();this.add(panel);this.setBounds(100, 100, 400, 150);this.setVisible(true);this.validate();this.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});}public static void main(String args[]){new Work6_1();}}面板类源文件:MyPanel6_1.java/***需要设计的面板类*/class MyPanel6_1 extends JPanel implements ItemListener{private static final long serialVersionUID = 1L;private JCheckBox box1, box2, box3, box4;private JTextArea textArea;public MyPanel6_1(){textArea = new JTextArea(5, 10);box1 = new JCheckBox("足球");box2 = new JCheckBox("排球");box3 = new JCheckBox("篮球");box4 = new JCheckBox("台球");box1.addItemListener(this);box2.addItemListener(this);box3.addItemListener(this);box4.addItemListener(this);this.add(box1);this.add(box2);this.add(box3);this.add(box4);this.add(textArea);this.setBackground(Color.cyan);}public void itemStateChanged(ItemEvent e){JCheckBox box = (JCheckBox) e.getSource();if (box == box1 && box.isSelected())textArea.append(box1.getText() + "\n");else if (box == box2 && box.isSelected())textArea.append(box2.getText() + "\n");else if (box == box3 && box.isSelected())textArea.append(box3.getText() + "\n");else if (box == box4 && box.isSelected())textArea.append(box4.getText() + "\n");}}6.2 设计一个面板,该面板中有四个运动项目单选框和一个文本框。
【程序1】ﻫ题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月得兔子总数为多少?ﻫ//这就是一个菲波拉契数列问题public class lianxi01{ﻫpublic staticvoid main(String[]args) {System、out、println("第1个月得兔子对数: 1”);System、out、println("第2个月得兔子对数: 1");intf1= 1,f2 =1,f,M=24;ﻫfor(int i=3;i〈=M; i++){ﻫf= f2;f2= f1+f2;ﻫf1 = f;System、out、println("第”+ i+”个月得兔子对数:"+f2);}ﻫ}ﻫ}【程序2】题目:判断101-200之间有多少个素数,并输出所有素数。
ﻫ程序分析:判断素数得方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不就是素数,反之就是素数。
ﻫpublicclass lianxi02 {ﻫpublic staticvoidmain(String[]args){ﻫint count = 0;ﻫfor(int i=101; i〈200;i+=2){ booleanb=false;for(int j=2; j〈=Math、sqrt(i);j++)ﻫ{ﻫif(i % j == 0){ b = false;break;}ﻫelse { b =true;}ﻫ}ﻫif(b== true) {coun t++;System、out、println(i );}}ﻫSystem、out、println( "素数个数就是: " + count);}}【程序3】ﻫ题目:打印出所有得"水仙花数”,所谓”水仙花数"就是指一个三位数,其各位数字立方与等于该数本身.例如:153就是一个"水仙花数",因为153=1得三次方+5得三次方+3得三次方。
1.1 指出JAVA语言的主要特点和JAVA程序的执行过程。
答:(1)强类型;(2)编译和解释;(3)自动无用内存回收功能;(4)面向对象;(5)与平台无关;(6)安全性;(7)分布式计算;(8)多线程;程序执行过程如图所示:编写源文件,编译器编译源文件转换成字节码,解释器执行字节码。
1.2 说出开发与运行JAVA程序的重要步骤。
答:(1)编写源文件:使用一个文本编译器,如Edit或记事本,不可以使用Word.将编好的源文件保存起来,源文件的扩展名必须是.java;(2)编译Java源文件:使用Java编译器(javac.exe)编译源文件得到字节码文件;(3)运行Java程序:Java程序分为两类——Java应用程序必须通过Java解释器(java.exe)来解释执行其字节码文件;Java小应用程序必须通过支持Java标准的浏览器来解释执行。
1.3 如何区分应用程序和小应用程序?答:应用程序在与源文件名字相同的类中,有main()方法,该方法代表应用程序的入口; 小应用程序必须有一个Applet类的子类,该类称作主类,必须用public修饰。
1.4 说出JAVA源文件的命名规则。
答:源文件命名规则和类命名规则一样,所有的单词首字母都用大写字母,且必须和源文件的public类同名。
1.6 JAVA语言使用什么字符集?共有多少个不同的字符?答:Java语言使用Unicode字符集,共有65535个字符。
1.7 JAVA语言标识符的命名规则是什么?(1)由字母(包括英文字母、下划线字符、美元字符、文字字符)和数字字符组成(2)限定标识符的第一个字符不能是数字字符(3)不能和关键字重名(4)长度不能超过255个字符1.8 JAVA有那些基本数据类型,它们的常量又是如何书写的?1.9 指出下列内容哪些是JAVA语言的整型常量,哪些是浮点数类型常量,哪些两者都不是。
整型常量: 4)0xABCL,8)003,10)077,12)056L浮点数类型常量:3)-1E-31,5).32E31 13)0.,14).0两者都不是: 1),2),6),7),9),11)第二章运算和语句2.1 Java的字符能参加算术运算吗?可以。
java程序设计教程课后习题答案Java程序设计教程课后习题答案在学习Java程序设计的过程中,课后习题是巩固知识、提高编程能力的重要环节。
通过认真完成课后习题并对答案进行学习,可以帮助我们更好地掌握Java 编程语言的知识和技能。
一、基本语法1. 编写一个Java程序,输出"Hello, World!"。
```javapublic class HelloWorld {public static void main(String[] args) {System.out.println("Hello, World!");}}```2. 编写一个Java程序,计算并输出1到100的和。
```javapublic class SumOfNumbers {public static void main(String[] args) {int sum = 0;for (int i = 1; i <= 100; i++) {sum += i;}System.out.println("1到100的和为:" + sum);}}```二、面向对象1. 编写一个Java程序,定义一个学生类,包括姓名、年龄和学号属性,并实现一个方法用于输出学生信息。
```javapublic class Student {private String name;private int age;private String id;public Student(String name, int age, String id) { = name;this.age = age;this.id = id;}public void printInfo() {System.out.println("姓名:" + name + ",年龄:" + age + ",学号:" + id); }}```2. 编写一个Java程序,定义一个圆类,包括半径属性和计算面积的方法。
第一章 Java语言基础 (5)1.1 指出JA V A语言的主要特点和JA V A程序的执行过程。
(5)1.2 说出开发与运行JA V A程序的重要步骤。
(5)1.3 如何区分应用程序和小应用程序? (5)1.4 说出JA V A源文件的命名规则。
(5)1.6 JA V A语言使用什么字符集?共有多少个不同的字符? (5)1.7 JA V A语言标识符的命名规则是什么? (6)1.8 JA V A有那些基本数据类型,它们的常量又是如何书写的? (6)1.9 指出下列内容哪些是JA V A语言的整型常量,哪些是浮点数类型常量,哪些两者都不是。
(6)第二章运算和语句 (7)2.1 Java的字符能参加算术运算吗? (7)2.2 占字节多的变量能直接赋值给占字节少的变量么? (7)2.3 试用Java语言表达式描述以下数学计算式或逻辑条件: (7)2.4 设在求以下表达式之前,整型变量a的值是4,试指出在求了以下表达式之后,变量a、b和c的值。
(7)2.6 若一个数恰好等于它的因子之和,则这个数称为“完全数”。
编写程序求1000之内的所有完全数。
(7)2.7 编写输入正实数x,求平方不超过x的最大整数n,并输出。
(8)2.8 输入正整数n,输出由n行n列星号字符组成的三角形图案。
(11)2.9 设有整型变量x和y的值分别为5和110。
试指出执行了以下循环语句后,变量x和y的值分别多少? (12)2.10求小于999的所有水仙花数。
(12)2.11 编程序解百鸡问题:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。
百钱买百鸡。
求鸡翁、鸡母和鸡雏各几何? (13)2.12 编写程序,按下面的公式计算自然对数底e的值:e=1+1/1!+1/2!+1/3!+1/4!+...... (13)2.13 编写程序,用如下公式计算圆周率PI的近似值:PI=4-4/3+4/5-4/7+4/9-4/11... (14)2.14 回文整数是指正读法和反读相同的整数,编写一个程序,输入一个整数,判断他是否为回文整数。
04747JAVA语言程序设计(一)一、单选题1、下列字符组合不能作为Java整型常量的是( A )A.078B.0x3ACBC.5000D.0x3ABC2、以下程序代码的输出结果是( B )int x = 10;while (x > 7){ System.out.print("*"); x--; }A.**B.***C.*D.****3、设类U声明,及对象u和v的定义如下:class U{int x, int y;U(int a, int b){x= a; y = b;}void copy(U a){ x = a.x; y = a.y;}}U u = new U(1, 2), v = new U(2, 3);在以下供选择的代码中,可能引起系统回收内存的是( B )A.u.x=v.y;u.y=v.xB.u=vC.u.copyD.v.copy(u)4、设有以下代码:String s1="123";String s2="123";String s3=new String("123");则表达式s1==s2和s1==s3的值分别是( C )A.true,trueB.false,falseC.true,falseD.false,true5、以下是关于Java语言关键字的叙述,其中正确的是( C )A.关键字可以用来描述类的成员类型,但是不能描述普通变量B.关键字由字母(包括英文字母、下划线字符、美元字符、文字字符)和数字组成C.关键字不可以用作变量、方法、类或标号的标识符D.break和main都是Java语言的关键字6、以下程序代码的输出结果是( B )int x=5,y=7,u=9,v=6;System.out.println(x>y ? x+2: u>v ? u-3:v+2);A.8B.6C.7D.true7、Java语言中,在类定义时用final关键字修饰,是指这个类( A )A.不能被继承B.在子类的方法中不能被调用C.能被别的程序自由调用D.不能被子类的方法覆盖8、若有定义如下 class dog { float x; static int y;…},则下列说法中正确的是( D )。
学历类《自考》自考专业(计算机网络)《Java 语言程序设计一》考试试题及答案解析姓名:_____________ 年级:____________ 学号:______________1、在以下供选择的容器类中,属于顶层容器的是( )。
A 、JDialogB 、JPanelC 、JScrollPaneD 、JToolBar正确答案:A答案解析:暂无解析2、设Thread 对象thd 的优先级为7,thd 又创建了另一个Thread 对象chd ,如果未对chd的优先级进行修改,则chd 的优先级为( )。
A 、1B 、5C 、7D 、10正确答案:C答案解析:暂无解析3、在以下供选择的操作中,File 对象能够提供的操作是( )。
A 、删除文件B 、读写文件C 、打开文件D 、查询文件属性正确答案:D答案解析:暂无解析4、在编写访问数据库的Java 程序时,Statement 对象的作用是( )。
A 、建立新数据库连接B 、设置查询命令C 、创建SQL 语句对象D 、存储查询结果正确答案:C答案解析:暂无解析5、在编写访问数据库的Java程序时,ResultSet对象的作用是( )。
A、用来表示与数据库的连接B、存储查询结果C、在指定的连接中处理SQL语句D、建立新数据库连接正确答案:B答案解析:暂无解析6、某Java程序用javax.swing包中的类JFileChooser来实现打开和保存文件对话框。
该程序通过文件对话框首先获得的信息是( )。
A、文件长度B、文件路径C、文件内容D、文件对象正确答案:D答案解析:暂无解析7、以下能作为表示线程优先级的数值,并且级别最低的是( )。
A、0B、1C、15D、16正确答案:B答案解析:暂无解析8、以下术语中,属于文字字型风格属性的是( )。
A、颜色B、宋体C、斜体D、字号正确答案:C答案解析:暂无解析9、MouseMotionListener接口能处理的鼠标事件是( )。
java自考习题答案Java自考习题答案Java是一种广泛应用的编程语言,它具有跨平台性和面向对象的特点,因此在软件开发领域有着广泛的应用。
对于想要学习Java编程语言的人来说,自考习题是一个很好的学习工具。
通过自考习题,可以更好地了解自己对Java知识的掌握程度,找出自己的不足之处,从而有针对性地进行学习和提高。
下面是一些Java自考习题的答案,供大家参考:1. Java中如何定义一个类?答:在Java中,可以使用关键字“class”来定义一个类,语法如下:```javapublic class ClassName {// 类的成员变量和方法}```2. Java中如何创建一个对象?答:在Java中,可以使用关键字“new”来创建一个对象,语法如下:```javaClassName objectName = new ClassName();```3. Java中如何实现继承?答:在Java中,可以使用关键字“extends”来实现继承,语法如下:```javapublic class SubClass extends SuperClass {// 子类的成员变量和方法}```4. Java中如何实现多态?答:在Java中,可以通过方法的重写和方法的重载来实现多态。
方法的重写是指子类重新定义父类的方法,而方法的重载是指在一个类中定义多个同名方法,但参数列表不同。
5. Java中如何处理异常?答:在Java中,可以使用try-catch-finally语句来处理异常。
try块中包含可能抛出异常的代码,catch块用来捕获并处理异常,finally块用来执行清理操作。
通过以上习题答案的学习,相信大家对Java编程语言有了更深入的了解。
希望大家能够通过不断的学习和实践,掌握Java编程语言,成为一名优秀的Java程序员。
第七章 (1)7.1 编写一个应用程序,绘制一个五角星。
(1)7.2 用Graphics2D绘制一条抛物线,设抛物线方程的系数从图形界面输入。
(3)7.3 利用Graphics2D的平移,缩放,旋转功能。
绘制一个六角星。
(7)7.4 编写画图程序。
(10)7.5 输入二次曲线的系数,画出二次曲线 (17)7.6. 写音乐播放器,只能播放wav,mid格式的。
(24)第七章7.1 编写一个应用程序,绘制一个五角星。
程序运行结果:源文件:Work7_1.javaimport java.awt.*;import javax.swing.*;/***7.1画一个五角星<BR>*@author黎明你好*/public class Work7_1{public static void main(String args[]){JFrame win = new JFrame("第七章,第一题");win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);win.setBounds(50, 50, 210, 250);win.add(new FiveStarCanvas(100), BorderLayout.CENTER);win.setVisible(true);win.validate();}}画板类源文件: FiveStarCanvas.java/***画板类,在上面画出五角星*@author黎明你好*/class FiveStarCanvas extends Canvas{private static final long serialVersionUID = 1L;/**五角星外接圆的半径*/private int radius;/***构造方法*@param r-初始化外接圆半径*/public FiveStarCanvas(int r){this.radius = r;}public void paint(Graphics g){int ax = radius; int ay = 0;int bx = (int) (radius * (1 - Math.cos((18 * Math.PI) / 180)));int cx = (int) (radius * (1 + Math.cos((18 * Math.PI) / 180)));int dx = (int) (radius * (1 - Math.cos((54 * Math.PI) / 180)));int ex = (int) (radius * (1 + Math.cos((54 * Math.PI) / 180)));int by = (int) (radius * (1 - Math.sin((18 * Math.PI) / 180)));int cy = (int) (radius * (1 - Math.sin((18 * Math.PI) / 180)));int dy = (int) (radius * (1 + Math.sin((54 * Math.PI) / 180)));int ey = (int) (radius * (1 + Math.sin((54 * Math.PI) / 180)));g.setColor(Color.RED);g.drawLine(dx, dy, ax, ay);g.drawLine(ax, ay, ex, ey);g.drawLine(ex, ey, bx, by);g.drawLine(bx, by, cx, cy);g.drawLine(cx, cy, dx, dy);g.setColor(Color.BLUE);g.drawOval(0, 0, 2 * radius, 2 * radius);g.drawLine(radius, radius, ax, ay);g.drawLine(radius, radius, bx, by);g.drawLine(radius, radius, cx, cy);g.drawLine(radius, radius, dx, dy);g.drawLine(radius, radius, ex, ey);}}7.2 用Graphics2D绘制一条抛物线,设抛物线方程的系数从图形界面输入。
程序运行结果:frame源文件:ParabolaFrame.javaimport java.awt.*;import java.awt.event.*;import javax.swing.*;/***7.2用Graphics2D画抛物线,抛物线方程的系数从图形界面输入.<BR>*@author黎明你好*/public class ParabolaFrame extends JFrame implements ActionListener {private static final long serialVersionUID = 1L;private ParabolaCanvas canvas;// 画出抛物线的花瓣private JTextField inputA_text, inputB_text, inputC_text; // 三个文本框,接收方程系数private JButton confirm_button;// 确定按钮private JLabel display_label;private JPanel panel;// 布局面板private double a, b, c;// 抛物线三个系数public ParabolaFrame(){super("第七章,第二题");a = 1;b = 0;c = 0;panel = new JPanel();canvas = new ParabolaCanvas(a, b, c);inputA_text = new JTextField("" + a, 3);inputB_text = new JTextField("" + b, 3);inputC_text = new JTextField("" + c, 3);confirm_button = new JButton("确定");display_label = new JLabel();panel.add(new JLabel("a = "));panel.add(inputA_text);panel.add(new JLabel("b = "));panel.add(inputB_text);panel.add(new JLabel("c = "));panel.add(inputC_text);panel.add(confirm_button);panel.add(display_label);confirm_button.addActionListener(this);inputA_text.addActionListener(this);inputB_text.addActionListener(this);inputC_text.addActionListener(this);setLabel();this.add(panel, BorderLayout.NORTH);this.add(canvas, BorderLayout.CENTER);this.setBounds(50, 50, 800, 600);this.setVisible(true);this.validate();this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}public void actionPerformed(ActionEvent e){try{a = Double.parseDouble(inputA_text.getText());b = Double.parseDouble(inputB_text.getText());c = Double.parseDouble(inputC_text.getText());}catch( NumberFormatException Ee ){a = 0;b = 0;c = 0;}canvas.set(a, b, c);canvas.repaint();setLabel();}public void setLabel(){String str = "方程:y = ";str += a == 0 ? "" : (a == 1 ? " x^2 " : a + "x^2 ");str += b == 0 ? "" : (a == 0 ? (b == 1 ? " x " : b + "x ") : (b == 1 ? "+ x " : "+" + b+ "x "));str += c == 0 ? "" : (a == 0 && b == 0 ? c : "+" + c);display_label.setText(str);}public static void main(String args[]){new ParabolaFrame();}}画抛物线的画板类:ParabolaCanvas.java/***画板类,在上面画抛物线*@author黎明你好*/class ParabolaCanvas extends Canvas{private static final long serialVersionUID = 1L;double a, b, c;/**构造方法,抛物线初始状态*/public ParabolaCanvas(double a, double b, double c){this.a = a;this.b = b;this.c = c;setBackground(new Color(100, 240, 240));}/***设置抛物线系数*@param a-二次项系数*@param b-一次项系数*@param c-常数项*/public void set(double a, double b, double c){this.a = a;this.b = b;this.c = c;}public void paint(Graphics g){Graphics2D g2D = (Graphics2D) g;// 画坐标系g2D.drawLine(0, 300, 600, 300);// 横线g2D.drawLine(300, 0, 300, 600);// 竖线中心坐标300,300g2D.drawLine(300, 0, 294, 10);g2D.drawLine(300, 0, 306, 10);// y轴箭头g2D.drawLine(600, 300, 590, 294);g2D.drawLine(600, 300, 590, 306);// x轴箭头g2D.drawLine(200, 300, 200, 308);g2D.drawString("- 5", 197, 320);g2D.drawLine(100, 300, 100, 308);g2D.drawString("- 10", 97, 320);g2D.drawLine(400, 300, 400, 308);g2D.drawString("5", 397, 320);g2D.drawLine(500, 300, 500, 308);g2D.drawString("10", 497, 320);g2D.drawLine(300, 100, 307, 100);g2D.drawString("10", 310, 103);g2D.drawLine(300, 200, 307, 200);g2D.drawString("5", 310, 203);g2D.drawLine(300, 400, 307, 400);g2D.drawString("- 5", 310, 403);g2D.drawLine(300, 500, 307, 500);g2D.drawString("- 10", 310, 503);g2D.drawString("0,0", 305, 318);g2D.drawString("y轴", 310, 15);g2D.drawString("x轴", 580, 290);for (int i = 0; i < 600; i += 20){g2D.drawLine(i, 300, i, 303);g2D.drawLine(300, i, 303, i);}// 下面程序为画抛物线double x0, y0, x1, y1, x2, y2, scale;x0 = 300;y0 = 0;scale = 20.0;g2D.setColor(Color.RED);for (x1 = -15; x1 < 15; x1 += 0.001D){y1 = a * x1 * x1 + b * x1 + c;x2 = x0 + x1 * scale;y2 = y0 + y1 * scale;g2D.fillOval((int) x2, 300 - (int) y2, 2, 2);}}}7.3 利用Graphics2D的平移,缩放,旋转功能。