【Java】Java第16周练习题

本文提供了Java编程的第16周练习题目,涵盖了判断题、选择题和函数题。题目涉及Java的基础语法、IO操作、类与对象、异常处理等多个方面。函数题包括创建直角三角形类、计算几何形状面积之和、处理数字格式异常、查找成绩、找素数以及计算正五边形的面积和周长等实践问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值