【JAVA】JAVA 第16周练习题

来源:互联网 发布:苹果儿童编程软件 编辑:程序博客网 时间:2024/06/03 12:26

JAVA 第16周练习题


  • JAVA 第16周练习题
  • 一 判断题
  • 二 选择题
  • 三 函数题
    • 4-1 定义一个直角三角形类
      • 参考代码
  • 四 编程题
    • 5-1 求几何形状的面积之和
      • 参考代码
    • 5-2 数字格式异常
      • 参考代码
    • 5-4 查找成绩并折算后输出
      • 参考代码
    • 5-5 找素数
      • 参考代码
    • 5-6 计算正五边形的面积和周长
      • 参考代码


一 判断题

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.5112.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.183.162.9 5.764.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 9l 85 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  67Anderson  75Lewis  83Cook  58David  96nonameLewis

输出样例:

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

输出样例:

92233720368547759079223372036854775931

参考代码:

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.587584

参考代码:

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();    }}
0 0