首页 > 代码库 > 练习题2
练习题2
一.判断题
1.System.out.println(); 语句的作用是在结尾显示一个换行符。。 (1分)
2.Java中所有的I/O都是通过流来实现的。 (1分)
3.Java系统的标准输入对象是System.in,标准输出对象有两个,分别是System.out和System.err。 (1分)
5.接口中的常量默认是public static的变量。 (1分)
6.类在实现接口的方法时,必须显式地使用public修饰符。 (1分)
7.一个类只能有一个父类,但一个接口可以有一个以上的父接口。 (1分)
8.一个数组可以存放许多不同类型的数值。 (1分)
9.制造(new)数组时,要指定数组长度,以便为数组分配内存。 (1分)
10.用户可以自定义自己的异常类。 (1分)
11.当一个方法在运行过程中产生一个异常,则这个方法会终止,但是整个程序不一定终止运行。 (1分)
12.Java的字符类型采用的是Unicode编码,每个Unicode码占16个比特。 (1分)
二.选择题
1.FilterOutputStream is the parent class for BufferedOutputStream, DataOutputStream and PrintStream. Which classes are valid argument for the constructor of a FilterOutputStream? ( ) (2分)
- InputStream
- OutputStream
- RandomAccessFile
- StreamTokenizer
2.对于类与对象的关系,以下说法错误的是( )。 (2分)
- 类是对象的类型
- 对象由类来创建
- 类是同类对象的抽象
- 对象是创建类的模板
3.以下关于Java的局部内部类的说法错误的是( ) (2分)
- 局部内部类只能在当前类中使用
- 局部内部类不能包含静态成员
- 局部内部类可以访问外部类的所有成员
- 在局部内部类中定义的内部类不能被private修饰符修饰
4.下列String类的( )方法返回指定字符串的一部分。 (2分)
- extractstring()
- substring()
- Substring()
- 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 }
- DE
- DEXYZ
- ABCDE
- CDEXYZ
6.JPanel组件的默认布局管理器是( )。 (2分)
- BorderLayout
- FlowLayout
- GridLayout
- CardLayout
正确答案:A
7.Swing组件必须添加到Swing顶层容器相关的( )。(2分)
- 分隔板上
- 内容面板上
- 选项卡上
- 复选框内
8.以下关于构造函数的描述错误的是( )。 (2分)
- 构造函数的返回类型只能是void型。
- 构造函数是类的一种特殊函数,它的方法名必须与类名相同。
- 构造函数的主要作用是完成对类的对象的初始化工作。
- 一般在创建新对象时,系统会自动调用构造函数。
9.下面哪个函数是public void aMethod(){...}的重载函数?( ) (2分)
- void aMethod( ){...}
- public int aMethod(){...}
- public void aMethod ( ){...}
- public int aMethod ( int m){...}
10.关于被私有访问控制符private修饰的成员变量,以下说法正确的是( ) (2分)
- 可以被三种类所引用:该类自身、与它在同一个包中的其他类、在其他包中的该类的子类
- 可以被两种类访问和引用:该类本身、该类的所有子类
- 只能被该类自身所访问和修改
- 只能被同一个包中的类访问
11.下列方法头中哪一个不与其他方法形成重载(overload)关系?( ) (2分)
- void mmm()
- void mmm(int i)
- void mmm(String s)
- int mm()
12.下面哪个选项中的代码没有定义内部类,或者错误的定义了内部类? ( ) (2分)
-
1 public Class Line { 2 int length; 3 Class Point { 4 //内部类代码 5 } 6 }
-
1 public Class Line { 2 public Point getPoint() { 3 return new Point(){ 4 //内部类代码 5 }; 6 } 7 }
-
1 public Class Line { 2 //外部类代码 3 } 4 Class Point { 5 //内部类代码 6 }
-
1 public Class Line { 2 public int calcLength() { 3 Class Point { 4 //内部类代码 5 } 6 } 7 }
13.以下哪句是错误的? (2分)
- 编译器会搜索要import的类的编译结果文件而不是源文件
- import是告诉编译器要import的包的信息
- import是把要import的类的源代码插入到import语句所在的地方
- 编译器在编译的时候需要能访问得到要import的类的编译结果文件
14.Java程序默认引用的包是( )。 (2分)
- java.text包
- java.awt包
- java.lang包
- 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