【Java】Java 期中练习题

Java 期中练习题


  • Java 期中练习题
  • 一 判断题
  • 二 选择题
  • 三 编程题
    • 5-1 找素数
      • 参考代码
    • 5-2 计算正五边形的面积和周长
      • 参考代码
    • 5-3 简单的计算器
      • 参考代码
    • 5-4 求解给定字符串的前缀
      • 参考代码
    • 5-5 找出最大的对象
      • 参考代码
    • 5-6 使用公历类GregorianCalendar
      • 参考代码


一 判断题

T 1-1 A protected datum or method can be accessed by its subclasses in any package.
F 1-2 A final method can be overridden.
F 1-3 You can override a static method defined in a superclass.
T 1-4 An interface can extend from one or more interfaces.
T 1-5 A protected datum or method can be accessed by any class in the same package.。
F 1-6 A final class can be extended.
F 1-7 You can always successfully cast an instance of a superclass to a subclass.
T 1-8 An interface is compiled into a separate bytecode file.
T 1-9 An abstract method must be nonstatic.
F 1-10 An abstract class can extend an interface.

二 选择题

2-1
以下哪句是错误的?
A. 编译器会搜索要import的类的编译结果文件而不是源文件
B. import是告诉编译器要import的包的信息
C. import是把要import的类的源代码插入到import语句所在的地方
D. 编译器在编译的时候需要能访问得到要import的类的编译结果文件

2-2
Which of the following is a correct interface?
A. interface A { void print() { }; }
B. abstract interface A extends I1, I2 { abstract void print() { }; }
C. abstract interface A { print(); }
D. interface A { void print(); }

2-3
Which of the following classes definitions defines a legal abstract class?
A. class A { abstract void unfinished() { } }
B. class A { abstract void unfinished(); }
C. abstract class A { abstract void unfinished(); }
D. public class abstract A { abstract void unfinished(); }

2-4
以下关于继承的叙述正确的是( )。
A. 在Java中类只允许单一继承
B. 在Java中一个类只能实现一个接口
C. 在Java中一个类不能同时继承一个类和实现一个接口
D. 在Java中接口只允许单一继承

2-5
若A1、A2为已定义的接口 ,以下接口定义中没有语法错误的是( ) 。
A. interface B { void print() { } }
B. abstract interface B { void print() }
C. abstract interface B extends A1,A2 { abstract void print(){ };}
D. interface B { void print();}

2-6
在Java中,能实现多重继承效果的方式是( )。
A. 接口
B. 继承
C. 内部类
D. 适配器

2-7
下列选项中,用于实现接口的关键字是 ( )。
A. interface
B. implements
C. abstract
D. class

2-8
下列哪种异常是检查型异常,需要在编写程序时声明 ( ).
A. NullPointerException
B. ClassCastException
C. FileNotFoundException
C. IndexOutOfBoundsException

2-9
编译和运行下列程序会出现什么样的结果( )。
public class Ref
{
public static void main(String[] args){
Ref r = new Ref();
r.amethod(r);
}
public void amethod(Ref r){
int i = 99;
multi(r);
System.out.println(i);
}
public void multi(Ref r){
r.i = r.i * 2;
}
}

A. 编译出错
B. 输出:99
C. 输出:198
D. 运行出错

2-10
下述哪条关于构造方法的说法,不符合Java语法的规定( )。
A. 每个类至少有一个构造方法
B. 构造方法必须与类同名
C. 构造方法无返回值,其返回值类型必须写为void
D. 构造方法必须是public的

三 编程题

5-1 找素数

请编写程序,从键盘输入两个整数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;

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 (cntif (m.isProbablePrime(100)){
                System.out.println(m);
                cnt++;
            }
            m=m.nextProbablePrime();
        }
        in.close();
    }
}

5-2 计算正五边形的面积和周长

从下列的抽象类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

参考代码:

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

5-3 简单的计算器

编程实现一个简单的计算器,实现两个整数的加、减、乘、除。 注意:输入的数字为整数,可能大于Long.MAX_VALUE (即: 9223372036854775807)

输入格式:
例如输入被除数和除数,除号是“/”:
199818221687230837883277970155607217447/15607605175531087007(除法运算)

输出格式:
12802618943776012921 (输出商)

输入样例:

268757455632088758902114193354244344883-187825044215992922193584201757800947591

输出样例:

80932411416095836708529991596443397292

提示:
一. 当字符串对象str存储的值为”199818221687230837883277970155607217447/15607605175531087007”时,下面的方法可以将str从除号”/”处分割成两个字符串:
String[] ob = str.split(“\D”, 0);
这时,ob[0]的值为”199818221687230837883277970155607217447”;
ob[1]的值为”15607605175531087007”.

二. 如果要检测字符串中是否包含除号’/’,可以用下面的方法检测:
(in1.indexOf(‘/’) != -1)为true,表示包含’/’。

参考代码:

import java.math.BigInteger;
import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        String string = in.next();
        String[] ob = string.split("\\D");

        BigInteger a = new BigInteger(ob[0]);
        BigInteger b = new BigInteger(ob[1]);

        int op = 0;
        if (string.indexOf("+")!=-1)        op=1;
        else if (string.indexOf("-")!=-1)   op=2;
        else if (string.indexOf("*")!=-1)   op=3;
        else                                op=4;

        switch (op){
            case 1:
                System.out.println(a.add(b));
                break;
            case 2:
                System.out.println(a.subtract(b));
                break;
            case 3:
                System.out.println(a.multiply(b));
                break;
            case 4:
                System.out.println(a.divide(b));
                break;
            default:
                System.out.println("op error.");
                break;
        }
    }
}

5-4 求解给定字符串的前缀

求解给定字符串的前缀。

输入格式:
输入数目不定的多对字符串,每行两个,以空格分开。 例如:
filename filepath
Tom Jack

输出格式:
返回两个字符串的最大前缀,例如:
The common prefix is file
No common prefix

输入样例:

filename filepath
Tom Jack

输出样例:

The common prefix is file
No common prefix

参考代码:

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static String prefix(String s1, String s2){
        StringBuffer stringBuffer = new StringBuffer("");
        StringBuffer no = new StringBuffer("No common prefix");
        StringBuffer yes = new StringBuffer("The common prefix is ");
        boolean hasPrefix = false;
        int i=0;
        while (iif (s1.charAt(i)==s2.charAt(i)) {
                hasPrefix=true;
                stringBuffer.append(s1.charAt(i));
                i++;
            }
            else {
                break;
            }
        }
        if (hasPrefix){
            stringBuffer=yes.append(stringBuffer);
        }else{
            stringBuffer=no.append(stringBuffer);
        }
        return new String(stringBuffer);
    }
    public static void main(String[] args){
        String string1,string2;
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            string1 = in.next();
            string2 = in.next();
            System.out.println(prefix(string1, string2));
        }
        in.close();
    }
}

5-5 找出最大的对象

(找出最大的对象)编写一个方法,返回对象数组中最大的对象。方法签名如下:

public static Object max(Comparable[] a)

所有对象都是Comparable接口的实例。对象在数组中的顺序是由compareTo方法决定的。

编写测试程序,从键盘输入5个字符串和5个整数,创建一个由5个字符串构成的数组、一个由5个整数构成的数组。找出数组中最大的字符串、整数并输出。

输入格式:
输入
Xi’an (输入5个字符串,每行一个)
Beijing
ShangHai
GuangZhou
ShenZhen

8 9 12 7 6 (输入5个整数,以空格分隔)

输出格式:
输出 Max string is Xi’an (输出最大的字符串)
Max integer is 12 (输出最大的整数)

输入样例:

France
Japan
German
China
India
6 34 89 168 53

输出样例:

Max string is Japan
Max integer is 168

参考代码:

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static Object max(Comparable[] a){
        Arrays.sort(a);
        return a[a.length-1];
    }
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        String[] str = new String[5];
        Integer[] arr = new Integer[5];
        for (int i = 0; i < 5; i++) {
            str[i] = in.next();
        }
        for (int i = 0; i < 5; i++) {
            arr[i] = in.nextInt();
        }
        System.out.println("Max string is "+max(str));
        System.out.println("Max integer is "+max(arr));
        in.close();
    }
}

5-6 使用公历类GregorianCalendar

使用公历类 GregorianCalendar,公历类 GregorianCalendar有方法setTimeInMillis(long);可以用它来设置从1970年1月1日算起的一个特定时间。请编程从键盘输入一个长整型的值,然后输出对应的年、月和日。例如输入:1234567898765,输出:2009-1-14

输入格式:
输入
1234567898765 (毫秒数)

输出格式:
输出
2009-1-14 (输出年、月和日,实际应该是2月,因为Java API 从0开始计算月份)

输入样例:

1450921070108

输出样例:

2015-11-24

参考代码:

import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        GregorianCalendar gcl= new GregorianCalendar();
        Scanner in = new Scanner(System.in);
        long time = in.nextLong();
        gcl.setTimeInMillis(time);
        System.out.println(gcl.get(Calendar.YEAR)+"-"+gcl.get(Calendar.MONTH)+"-"+gcl.get(Calendar.DAY_OF_MONTH));
    }
}

你可能感兴趣的:(Java)