Java 第16周练习题
一 判断题
T 1-1 System.out.println(); 语句的作用是在结尾显示一个换行符。
T 1-2 Java中所有的I/O都是通过流来实现的。
T 1-3 Java系统的标准输入对象是System.in,标准输出对象有两个,分别是System.out和System.err。
T 1-4 接口中的方法默认是public abstract方法。
T 1-5 接口中的常量默认是public static的变量。
T 1-6 类在实现接口的方法时,必须显式地使用public修饰符。
T 1-7 一个类只能有一个父类,但一个接口可以有一个以上的父接口。
F 1-8 一个数组可以存放许多不同类型的数值。
T 1-9 制造(new)数组时,要指定数组长度,以便为数组分配内存。
T 1-10 用户可以自定义自己的异常类。
T 1-11 当一个方法在运行过程中产生一个异常,则这个方法会终止,但是整个程序不一定终止运行。
T 1-12 Java的字符类型采用的是Unicode编码,每个Unicode码占16个比特。
二 选择题
2-1 FilterOutputStream is the parent class for BufferedOutputStream, DataOutputStream and PrintStream. Which classes are valid argument for the constructor of a FilterOutputStream? ( )
A. InputStream
B. OutputStream
C. RandomAccessFile
D. StreamTokenizer
2-2 对于类与对象的关系,以下说法错误的是( )。
A. 类是对象的类型
B. 对象由类来创建
C. 类是同类对象的抽象
D. 对象是创建类的模板
2-3 以下关于Java的局部内部类的说法错误的是( )
A. 局部内部类只能在当前类中使用
B. 局部内部类不能包含静态成员
C. 局部内部类可以访问外部类的所有成员
D. 在局部内部类中定义的内部类不能被private修饰符修饰
注:在外部类方法体中定义的类叫局部内部类,局部内部类不能有访问修饰符,且只能访问方法体中的final类型的局部变量。本题正确答案给的是A,但是个人觉得应该是C。
2-4 下列String类的( )方法返回指定字符串的一部分。
A. extractstring()
B. substring()
C. Substring()
D. Middlestring()
2-5 以下程序段输出结果的是( )
public class Test {
public static void main(String args[]){
String str="ABCDE";
str.substring(3);
str.concat("XYZ");
System.out.print(str);
}
}
A. DE
B. DEXYZ
C. ABCDE
D. CDEXYZ
2-6 JPanel组件的默认布局管理器是( )。
A. BorderLayout
B. FlowLayout
C. GridLayout
D. CardLayout
2-7 Swing组件必须添加到Swing顶层容器相关的( )。
A. 分隔板上
B. 内容面板上
C. 选项卡上
D. 复选框内
2-8 以下关于构造函数的描述错误的是( )。
A. 构造函数的返回类型只能是void型。
B. 构造函数是类的一种特殊函数,它的方法名必须与类名相同。
C. 构造函数的主要作用是完成对类的对象的初始化工作。
D.一般在创建新对象时,系统会自动调用构造函数。
2-9 下面哪个函数是public void aMethod(){…}的重载函数?( )
A. void aMethod( ){…}
B. public int aMethod(){…}
C. public void aMethod ( ){…}
D. public int aMethod ( int m){…}
2-10 关于被私有访问控制符private修饰的成员变量,以下说法正确的是( )
A. 可以被三种类所引用:该类自身、与它在同一个包中的其他类、在其他包中的该类的子类
B. 可以被两种类访问和引用:该类本身、该类的所有子类
C. 只能被该类自身所访问和修改
D. 只能被同一个包中的类访问
2-11 下列方法头中哪一个不与其他方法形成重载(overload)关系?( )
A. void mmm()
B. void mmm(int i)
C. void mmm(String s)
D. int mm()
2-12 下面哪个选项中的代码没有定义内部类,或者错误的定义了内部类? ( C )
//A:
public Class Line {
int length;
Class Point {
//内部类代码
}
}
//B:
public Class Line {
public Point getPoint() {
return new Point(){
//内部类代码
};
}
}
//C:
public Class Line {
//外部类代码
}
Class Point {
//内部类代码
}
//D:
public Class Line {
public int calcLength() {
Class Point {
//内部类代码
}
}
}
2-13 以下哪句是错误的?
A. 编译器会搜索要import的类的编译结果文件而不是源文件
B. import是告诉编译器要import的包的信息
C. import是把要import的类的源代码插入到import语句所在的地方
D. 编译器在编译的时候需要能访问得到要import的类的编译结果文件
2-14 Java程序默认引用的包是( )。
A. java.text包
B. java.awt包
C. java.lang包
D. java.util包
三 函数题
4-1 定义一个直角三角形类
创建一个直角三角形类(regular triangle)RTriangle类,实现下列接口IShape。两条直角边长作为RTriangle类的私有成员,类中包含参数为直角边的构造方法。
interface IShape {// 接口
public abstract double getArea(); // 抽象方法 求面积
public abstract double getPerimeter(); // 抽象方法 求周长
}
直角三角形类的定义:
直角三角形类的构造函数原型如下:
RTriangle(double a, double b);
其中 a 和 b 都是直角三角形的两条直角边。
裁判测试程序样例:
import java.util.Scanner;
import java.text.DecimalFormat;
interface IShape {
public abstract double getArea();
public abstract double getPerimeter();
}
/*你写的代码将嵌入到这里*/
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();
}
}
输入样例:
3.1 4.2
输出样例:
6.51
12.5202
参考代码:
class RTriangle implements IShape{
private double a;
private double b;
public RTriangle(double a,double b) {
this.a=a;
this.b=b;
}
public double getArea(){
return a*b*0.5;
}
public double getPerimeter(){
return a+b+Math.sqrt(a*a+b*b);
}
}
四 编程题
5-1 求几何形状的面积之和
(求几何形状的面积之和)编写一个方法,求数组中所有几何形状对象的面积之和。方法签名如下:
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
参考代码:
import java.util.Scanner;
import java.text.DecimalFormat;
abstract class shape {
public abstract double getArea();
public abstract double getPerimeter();
}
class yuan extends shape{
private double r;
public yuan(double ar){
r=ar;
}
public double getArea(){
return Math.PI*r*r;
}
public double getPerimeter(){
return 2*Math.PI*r;
}
}
class juxing extends shape{
private double w;
private double h;
public juxing(double aw, double ah){
w=aw;
h=ah;
}
public double getArea(){
return w*h;
}
public double getPerimeter(){
return 2*(w+h);
}
}
public class Main {
public static double sumArea(shape[] a){
double sum=0;
for(int i=0;i<a.length;i++){
sum+=a[i].getArea();
}
return sum;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
DecimalFormat decimalFormat= new DecimalFormat("#.####");
shape[] a=new shape[4];
double r=in.nextDouble();
a[0]=new yuan(r);
r=in.nextDouble();
a[1]=new yuan(r);
double w=in.nextDouble();
double h=in.nextDouble();
a[2]=new juxing(w,h);
w=in.nextDouble();
h=in.nextDouble();
a[3]=new juxing(w,h);
in.close();
System.out.println("The total area is "+decimalFormat.format(sumArea(a)));
}
}
5-2 数字格式异常
(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
参考代码:
import java.util.Scanner;
import java.io.IOException;
import java.text.DecimalFormat;
public class MouseInfo {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int a,b;
while(true){
try{
a=in.nextInt();
b=in.nextInt();
System.out.println("Sum is "+(a+b));
break;
}catch(java.util.InputMismatchException e){
System.out.println("Incorrect input and re-enter two integers:");
in.nextLine();
continue;
}
}
}
}
5-4 查找成绩并折算后输出
文件:期中考试成绩.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
参考代码:
import java.util.*;
public class Main{
public static void main(String [] args){
List<Map<String,String>> datas = new ArrayList<Map<String,String>>();
Scanner in = new Scanner(System.in);
String name,grade;
while(true){
name = in.next();
if(name.equals("noname")){
break;
}
grade = in.next();
Map<String,String> map = new HashMap<String,String>();
map.put(name,grade);
datas.add(map);
}
String na = in.next();
for (int i = 0; i < datas.size(); i++) {
if(datas.get(i).containsKey(na)){
System.out.println(Integer.parseInt(datas.get(i).get(na))*0.21);
return;
}
}
System.out.println("Not found.");
}
}
5-5 找素数
请编写程序,从键盘输入两个整数m,n,找出等于或大于m的前n个素数。
输入格式:
第一个整数为m,第二个整数为n;中间使用空格隔开。例如:
103 3
输出格式:
从小到大输出找到的等于或大于m的n个素数,每个一行。例如:
103
107
109
输入样例:
9223372036854775839 2
输出样例:
9223372036854775907
9223372036854775931
参考代码:
import java.math.BigInteger;
import java.util.Scanner;
/**
* Created by jinlong on 2016/11/15.
*/
public class Main {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
BigInteger m;
int n;
m=in.nextBigInteger();
n=in.nextInt();
int cnt=0;
while (cnt<n){
if (m.isProbablePrime(100)){
System.out.println(m);
cnt++;
}
m=m.nextProbablePrime();
}
in.close();
}
}
5-6 计算正五边形的面积和周长
从下列的抽象类shape类扩展出一个正五边形(regular pentagon)类RPentagon,这个类将正五边形的边长作为私有成员,类中包含初始化这个值的构造方法。
public abstract class shape {// 抽象类
/* 抽象方法 求面积 */ public abstract double getArea();
/* 抽象方法 求周长 */ public abstract double getPerimeter(); }
请编程从键盘输入正五边形的边长值,创建一个正五边形对象,然后输出正五边形的面积和正五边形的周长。计算正五边形的面积公式为: S=5a^2/(4*tan(36度))其中a为边长。 或者:S=(1/4)a^2*√(25+10√5) 输出结果保留4位小数。
输入格式:
输入正五边形的边长。例如:
5
输出格式:
输出正五边形的面积和周长。第一行输出面积,第二行输出周长。例如: 43.0119
25
输入样例:
16.8
输出样例:
485.5875
84
参考代码:
import java.text.DecimalFormat;
import java.util.Scanner;
abstract class shape {
public abstract double getArea();
public abstract double getPerimeter();
}
class RPentagon extends shape{
private double side;
public RPentagon(double side) {
this.side = side;
}
@Override
public double getArea() {
//return 5*side*side/(4*Math.tan(36.0/180*Math.PI));
return 0.25*side*side*Math.sqrt(25+10*Math.sqrt(5));
}
@Override
public double getPerimeter() {
return side*5;
}
}
public class Main {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
DecimalFormat decimalFormat= new DecimalFormat("#.####");
double a=in.nextDouble();
RPentagon rPentagon= new RPentagon(a);
System.out.println(decimalFormat.format(rPentagon.getArea()));
System.out.println(decimalFormat.format(rPentagon.getPerimeter()));
in.close();
}
}