自考Java语言程序设计一课后习题与答案全集

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第一章 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 回文整数是指正读法和反读相同的整数,编写一个程序,输入一个整数,判
断他是否为回文整数。

(15)
2.15 草地上有一堆野果,有一只猴子每天吃掉这堆野果的一半又一个,5天后刚好
吃完这堆野果,求这堆野果原来共有多少个?猴子每天吃多少个野果? (17)
第三章面向对象编程基础 (19)
3.1 什么是面向对象技术?它有什么优点? (19)
3.2 面向对象程序设计与面向过程程序设计有什么区别? (19)
3.3 程序中类和对象有什么区别? (19)
3.4 类变量和实例变量,以及类方法和实例方法的区别。

(19)
3.5 子类能继承超类的哪些成员变量和方法? (19)
3.6 子类在什么情况下能隐藏超类的成员变量和方法? (20)
3.7 在子类中是否允许有一个方法和超类的方法名字相同,而类型不同? (20)
3.12 以下程序有什么错误? (20)
3.13 声明一个复数类Complex。

实现其基本功能。

(20)
3.14 声明一个有理数类RationalNum。

要求提供有理数的四则运算,以分数形式输
出有理数和以浮点数形式输出有理数等方法。

(23)
第四章数组和字符串 (28)
4.1 举例说明如何声明、创建和初始化数组。

(28)
4.2 举例说明如何声明、创建和初始化数组。

(28)
4.3 一个数组能够存储不同类型的元素吗? (28)
4.4 编写一个Java 程序,形成以下形式的二维数组,并输出。

(28)
4.5 java中的字符数组与字符串有什么区别? (30)
4.6 确定一个字符数组长度与确定一个String对象的长度有什么不同? (30)
4.7用toUpperCase()和toLowerCase()方法实现大小写转换 (30)
4.8编写一个程序通过连接两个字符串得到一个新字符串并输出。

(31)
4.9 声明MyDate类,功能:增加1天,增减1月和增加1年的方法;输出MyDate
对象日期的方法;求两个MyDate对象日期差的方法。

并提供能用当前日期初始化
MyDate类对象的构造方法。

(31)
4.10 求前n个质数。

要求确定m是否是质数,用早先求出的质数对m的整除性来
确定。

(34)
4.11 编写实现从两个字符串中找出最长的相同字符列的代码。

(35)
4.12 整理字符串,将字符串的前导空白符和后随空白符删去,并将字符串中非空
白字符之间的连接的多个空白符只保留一个,而去掉多余的空白符。

(36)
4.13 编写用数组实现大整数的类,提供大整数的加、减、乘等运算。

(36)
第五章图形界面设计 (43)
5.1 Swing与AWT有何关系? (43)
5.2 什么是组件对象?什么是容器?容器与其他类型的组件有何不同? (44)
5.3 以下程序中,有多少个组件,哪些既是组件又是容器? (44)
5.4 什么是事件?什么是监听器?如何进行事件注册? (44)
5.5 如何进行事件处理?如何获取事件源? (44)
5.6 编写已个小应用程序,小应用程序窗口有一个按钮,点击这个按钮时,点击按
钮的次数会显示在按钮上。

(44)
5.7 创建一个有文本框和三个按钮的程序。

当按下某个按钮时,使不同的文字显示
在文本框中。

(45)
5.8 编写一个有两个文本框的小应用程序,在第一个文本框输入英语单词,在第二
个文本框会自动显示汉语解释;在第一个文本框输入汉语单词,在第二个文本框中
显示英语解释。

设英语单词表只有少许几个。

(47)
5.9 一个标签、一个文本框、一个文本区、两个按钮。

当在文本区中输入若干数后,
点击求和按钮,在文本框显示输入数的和,标签显示“输入数的和”;点击求平均值
按钮,在文本框显示输入数的平均值,标签显示“输入数的平均值”。

要求文本区设
有滚动条。

(49)
5.10 布局设计 (51)
第六章图形界面设计 (54)
6.1 设计一个面板,该面板中有四个运动项目选择框和一个文本区。

当某个选择项
目被选中时,在文本区中显示该选择项目。

(54)
6.2 设计一个面板,该面板中有四个运动项目单选框和一个文本框。

当某个选择项
目被选中时,在文本框中显示该选择项目。

(55)
6.3 设计一个面板,该面板中有四个运动项目单选按钮和一个文本框。

当某个选择
项目被选中时,在文本框中显示该选择项目。

(57)
6.4 设计一个窗口,取默认布局BorderLayout布局。

北面添加一个列表,有4门课
程选项。

中心添加一个文本区,当选择列表中的某门课程后,文本区显示相应课程
的介绍;(JList没有addActionListener方法) (59)
6.5 设计一个窗口,取默认布局BorderLayout布局,北面添加一个组合框,组合框
有多门课程选项。

中心添加一个文本框,当在组合框中选定一门课程后,文本框显
示相应课程。

(61)
6.6 设计一个JFrame窗口,窗口中心添加一个文本区。

另添加4个菜单,每个菜
单都有菜单项,每个菜单项都有对应快捷键,选择某个菜单项时,窗口中心的文本
区显示相应信息。

(62)
6.7 设计一个窗口,窗口有两个依赖于它的对话框,一个对话框负责求园的面积;
另一个负责求三角形的面积。

窗口中一个菜单负责打开这两个对话框。

几个图形的
数据通过对话框输入。

(66)
6.8 设计一个JFrame窗口。

(69)
6.9 设计一个窗口,窗口中有一个文本框。

程序对键盘输入进行监视,当输入一个
整数和回车字符时,在文本框输入1至该整数的数列和;如果中间输入非数字的其
他字符,在文本框中显示输入错误,重新输入的字样。

(72)
6.10 编写一个演示鼠标拖动和移动的程序。

界面设有一个文本区,当鼠标拖动或
移动时,在文本区中输出指明鼠标拖动或鼠标移动,及鼠标位置的字样。

(73)
第七章图形、图像和多媒体 (75)
7.1 编写一个应用程序,绘制一个五角星。

(75)
7.2 用Graphics2D绘制一条抛物线,设抛物线方程的系数从图形界面输入。

(76)
7.3 利用Graphics2D的平移,缩放,旋转功能。

绘制一个六角星。

(80)
7.4 编写画图程序。

(82)
7.5 输入二次曲线的系数,画出二次曲线 (87)
7.6. 写音乐播放器,只能播放wav,mid格式的。

(92)
第八章多线程 (97)
8.1建立线程有哪两种方法? (97)
8.2怎样设置线程的优先级? (97)
8.3编写程序,一个画圆,一个画椭圆。

(97)
8.4在多线程程序中,要考虑互斥的原因是什么?在Java中如何解决? (100)
8.5在多线程程序中,要考虑同步的原因是什么?在Java中如何解决? (100)
8.6模拟排队买票,球票5元,购票者持有5,10,20,50元的,售票员手里开始
没有零钱。

(100)
8.7修改例8.5程序,使一些暂时找不到零钱等待的顾客能按照先来先买的规则,
排队等待购买纪念品。

(107)
第九章输入和输出流 (116)
9.2一个文本,一个按钮。

在文本区中输入数据,点击按钮,将文本内容输出到文
件。

文件通过文件保存对话框制定。

(116)
9.3在一个文件中,每行存的是整数,各行整数个数不等,要求读这个文件,然后
计算每行整数的和,并存到另一个文件中。

(118)
9.4在一个文本区中输入数据,把输入的数据分析成各个单词,然后排序显示到第
二个文本区中,并通过文件保存对话框保存到文件中。

(121)
9.5在一个文本区中输入数据,将文本区中的数据存入文件中,在又用户指定的序
号,程序从文件中读取对应序号数据,输出到文本框中。

(123)
9.6一个文本区,一个按钮,点击按钮选择文件,然后又把文件中的内容输入到文
本区中。

(126)
第十章网络与数据库编程基础 (129)
10.1程序中,用何种对象存储IP地址和域名? (129)
10.2用代码示意程序获取域名和IP地址的方法。

(129)
10.3URL的作用是什么? (129)
10.4URLConnection对象的作用是什么? (129)
10.5由代码示意由网址读取网页内容的过程。

(129)
10.6网络编程可分哪些层次? (130)
10.7分别说出socket连接和serverSocket连接的方法。

(130)
10.8说出java程序与数据库连接的方法。

(130)
10.9 Connection对象的作用是什么? (130)
10.10 ResultSet对象的作用是什么? (130)
10.11如何获得可滚动结果集? (130)
10.12说出实现数据库查询的方法。

(131)
第一章 Java语言基础
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的字符能参加算术运算吗?
可以。

(1)字符与整型数据运算,结果为整型数据,只能赋给整型变量,如果附给字符型变量会损失精度,需要强制类型装换;
(2)字符与字符运算,结果为字符型数据,可以直接赋给字符型或整型变量。

2.2 占字节多的变量能直接赋值给占字节少的变量么?
答:不能直接赋值,需要强制类型转换。

2.3 试用Java语言表达式描述以下数学计算式或逻辑条件:
1)
3
)3
4(r
V⋅

解:V = (4.0/3)*Math.PI*Math.pow(r,3);
2)
)
1
1(
1
2
1
R
R
R+
=
解:R = 1.0 / (1.0/R1+1.0/R2);
3)
6
3
5+
+
=x
x
y
解:y = Math.pow(x,5) + Math.pow(x,3) + 6;
4)
2
2
1
R
M
M
F⋅
=
解:F = 1.0 * M1 * M2 / (R * R);
5)
()()|2/
cos
|
/
sin x
ax
x⋅

解:Math.sin(x) / a * x + Math.abs( Math.cos(π * x / 2) );
6)0 < a <10
解:a > 0 && a < 10
7) 条件 x=1 与 y=2 有且只有一个成立.
解:( x == 1 && y != 2) || (x != 1 && y == 2)
2.4 设在求以下表达式之前,整型变量a的值是4,试指出在求了以下表达式之后,变量a、b和c的值。

1)
;+
+
*
=a
a
b
解:a=5 ; b=16;
2)
;a
a
c+
+
+
=

解:a=5 ; c=10
2.6 若一个数恰好等于它的因子之和,则这个数称为“完全数”。

编写程序求1000之内的所有完全数。

分析:若一个自然数,它所有的真因子(即除了自身以外的约数)的和恰好等于它本身,这种数叫做完全数。

例如6=1+2+3;28=1+2+4+7+14
程序运行结果:
/**
*@author段智敏
*/
public class Work2_6 {
public static void main(String[] args) {
String resultString = "1000以内,完全数有:"; //最后结果字符串
for (int i = 1; i <= 1000; i++){
if (isPerfectNumber(i)){
resultString += i + ",";
}
}
System.out.println(resultString);
}
private static boolean isPerfectNumber(int number) {
int sum = 0;// 因子的和
String str = new String("");
for (int i = 1; i < number; i++){
if (number % i == 0){
sum += i;
str += i + "+";
}
}
if (sum == number){// 如果因子之和,等于本身,则是完数
str = str.substring(0, str.length() - 1); // 去掉字符串最后一个多余的“+”;
System.out.println(number + "的因子有:" + str);
return true;
}
return false;
}
}
2.7 编写输入正实数x,求平方不超过x的最大整数n,并输出。

程序运行结果:
第一种命令行方式输入
import java.util.Scanner;
/**
*编写输入正实数x,求平方不超过x的最大整数n,并输出。

<BR>
*命令行方式,输入正实数,输出结果<BR>
*@author段智敏
*/
public class Work2_7_1
{
public static void main(String[] args)
{
Scanner consoleScanner = new Scanner(System.in);
System.out.print("请输入正实数X:");
String str = consoleScanner.next();
int number = -1;
try
{
number = Integer.parseInt(str);
}
catch( NumberFormatException e )
{
System.out.println("输入非法字符,程序结束");
return;
}
if (number < 1)
System.out.println("输入的数不是正实数,程序结束");
else
{
int n = (int) (Math.sqrt(number));
System.out.println("平方不超过"+number+"的最大整数,n="+n+";");
}
}
}
第二种窗口方式输入
运行结果如下图:
/**
*编写输入正实数x,求平方不超过x的最大整数n,并输出。

*弹出窗口方式
*@author段智敏
*/
import javax.swing.JOptionPane;
public class Work2_7_2
{
private int number;
public Work2_7_2()
{
number = this.getIntegerNumber("请输入一个正实数", 1);
if (number < 1)
return; // 非法,程序结束
int n = (int) (Math.sqrt(number));
showResult("平方不超过" + number + "的最大整数\nn = " + n + ";");
}
/**
*通过图形界面,得到符合规则的正整数的方法
*@param message - 在弹出的对话框中,显示提示信息message
*@param min -要求此数必须大于等于min
*/
public int getIntegerNumber(String message, int min)
{
String str = JOptionPane.showInputDialog(null, "请输入一个正整数", "提示信息",
RMATION_MESSAGE);
int number = -1;
try
{
number = Integer.parseInt(str); // 得到输入的正整数
}
catch( Exception e )
{
JOptionPane.showMessageDialog(null, "输入非数字字符\n程序结束", "错误警告",
JOptionPane.ERROR_MESSAGE);
return -1; // 输入的不是数字字符,程序结束
}
if (number < min)
{
JOptionPane.showMessageDialog(null, "输入的数不符合规则,不是正整数\n程序结束",
"错误警告", JOptionPane.ERROR_MESSAGE);
return -1; // 输入的数不是大于2的正整数时候,程序结束
}
else
return number;
}
/**
*弹出对话框,显示结果
*@param str-需要显示的字符串
*/
public void showResult(String str)
{
JOptionPane.showMessageDialog(null, str, "输出结果",
RMATION_MESSAGE);
}
public static void main(String[] args)
{
new Work2_7_2();
}
}
2.8 输入正整数n,输出由n行n列星号字符组成的三角形图案。

import java.util.*;
/**
*输入正整数n,输出由n行n列星号字符组成的三角形图案。

*@author段智敏
*/
public class Work2_8
{
public static void main(String args[])
{
Scanner consoleScanner = new Scanner(System.in);
System.out.print("请输入正整数n:");
String str = consoleScanner.next();
int n = -1;
try
{
n = Integer.parseInt(str);
}
catch( NumberFormatException e )
{
System.out.println("输入非法字符,程序结束");
return;
}
if (n < 1)
System.out.println("输入的数不是正实数,程序结束");
else
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n-i-1;j++)
{
System.out.print(" ");
}
for(int k=0;k<i+1;k++)
{
System.out.print("*");
}
System.out.println();
}
}
}
}
2.9 设有整型变量x和y的值分别为5和110。

试指出执行了以下循环语句后,变量x和y的值分别多少?
1)while(x<=y) x*=2;
解:x=160 ;y=110;
2)do{x=y/x; y=y-x;}while(y>=1);
解:x=18; y=0;
2.10求小于999的所有水仙花数。

程序运行结果:
源代码文件:Work2_10.java
/**
*求小于999的所有水仙花数
*@author段智敏
*/
public class Work2_10
{
public static void main(String[] args) {
String resultString = new String("1000之前的所有水仙花数有:");// 用来存结果的字符串
for (int i = 100; i < 999; i++)
{
if (isNarcissusNumber(i))
resultString += " " + i;
}
System.out.println(resultString.substring(0,
resultString.length() - 1));
}
public static boolean isNarcissusNumber(int m)// 判断是否是水仙花数的方法
{
int number = m;// 把m存起来
int a[] = new int[100];// 用来存n每个位上的数
int amount = 0;// 表示n的位数
while (m > 0)// 通过循环得到m每个位上的数,存到数组中
{
a[amount] = m % 10;
m = m / 10;
amount++;
}
int sum = 0;
for (int j = 0; j < amount; j++)// 累加每位上的数的位数次方
{
sum += Math.pow(a[j], amount);
}
if (number == sum)// 如果累加的和等于这个数本身,则他是水仙花数,返回真return true;
return false;
}
2.11 编程序解百鸡问题:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。

百钱买百鸡。

求鸡翁、鸡母和鸡雏各几何?
/**
*鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。

<BR>
*百钱买百鸡。

求鸡翁、鸡母和鸡雏各几何。

<BR>
*@author段智敏
*/
public class Work2_11
{
public static void main(String args[])
{
for (int i = 0; i <= 100; i++)
{
for (int j = 0; j <= 100; j++)
{
for (int k = 0; k <= 100; k += 3) //鸡雏的个数必须使3的倍数
{
if(((5*i + 3 * j + k / 3) == 100) && (i + j + k == 100))
System.out.println("鸡翁:"+ i + "; 鸡母:"+ j + "; 鸡雏:"+ k);
}
}
}
}
}
2.12 编写程序,按下面的公式计算自然对数底e的值:e=1+1/1!+1/2!+1/3!+1/4!+......
/**
*按公式计算:e=1+1/1!+1/2!+1/3!+1/4!+......
*@author段智敏
*/
public class Work2_12
{
public static void main(String args[])
{
int n = 1000; // 计算精度
double e = 1.0;
for (int i = 1; i <= n; i++)
{
e = e + 1.0 / Work2_12.factorial(i);
}
System.out.println("e = " + e);
}
/**
*计算阶乘的静态方法
*@param-需要计算阶乘的数
*@return-最后结果
*/
static double factorial(int a)
{
double f = 1.0;
for (int j = 1; j <= a; j++)
f = f * j;
return f;
}
}
2.13 编写程序,用如下公式计算圆周率PI的近似值:PI=4-4/3+4/5-4/7+4/9-4/11...
/**
*圆周率计算
*@author段智敏
*/
public class Work2_13
{
public static void main(String args[])
{
int num = 1000000; // 控制计算的项数,越高,越准确
System.out.println("用公式计算圆周率,\n计算" + num + "项后圆周率的近似值为"
+ Work2_13.getPai(num));
System.out.println("3.14是第" + Work2_13.getIndex(3.14) + "项,\t\t值为:"
+ Work2_13.getPai(Work2_13.getIndex(3.14)));
System.out.println("3.141是第"+ Work2_13.getIndex(3.141) + "项,\t值为:"
+ Work2_13.getPai(Work2_13.getIndex(3.141)));
System.out.println("3.1415是第" + Work2_13.getIndex(3.1415) + "
项,\t值为:"
+ Work2_13.getPai(Work2_13.getIndex(3.1415)));
System.out.println("3.14159是第" + Work2_13.getIndex(3.14159) + "项,\t值为:"
+ Work2_13.getPai(Work2_13.getIndex(3.14159)));
}
/**
*根据给出的数值,得到需要计算多少项才能得到这个数值
*
*@param p-数值
*@return-项数
*/
public static double getIndex(double p)
{
int r = 1, num = 1000000; // 控制计算的项数,越高,越准确
double i = 1.0, pai = 0.0, t = 1.0;
while (r < num)
{
pai = pai + (4.0 / i) * t;
t = -t;
i = i + 2;
r++;
if (pai >= p && pai <= (p + 0.000001))
break;
}
return r;
}
/**
*根据给出的数,按公式进行计算圆周率
*@param num-公式项数
*@return返回按公式计算出的圆周率
*/
public static double getPai(double num)
{
int r = 1;
double i = 1.0, pai = 0.0, t = 1.0;
while (r < num)
{
pai = pai + (4.0 / i) * t;
t = -t;
i = i + 2;
r++;
}
return pai;
}
}
2.14 回文整数是指正读法和反读相同的整数,编写一个程序,输入一个整数,判断他是否为回文整数。

程序运行结果:
import javax.swing.JOptionPane;
/**
*输入整数,判断是否是回文整数
*@author段智敏
*/
public class Work2_14
{
private int number;
public Work2_14()
{
number = getIntegerNumber("输入一个正整数n", 1);// 要求是>=1的整数
if (number < 0)
return;
if (isPalindrome(number))
showResult("输入的正整数“" + number + "”是回文数");
else
showResult("输入的正整数“" + number + "”不是回文数");
}
/**
*判断是否是回文数
*@param number-需要判断的正整数
*@return是回文数返回真,否则返回假
*/
public boolean isPalindrome(int number)
{
int a[] = new int[100];
int i = 0;
int test = number;
while (test > 0) // 把整数的各个位上的数存到数组里
{
a[i] = test % 10;
test = test / 10;
i++;// 累计整数位数
}
for (int j = 0; j < i; j++)
{
if (a[j] != a[i - j - 1])// 有对应不相等的,肯定不是,直接跳出并附给b为false
{
return false;
}
}
return true;// 如果一直相等,则if里边的语句不能被执行b的值是true }
/**
*通过图形界面,得到符合规则的正整数的方法
*@param message - 在弹出的对话框中,显示提示信息message
*@param min - 要求此数必须大于等于min
*@return返回符合规则的整数
*/
public int getIntegerNumber(String message, int min)
{
String str = JOptionPane.showInputDialog(null, message, "提示信息",
RMATION_MESSAGE);
int number = -1;
try
{
number = Integer.parseInt(str); // 得到输入的正整数
}
catch( Exception e )
{
JOptionPane.showMessageDialog(null, "输入非数字字符\n程序结束", "错误警告",
JOptionPane.ERROR_MESSAGE);
return -1; // 输入的不是数字字符,程序结束
}
if (number < min)
{
JOptionPane.showMessageDialog(null, "输入的数不符合规则,不是正整数\n程序结束",
"错误警告", JOptionPane.ERROR_MESSAGE);
return -1; // 输入的数不是大于2的正整数时候,程序结束
}
else
return number;
}
/**
*弹出对话框,显示结果
*@param str-需要显示的字符串
*/
public void showResult(String str)
{
JOptionPane.showMessageDialog(null, str, "输出结果",
RMATION_MESSAGE);
}
public static void main(String args[])
{
new Work2_14();
}
}
2.15 草地上有一堆野果,有一只猴子每天吃掉这堆野果的一半又一个,5天后刚好吃完这堆野果,求这堆野果原来共有多少个?猴子每天吃多少个野果?
/**
*猴子吃苹果问题
*@author段智敏
*/
public class Work2_15
{
public static void main(String args[])
{
int i, j, test = 1;
for (i = 1; i < 100000; i++)
{
test = i;
for (j = 0; j < 5; j++) // 5天
{
test = test / 2 - 1;
}
if (test == 0) // 5天后野果子数量为0,则满足要求
{
System.out.println("这堆野果原来共有" + i + "个");
break;
}
}
// 打印出猴子每天吃野果子的个数
int eat;
test = i;
for (j = 1; j <= 5; j++)
{
eat = test / 2 + 1;
test = test / 2 - 1;
System.out.println("第" + j + "天吃" + eat + "个");
}
}
}
第三章面向对象编程基础
3.1 什么是面向对象技术?它有什么优点?
答:面向对象技术强调在软件开发过程中面向客观世界或问题域中的事物,采用人类在认识客观世界的过程中普遍运用的思维方法,直观、自然地描述客观世界中的有关事物。

面向对象技术的基本特征主要有抽象性、封装性、继承性和多态性。

3.2 面向对象程序设计与面向过程程序设计有什么区别?
答:面向过程程序设计关注的是函数功能的实现;面向对象程序设计关注将函数和数据如何绑定到一个对象,通过对象的描述、对象间的关系、类的管理实现程序的功能。

3.3 程序中类和对象有什么区别?
答:类是一组对象共性的集合。

类具有行为,它描述一个对象能够做什么以及做的方法,它们是可以对这个对象进行操作的程序和过程。

对象是类的一个实例,它代表一个现实物理“事件”。

3.4 类变量和实例变量,以及类方法和实例方法的区别。

3.5 子类能继承超类的哪些成员变量和方法?
3.6 子类在什么情况下能隐藏超类的成员变量和方法?
解:子类重载父类的成员变量、方法时候。

3.7 在子类中是否允许有一个方法和超类的方法名字相同,而类型不同?
解:不允许。

方法重写是指:子类中定义一个方法,并且这个方法的名字、返回类型、参数个数、和类型与从父类继承的方法完全相同。

3.12 以下程序有什么错误?
解:类方法main()调用了类的实例变量,main方法是类方法,不能调用类的实例变量a,导致错误!
3.13 声明一个复数类Complex。

实现其基本功能。

复数类:Complex.java
/**
*复数类
*@author段智敏
*/
public class Complex
{
private double real;// real为实部
private double image;// image为虚部
public Complex()
{
real = Double.NaN;
image = Double.NaN;
}
/**
*构造方法
*@param real-实部
*@param image-虚部
*/
public Complex(double real, double image)
{
this.real = real;
this.image = image;
}
/**
*取复数实部
*@return-返回复数的实部
*/
public double getReal()
{
return real;
}
/**
*设置复数的实部
*@param real-实部
*/
public void setReal(double real)
{
this.real = real;
/**
*取复数的虚部
*@return-返回复数的虚部
*/
public double getImage()
{
return this.image;
}
/**
*设置复数的虚部
*@param image-虚部
*/
public void setImage(double image)
{
this.image = image;
}
/**
*设置实虚部
*@param real-实部
*@param image-虚部
*/
public void setComplex(double real, double image)
{
this.real = real;
this.image = image;
}
/**
*返回该复数的字符串表示。

*@return-该复数的字符串表示形式。

*/
public String toString()
{
if (real == Double.NaN && image == Double.NaN)
return"";
else
{
String result = new String(this.real + ((image > 0) ? "+" : "")
+ ((image != 0) ? this.image + "i" : ""));
return result;
}
}
/**
*复数加法,
*@param val-另一个复数
*@return-当前复数对象与参数指定的复数对象的和
*/
public Complex add(Complex val)
{
Complex result = new Complex (this.real + val.getReal(),
this.image + val.getImage());
return result;
}
/**
*复数减法,当前对象减去参数对象
*@param val-另一个复数
*@return-当前复数对象与参数指定的复数对象的差
public Complex subtract(Complex val) // ,返回,
{
Complex result = new Complex (this.real - val.getReal(), this.image - val.getImage());
return result;
}
/**
*复数乘法
*@param val-另一个复数
*@return-当前复数对象与参数指定的复数对象的积
*/
public Complex multiply(Complex val)
{
Complex result = new Complex ();
result.setReal(this.real * val.getReal() - this.image * val.getImage());
result.setImage(this.real * val.getImage() + this.image * val.getReal());
return result;
}
/**
*复数除法
*@param val-另一个复数
*@return-当前复数对象与参数指定的复数对象的商
*/
public Complex divide(Complex val)
{
Complex result = new Complex ();
result.setReal((this.real * val.getReal() + this.image * val.getImage())
/ (val.getReal() * val.getReal() + val.getImage() * val.getImage()));
result.setImage((this.image * val.getReal() - this.real * val.getImage())
/ (val.getReal() * val.getReal() + val.getImage() * val.getImage()));
return result;
}
}
复数测试类:TestComplex.java
/**
*复数测试类
*@author段智敏
*
*/
public class TestComplex
{
public static void main(String[] args)
Complex complex1 = new Complex(2, 4);
Complex complex2 = new Complex(3, -1);
Complex result = new Complex();
System.out.println("复数1:" + complex1.toString() + ";实部" + complex1.getReal() + ";虚部"
+ complex1.getImage());
System.out.println("复数2:" + complex2.toString() + ";实部" + complex2.getReal() + ";虚部"
+ complex2.getImage());
result = complex1.add(complex2);// 两个复数之和
System.out.println("复数:"+ complex1.toString() + " 与"+ "复数:" + complex2.toString()
+ " 之和为:" + result.toString());
result = complex1.subtract(complex2);// 两个复数之差
System.out.println("复数:"+ complex1.toString() + " 与"+ "复数:" + complex2.toString()
+ " 之差为:" + result.toString());
result = complex1.multiply(complex2);// 两个复数乘积
System.out.println("复数:"+ complex1.toString() + " 与"+ "复数:" + complex2.toString()
+ " 的乘积为:" + result.toString());
result = complex1.divide(complex2);// 两个复数的商
System.out.println("复数:"+ complex1.toString() + " 与"+ "复数:" + complex2.toString()
+ " 的商为:" + result.toString());
}
}
3.14 声明一个有理数类RationalNum。

要求提供有理数的四则运算,以分数形式输出有理数和以浮点数形式输出有理数等方法。

有理数类:RationalNumber.java
/**
*有理数类。

*@author段智敏
*/
class RationalNumber
{
/**numerator分子*/
int numerator;
/**denominator分母*/
int denominator;
public RationalNumber()
{
numerator = Integer.MIN_VALUE;
denominator = Integer.MIN_VALUE;
}
/**
*构造方法。

*@param a-分子。

*@param b-分母。

*@throws Exception分母为0异常。

*/
public RationalNumber(int a, int b) throws Exception
{
if (b == 0)
{
throw new Exception("发生分母为0的异常,分母不能为0");
}
else
{
this.numerator = a;
this.denominator = b;
}
}
/**
*得到分子部分。

*@return-返回分子部分。

*/
public int getNumerator()
{
return numerator;
}
/**
*得到分母部分。

*@return-返回分母部分。

*/
public int getDenominator()
{
return denominator;
}
/**
*设置有理数的分子,分母。

*@param fenzi-分子。

*@param fenmu-分母。

*/
public void setRational(int fenzi, int fenmu)
{
this.numerator = fenzi;
this.denominator = fenmu;
}
/**
*有理数加法。

*@param r-另一个有理数。

*@return-返回当前与参数有理数的和。

*/
public RationalNumber add(RationalNumber r)
{
int a = this.numerator* r.getDenominator() + this.denominator* r.getNumerator();
int b = this.denominator * r.getDenominator();
RationalNumber result = new RationalNumber();
result.setRational(a, b);。

相关文档
最新文档