首页 > 代码库 > 练习题2

练习题2

一.判断题

1.System.out.println(); 语句的作用是在结尾显示一个换行符。。 (1分)

T         F

2.Java中所有的I/O都是通过流来实现的。 (1分)

T         F

3.Java系统的标准输入对象是System.in,标准输出对象有两个,分别是System.out和System.err。 (1分)

T         F
4.接口中的方法默认是public abstract方法。 (1分)
T         F

5.接口中的常量默认是public static的变量。 (1分)

T         F

6.类在实现接口的方法时,必须显式地使用public修饰符。 (1分)

T         F

7.一个类只能有一个父类,但一个接口可以有一个以上的父接口。 (1分)

T         F

8.一个数组可以存放许多不同类型的数值。 (1分)

T         F
正确答案:F

9.制造(new)数组时,要指定数组长度,以便为数组分配内存。 (1分)

T         F

10.用户可以自定义自己的异常类。 (1分)

T         F

11.当一个方法在运行过程中产生一个异常,则这个方法会终止,但是整个程序不一定终止运行。 (1分)

T         F

12.Java的字符类型采用的是Unicode编码,每个Unicode码占16个比特。 (1分)

T         F

二.选择题

1.FilterOutputStream is the parent class for BufferedOutputStream, DataOutputStream and PrintStream. Which classes are valid argument for the constructor of a FilterOutputStream? ( ) (2分)

  1. InputStream
  2. OutputStream
  3. RandomAccessFile
  4. StreamTokenizer

2.对于类与对象的关系,以下说法错误的是( )。 (2分)

  1. 类是对象的类型
  2. 对象由类来创建
  3. 类是同类对象的抽象
  4. 对象是创建类的模板

3.以下关于Java的局部内部类的说法错误的是( ) (2分)

  1. 局部内部类只能在当前类中使用
  2. 局部内部类不能包含静态成员
  3. 局部内部类可以访问外部类的所有成员
  4. 在局部内部类中定义的内部类不能被private修饰符修饰

4.下列String类的( )方法返回指定字符串的一部分。 (2分)

  1. extractstring()
  2. substring()
  3. Substring()
  4. Middlestring()

5.以下程序段输出结果的是( ) (2分)

1 public class Test {
2      public static void main(String args[]){
3           String str="ABCDE";
4           str.substring(3);
5           str.concat("XYZ");
6           System.out.print(str);
7      }
8 }

 

  1. DE
  2. DEXYZ
  3. ABCDE
  4. CDEXYZ

6.JPanel组件的默认布局管理器是( )。 (2分)

  1. BorderLayout
  2. FlowLayout
  3. GridLayout
  4. CardLayout

正确答案:A

7.Swing组件必须添加到Swing顶层容器相关的( )。(2分)

  1. 分隔板上
  2. 内容面板上
  3. 选项卡上
  4. 复选框内

8.以下关于构造函数的描述错误的是( )。 (2分)

  1. 构造函数的返回类型只能是void型。
  2. 构造函数是类的一种特殊函数,它的方法名必须与类名相同。
  3. 构造函数的主要作用是完成对类的对象的初始化工作。
  4. 一般在创建新对象时,系统会自动调用构造函数。

9.下面哪个函数是public void aMethod(){...}的重载函数?( ) (2分)

  1. void aMethod( ){...}
  2. public int aMethod(){...}
  3. public void aMethod ( ){...}
  4. public int aMethod ( int m){...}

10.关于被私有访问控制符private修饰的成员变量,以下说法正确的是( ) (2分)

  1. 可以被三种类所引用:该类自身、与它在同一个包中的其他类、在其他包中的该类的子类
  2. 可以被两种类访问和引用:该类本身、该类的所有子类
  3. 只能被该类自身所访问和修改
  4. 只能被同一个包中的类访问

11.下列方法头中哪一个不与其他方法形成重载(overload)关系?( ) (2分)

  1. void mmm()
  2. void mmm(int i)
  3. void mmm(String s)
  4. int mm()

12.下面哪个选项中的代码没有定义内部类,或者错误的定义了内部类? ( ) (2分)

  1. 1 public Class Line { 
    2    int length; 
    3    Class Point {
    4          //内部类代码
    5     } 
    6 }

     

  2. 1 public Class Line {
    2     public Point getPoint() {
    3          return new Point(){
    4               //内部类代码
    5         }; 
    6     } 
    7 }  

     

  3. 1 public Class Line {
    2            //外部类代码 
    3 }  
    4 Class Point {
    5         //内部类代码
    6 } 

     

  4. 1 public Class Line {
    2     public int calcLength() {
    3        Class Point {
    4          //内部类代码
    5        }
    6    } 
    7 }

     

13.以下哪句是错误的? (2分)

  1. 编译器会搜索要import的类的编译结果文件而不是源文件
  2. import是告诉编译器要import的包的信息
  3. import是把要import的类的源代码插入到import语句所在的地方
  4. 编译器在编译的时候需要能访问得到要import的类的编译结果文件

14.Java程序默认引用的包是( )。 (2分)

  1. java.text包
  2. java.awt包
  3. java.lang包
  4. java.util包

三.函数题

4-1 创建一个直角三角形类实现IShape接口   (10分)

创建一个直角三角形类(regular triangle)RTriangle类,实现下列接口IShape。两条直角边长作为RTriangle类的私有成员,类中包含参数为直角边的构造方法。

interface IShape {// 接口

public abstract double getArea(); // 抽象方法 求面积

public abstract double getPerimeter(); // 抽象方法 求周长

}

直角三角形类的定义:

直角三角形类的构造函数原型如下:
RTriangle(double a, double b);

其中 a 和 b 都是直角三角形的两条直角边。

裁判测试程序样例:

 1 import java.util.Scanner;
 2 import java.text.DecimalFormat;
 3 
 4 interface IShape {
 5     public abstract double getArea();
 6 
 7     public abstract double getPerimeter();
 8 }
 9 
10 /*你写的代码将嵌入到这里*/
11 
12 
13 public class Main {
14     public static void main(String[] args) {
15         DecimalFormat d = new DecimalFormat("#.####");
16         Scanner input = new Scanner(System.in);
17         double a = input.nextDouble();
18         double b = input.nextDouble();
19         IShape r = new RTriangle(a, b);
20         System.out.println(d.format(r.getArea()));
21         System.out.println(d.format(r.getPerimeter()));
22         input.close();
23     }
24 }

 

输入样例:

3.1 4.2

输出样例:

6.51
12.5202
源代码
import java.util.Scanner;
import java.text.DecimalFormat;

interface IShape {
    public abstract double getArea();

    public abstract double getPerimeter();
}
/*你写的代码将嵌入到这里*/
class RTriangle implements IShape {
    double  a;
    double  b;
    RTriangle(double a, double b){
        this.a =a;
        this.b =b;
    }
    public double getArea() {
        return (a*b/2);
    }
    public double getPerimeter() {
        return (a+b+Math.sqrt(a*a+b*b));
    }
}

public class Main {
    public static void main(String[] args) {
        DecimalFormat d = new DecimalFormat("#.####");
        Scanner input = new Scanner(System.in);
        double a = input.nextDouble();
        double b = input.nextDouble();
        IShape r = new RTriangle(a, b);
        System.out.println(d.format(r.getArea()));
        System.out.println(d.format(r.getPerimeter()));
        input.close();
    }
}

四.编程题

5-1 求几何形状的面积之和   (10分)

(求几何形状的面积之和)编写一个方法,求数组中所有几何形状对象的面积之和。方法签名如下:

public static double sumArea(shape[] a)

编写测试程序,继承抽象类shape得到圆形类Circle和矩形类Rectangle。

abstract class shape {// 抽象类

/ 抽象方法 求面积 /

public abstract double getArea();

/ 抽象方法 求周长 /

public abstract double getPerimeter();

}

创建四个对象(两个圆和两个矩形)的数组,然后使用sumArea方法求出它们的总面积。(保留4位小数)

输入格式:

输入 1.1 (第1个圆形的半径) 1.8 (第2个圆形的半径) 2.3 3.8 (第1个矩形的宽和高) 5.9 16.8 (第2个矩形的宽和高)

输出格式:

The total area is 121.8401 (总面积,保留4位小数)

输入样例:

2.18
3.16
2.9 5.76
4.8 9.23

输出样例:

The total area is 107.3088
源代码
 1 import java.util.Scanner;
 2 
 3 abstract class shape {
 4     public abstract double getArea();
 5 
 6     public abstract double getPerimeter();
 7 }
 8 
 9 class Circle extends shape {
10     private double r;
11 
12     public Circle(double r) {
13         this.r = r;
14     }
15 
16     @Override
17     public double getArea() {
18         return Math.PI * r * r;
19     }
20 
21     @Override
22     public double getPerimeter() {
23         return 2 * r * Math.PI;
24     }
25 
26 }
27 
28 class Rectangle extends shape {
29     private double side;
30     private double side1;
31 
32     public Rectangle(double side, double side1) {
33         this.side = side;
34         this.side1 = side1;
35     }
36 
37     @Override
38     public double getArea() {
39         return side * side1;
40     }
41 
42     @Override
43     public double getPerimeter() {
44         return (side + side1) * 2;
45     }
46 
47 }
48 
49 public class Main {
50     public static double sumArea(shape[] a) {
51         double sum = 0;
52         for (int i = 0; i < a.length; i++) {
53             sum += a[i].getArea();
54         }
55         return sum;
56     }
57 
58     public static void main(String[] args) {
59         Scanner in = new Scanner(System.in);
60         shape[] a = new shape[4];
61         double r = in.nextDouble();
62         a[0] = new Circle(r);
63         r = in.nextDouble();
64         a[1] = new Circle(r);
65 
66         double w = in.nextDouble();
67         double h = in.nextDouble();
68         a[2] = new Rectangle(w, h);
69         w = in.nextDouble();
70         h = in.nextDouble();
71         a[3] = new Rectangle(w, h);
72 
73         in.close();
74         System.out.println(String.format("The total area is " + "%.4f", sumArea(a)));
75 
76     }
77 }

5-2 数字格式异常   (10分)

(NumberFormatException数字格式异常)编写一个程序,提示用户读取两个整数,然后显示他们的和。程序应该在输入不正确时提示用户再次输入数字。

输入格式:

i 9 (第1次输入) l 8 (第2次输入) 5 6 (第3次输入)

输出格式:

Incorrect input and re-enter two integers: (第1次输出提示) Incorrect input and re-enter two integers: (第2次输出提示) Sum is 11 (输出结果)

输入样例:

i 9
l 8
5 6

输出样例:

Incorrect input and re-enter two integers:
Incorrect input and re-enter two integers:
Sum is 11

源代码:

 1 import java.util.InputMismatchException;
 2 import java.util.Scanner;
 3 import java.text.DecimalFormat;
 4 
 5 public class Main {
 6     public static void main(String[] args) {
 7         Scanner in =new Scanner(System.in);
 8         int m,n;
 9         while(true){
10         try{
11             m=in.nextInt();
12             n=in.nextInt();
13             System.out.println("Sum is "+(m+n));
14             break;
15             
16         }catch(InputMismatchException e){
17             System.out.println("Incorrect input and re-enter two integers:");
18             in.nextLine();
19             continue;
20         }
21      }
22     }
23 }

5-3 查找成绩并折算后输出   (10分)

文件:期中考试成绩.txt中有若干学生的姓名和数学期中考试成绩。 Smith 67 Anderson 75 Lewis 83 Cook 58 David 96 请你编写一个简单的查询成绩程序,当从键盘输入一个姓名时查找到他的数学期中考试分数并按照21%折算后输出。如果没找到则显示Not found. 由于目前的OJ系统暂时不能支持用户读入文件,我们编写程序从键盘输入文件中的姓名和成绩,当输入的名字为noname时,表示结束。noname后面有一个名字,需要查找其成绩。

输入格式:

Smith 67

Anderson 75

Lewis 83

Cook 58

David 96

noname (表示结束)

Bill

输出格式:

Not found.

输入样例:

Smith  67
Anderson  75
Lewis  83
Cook  58
David  96
noname
Lewis

输出样例:

17.43

源代码:

 1 import java.util.HashMap;
 2 import java.util.Map;
 3 import java.util.Scanner;
 4 
 5 public class Main4 {
 6 
 7     public static void main(String[] args) {
 8         Map<String,String> phone = new HashMap<String,String>();
 9         Scanner in = new Scanner(System.in);
10         while(true) {
11             String name = in.next();
12             if(name.equals("noname")) {
13                 break;
14             }
15             String phoneNumber = in.next();
16             phone.put(name, phoneNumber);
17         }
18         String s = in.next();
19         if(!phone.containsKey(s)) {
20             System.out.println("Not Found。");
21         }
22         else{
23             System.out.println(phone.get(s));
24         }
25         in.close();
26     }
27 }

 

5-4 找素数   (10分)

请编写程序,从键盘输入两个整数m,n,找出等于或大于m的前n个素数。

输入格式:

第一个整数为m,第二个整数为n;中间使用空格隔开。例如:

103 3

输出格式:

从小到大输出找到的等于或大于m的n个素数,每个一行。例如:

103

107

109

输入样例:

9223372036854775839 2

输出样例:

9223372036854775907
9223372036854775931

源代码:

 1 import java.math.BigInteger;
 2 import java.util.Scanner;
 3 public class Main {
 4     public static void main(String[] args){
 5         Scanner in = new Scanner(System.in);
 6         BigInteger m;
 7         int n;
 8 
 9         m=in.nextBigInteger();
10         n=in.nextInt();
11         int cnt=0;
12         while (cnt<n){
13             if (m.isProbablePrime(100)){
14                 System.out.println(m);
15                 cnt++;
16             }
17             m=m.nextProbablePrime();
18         }
19         in.close();
20     }
21 }

5-5 计算正五边形的面积和周长   (10分)

从下列的抽象类shape类扩展出一个正五边形(regular pentagon)类RPentagon,这个类将正五边形的边长作为私有成员,类中包含初始化这个值的构造方法。

public abstract class shape {// 抽象类

/ 抽象方法 求面积 / public abstract double getArea();

/ 抽象方法 求周长 / public abstract double getPerimeter(); }

请编程从键盘输入正五边形的边长值,创建一个正五边形对象,然后输出正五边形的面积和正五边形的周长。计算正五边形的面积公式为: S=5a^2/(4tan(36度))其中a为边长。 或者:S=(1/4)a^2√(25+10√5) 输出结果保留4位小数。

输入格式:

输入正五边形的边长。例如:

5

输出格式:

输出正五边形的面积和周长。第一行输出面积,第二行输出周长。例如: 43.0119

25

输入样例:

16.8

输出样例:

485.5875
84

源代码:

 1 import java.util.Scanner;
 2 abstract class Shape{
 3     abstract double getArea();
 4     abstract double getPerimeter();
 5 }
 6 class RPentagon extends Shape{
 7    private double a;
 8    public RPentagon(double a){
 9        this.a = a;
10    }
11    public double getArea(){
12         return 0.25*a*a*Math.sqrt(25+10*Math.sqrt(5));
13     }
14     public double getPerimeter() {
15         return 5*a;
16     }
17     
18 }
19 public class Main {
20 
21     public static void main(String[] args) {
22         Scanner in = new Scanner(System.in);
23         double b=in.nextDouble();
24         RPentagon r= new RPentagon(b);
25         System.out.println(String.format("%.4f",r.getArea()));
26         System.out.println((int)r.getPerimeter());
27     }
28 
29 }

 

 

练习题2