Java语言程序设计期中考试试题
一、编程题
1. 抽象类
创建闭合图形抽象类(ClosedFigure),定义抽象方法计算面积;创建继承平面图形抽象类的两个子类椭圆(Ellipse)和矩形(Rectangle),在子类中实现计算图形面积的方法。设计测试类Test1进行相应的测试,根据不同类型的平面图形进行相应的面积计算。(30分)
提示:根据椭圆第一定义,用a表示椭圆长半轴的长,b表示椭圆短半轴的长,且a>b>0, 椭圆面积公式:L=πab
2.接口
创建接口Speakable和Runer,然后创建两个类Sheep和Person实现这两个接口里面的方法。在类Sheep里面定义羊的特征(咩咩叫,用四肢跑步),在类Person里面定义人的特征(见面都问好,用双腿跑步),设计测试类Test2进行相应的测试。(30分)
提示:对于特征直接打印就可以了。
3.异常
在复数类中增加一个构造方法,该构造方法有一个字符串类型的参数(格式为a+bi,如“3.2+4.5i”)。对该字符串进行处理,提取实部子串和虚部子串,再分别转换为浮点数,赋给相应的成员变量。当实部子串和虚部子串的内容不能转化为浮点数时,抛出数值格式异常NumberFormatException。在main方法中获取用户从控制台输入的复数字符串(如3.2+4.5i),调用上面的构造方法构建复数对象,并进行必要的异常处理。(20分)
提示:从控制台获取用户输入的代码参考如下:
Scanner input = new Scanner(System.in);
String str = input.next();
注意:使用Scanner类需要导入类库中相应的类,代码如下:
import java.util.Scanner;
4. 字符串
已知字符串“i am a student in my university”
按要求执行以下操作(20分):
(1)将本字符串复制到一个字符数组char[] str中
(2)统计该字符串中字母i出现的次数;
(3)取出子字符串“my”;
(4)将本字符串转换成一个字符串数组,要求每个数组元素都是有意义的英文单词,并输出到控制台。
二、运行结果
(1)程序1运行结果
(2)程序2运行结果
(3)程序3运行结果
(4)程序4运行结果
三、源代码
(1)程序1源代码
package task1;
import java.util.Scanner;
import java.text.DecimalFormat;
//闭合图形抽象类(ClosedFigure)
abstract class ClosedFigure {
// 定义抽象方法计算面积
abstract double getArea();
}
// 定义椭圆(Ellipse)类继承继承平面图形抽象类(ClosedFigure)
class Ellipse extends ClosedFigure {
// 定义成员变量
double a, b;
// 定义构造方法
public Ellipse(double a, double b) {
this.a = a;
this.b = b;
}
// 实现抽象方法计算面积
// 根据椭圆第一定义,用a表示椭圆长半轴的长,b表示椭圆短半轴的长,且a>b>0, 椭圆面积公式:L=πab
public double getArea() {
double L = Math.PI * a * b;
return L;
}
}
// 定义矩形(Rectangle)类继承继承平面图形抽象类(ClosedFigure)
class Rectangle extends ClosedFigure {
// 定义成员变量
double a, b;
// 定义构造方法
public Rectangle(double a, double b) {
this.a = a;
this.b = b;
}
// 实现抽象方法计算面积
public double getArea() {
double s = a * b;
return s;
}
}
// 设计测试类Test1进行相应的测试,根据不同类型的平面图形进行相应的面积计算。
public class Test1 {
public static void main(String[] args) {
System.out.println("欢迎光临~晴之小店~ o(≧v≦)o~~");
System.out.println("这里可以计算椭圆和矩形的面积哦~");
Scanner sc = new Scanner(System.in);
DecimalFormat df = new DecimalFormat("0.00");
System.out.println("开始请按1,退出请按0:");
// 设置标志变量,判断计算开始和计算结束
int temp = sc.nextInt();
if (temp == 0) {
System.out.println("欢迎下次光临~(≧▽≦)~再见");
}
while (temp == 1) {
// 设置标志变量,判断椭圆的长半轴和短半轴输入是否符合要求
int temp1 = 1;
while (temp1 == 1) {
System.out.println("请输入椭圆的长半轴和短半轴:");
double aEll = sc.nextDouble();
double bEll = sc.nextDouble();
if (aEll <= 0 || bEll <= 0) {
System.out.println("长半轴、短半轴必须大于0!");
System.out.println("请重新输入:");
temp1 = 1;
}
else if (aEll < bEll) {
System.out.println("长半轴必须大于短半轴!");
System.out.println("请重新输入:");
temp1 = 1;
} else {
Ellipse e = new Ellipse(aEll, bEll);
System.out.println("椭圆的面积为:" + df.format((e.getArea())));
temp1 = 0;
}
}
// 设置标志变量,判断矩形的长和宽输入是否符合要求
int temp2 = 1;
while (temp2 == 1) {
System.out.println("请输入矩形的长和宽:");
double aRec = sc.nextDouble();
double bRec = sc.nextDouble();
if (aRec <= 0 || bRec <= 0) {
System.out.println("矩形的长和宽必须大于0!");
System.out.println("请重新输入:");
temp2 = 1;
} else {
Rectangle r = new Rectangle(aRec, bRec);
System.out.println("椭圆的面积为:" + df.format((r.getArea())));
temp2 = 0;
}
}
System.out.println("继续请按1,退出请按0:");
temp = sc.nextInt();
if (temp == 0) {
System.out.println("欢迎下次光临~(≧▽≦)~再见");
break;
}
}
}
}
(2)程序2源代码
package task1;
// 创建接口Speakable
interface Speakable {
// 定义抽象方法speak()
void speak();
}
// 创建接口Runer
interface Runer {
// 定义抽象方法 run()
void run();
}
// 然后创建两个类Sheep和Person实现这两个接口里面的方法。
class Sheep implements Speakable, Runer {
String name = "绵羊";
// 实现抽象方法speak()
public void speak() {
System.out.println("咩咩");
}
// 实现抽象方法 run()
public void run() {
System.out.println("用四肢跑步");
}
}
// 然后创建两个类Sheep和Person实现这两个接口里面的方法
class Person implements Speakable, Runer {
String name = "人";
// 实现抽象方法speak()
public void speak() {
System.out.println("见面都问好");
}
// 实现抽象方法 run()
public void run() {
System.out.println("用双腿跑步");
}
}
public class Test2 {
public static void main(String[] args) {
Sheep sheep = new Sheep();
System.out.println(sheep.name);
sheep.speak();
sheep.run();
System.out.println();
Person person = new Person();
System.out.println(person.name);
person.speak();
person.run();
}
}
(3)程序3源代码
package cn.itcast.test;
import java.util.Scanner; // 导入Scanner类
//定义复数类
class Complex {
public double real; // 复数实部
public double im; // 复数虚部
// 增加一个构造方法,该构造方法有一个字符串类型的参数,并使用throws关键字声明抛出异常
public Complex(String complex) throws NumberFormatException {
String real, im;
// 提取实部子串和虚部子串
if (complex.indexOf("+") != -1) {
real = complex.substring(0, complex.indexOf("+"));
im = complex.substring(complex.indexOf("+") + 1,
complex.indexOf("i"));
this.im = Double.parseDouble(im);
} else {
real = complex.substring(0, complex.indexOf("-"));
im = complex.substring(complex.indexOf("-") + 1,
complex.indexOf("i"));
this.im = -(Double.parseDouble(im));
}
// 实部转换为浮点数
this.real = Double.parseDouble(real);
}
// 定义getReal()方法获取实部
public double getReal() {
return real;
}
// 定义getReal()方法获取虚部
public double getIm() {
return im;
}
}
// 定义Test3测试类3
public class Test3 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入a+bi格式的复数:");
while (true) {
String str = input.next();
// 下面的代码定义了一个try...catch语句用于捕获异常
try {
// 实例化复数类的对象a
Complex a = new Complex(str);
// 分别输出该复数的实部和虚部
System.out.println("该复数的实部为:" + a.getReal());
System.out.println("该复数的虚部为:" + a.getIm());
break;
} catch (NumberFormatException e) {
System.out.println("数值格式异常!请重新输入:"); // 打印捕获的异常信息
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
(4)程序4源代码
package task1;
public class Test4 {
public static void main(String[] args) {
String s1 = "i am a student in my university";
// (1) 将本字符串复制到一个字符数组char[] str中并输出
char[] str = s1.toCharArray();
System.out.println("(1)将本字符串复制到一个字符数组char[] str中并输出:");
for (int a = 0; a < str.length; a++) {
System.out.print(str[a]);
}
System.out.println("\n");
// (2) 统计该字符串中字母i出现的次数;
int n = 0;
for (int a = 0; a < str.length; a++) {
if (‘i‘ == str[a]) {
n++;
}
}
System.out.println("(2)该字符串中字母i出现的次数:" + n);
System.out.println("\n");
// (3) 取出子字符串“my”;
System.out.println("(3)取出子字符串“my”");
System.out.println(s1.substring(s1.indexOf("my"), s1.indexOf("my")
+ "my".length()));
System.out.println("\n");
// (4) 将本字符串转换成一个字符串数组,要求每个数组元素都是有意义的英文单词,并输出到控制台。
String[] s3 = s1.split(" ");
System.out.println("(4)将本字符串转换成一个字符串数组后,数组元素为:");
for (int a = 0; a < s3.length; a++) {
if(a==s3.length-1){
System.out.print(s3[a] );
}
else
System.out.print(s3[a] + ",");
}
}
}