Java语言程序设计期中考试试题

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运行结果

Java语言程序设计期中考试试题_第1张图片

(2)程序2运行结果

Java语言程序设计期中考试试题_第2张图片

(3)程序3运行结果

Java语言程序设计期中考试试题_第3张图片

(4)程序4运行结果

Java语言程序设计期中考试试题_第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] + ",");
        }
    }
}

你可能感兴趣的:(Java)