0


第一大题、分析(共14小题,满分100分)

1 、(9分)

设计一个专门用于处理实际项目中提供的数据格式不正确问题的编译异常类型(checkedException),要求在使用输入的内容时,必须对数据进行检查,如果数据不正确,利用异常处理机制进行消息传递。假设某个实际应用在一个类型定义中有一个成员方法需要接收文件名为java源文件,请你写出对于文件名进行判定的一段代码。你需要完成的设计如下:
(1)实际应用需要对提供的Java源文件进行编译和运行,请你设计一个命名为NOtJavaFileException的类型,异常消息内容为"非Java源文件";
(2)完善下面FileTool类型中文件编译方法fileCompile的定义(异常所在的包不考虑);
public class FileTool{
public static void fileCompile(Stirng filename){
//仅写出文件格式判定代码段,其他处理代码不需要完成
}
(3)设计一个程序FileCmpTest,完成对文件名为“HelloWorld.java”和“HelloWorld.class”的文件进行编译,要求使用try-catch方式处理异常。
(4)写出程序的运行结果。

参考答案:

(1)(30%分)异常类型设计如下:
public class NotJavaFileException extends Exception{
public NotJavaFileException(){
super("非Java源文件");
}
}
(2)(30%分)类型设计如下:
public class FileTool{
public static void fileCompile(String filename)throws NotJavaFileException{
if(!filename.endsWith(".java")){
throw new NotJavaFileException();
}

    }

}
(3)(30%分)FileCmpTest设计如下:
public class FileCmpTest{
public static void main(String[] args){
String file1="";
String file2="";
try{
FileTool.fileCompile(file1);
fileToll.fileCompile(file2);
}catch(NotJavaFileException e){
System.out.println(e.getMessage());
}

    }

}
(4)(10%分)程序的运行结果:根据处理方法不同结果不一致,有异常输出即可。

2 、(5分)

有文件Main.java代码如下:

//源文件名为Main.java
public class Main
{
public static void main(String[] args)
{
Person p = new Student( );
p.work();
p.work(100);

}
}

//类Person定义
class Person{
protected int age;
public Base(int age){
this.age = age;
}
public void work( ){
System.out.println("Person working…");

  }

}
//类Student定义
class Student extends Person{
private static float var1 = 10;
private static float var2 = 20;
void work( ){
System.out.println("Student studying…");
}
void work(String subject){
System.out.println("Student studying"+subject);
}
static void f1(String s){
this.var1 = super.age;
try{
var2 = Integer.parseInt(s);
}catch(RuntimeException e){
e.printStackTrace( );
}catch(NumberFormatException e){
e.printStackTrace( );
}
}
}

请你上机调试分析代码,指出代码中主要错误,并修改过来,不要修改Main类中的代码,仅修改Person和Student的定义代码。

参考答案:

1)类Person的构造函数名错误,将Base改为Person;
2)将子类Student的重写方法work的访问权限改为public ,并将void work(String subject)改为void work(int subject);
3) 将超类Person增加一个重载方法public void work(int x)方法;
4)类方法中不能使用非静态成员super.age,将该行代码删除;
5)异常类型捕捉次序有问题,应该先catch特性异常再catch超类的异常,修改方法为将两个catch语句的位置交互。

3 、(8分)
编写一个Java GUI应用程序,窗口标题为“GridLayout”,窗口布局如下图A所示,在图A窗口中单击任意一个Button,网格的划分方式会变化为图B;在图B窗口中单击任意一个Button,网格的划分方式会变化为图A。

  ![](https://img-blog.csdnimg.cn/754901e705854df7bc2854b792178103.png)                        ![](https://img-blog.csdnimg.cn/5e3d132aef4b4f3eb652bf8ef52a326f.png)

       图A                                                                                                  图B

参考答案:


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class MyWindows extends JFrame implements ActionListener{
    JButton[] jbts=new JButton[6];    
    JPanel p1;
    
    boolean isfirst=false;
    String[] bname={"ont","two","three","four","five","six"};
    public MyWindows(){
        super("GridLayout");
        isfirst=true;
        p1=new JPanel();
        p1.setLayout(new GridLayout(3,2));
    
        for(int i=0;i<6;i++){
            jbts[i]=new JButton(bname[i]); 
            jbts[i].addActionListener(this);
            p1.add(jbts[i]);     
        }
        this.getContentPane().add(p1);
        this.setBounds(300,300,200,200);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }
    
    public void actionPerformed(ActionEvent e){
    
        if(isfirst){
            p1=new JPanel();
            p1.setLayout(new GridLayout(3,2));
            for(int i=0;i<6;i++)p1.add(jbts[i]); 
            this.getContentPane().add(p1) ;         
            isfirst=false; 
            this.validate();       
        }else{
            isfirst=true;
            p1=new JPanel();
            p1.setLayout(new GridLayout(2,3));
            for(int i=0;i<6;i++)p1.add(jbts[i]); 
            this.getContentPane().add(p1) ;             
            this.validate(); 
        }
    }
    public static void main(String[] args) {
        new MyWindows();
    }
}

4 、(5分)
以下是使用FileInputStream类和FileOutputStream类实现复制文件的功能。请你阅读以下代码,并将空白处的缺失代码填写完整。

  import java.io.*;

class Test2
{
public static void main(String[] args)
{
String file1,file2;
int ch=0;
file1="readme.txt";
file2="readme.bak";
try{
FileInputStream fis=new (1) ;
(2) fos=new FileOutputStream(file2);
int size= (3) ;
System.out.println("字节有效数:"+size);
while((ch=fis.read()) 1=-1){
System.out.write(ch);
fos.write(ch);
}
fis.close();
fos.close();
}catch( (4) e){
System.out.println(e.toString());
}
}
}

参考答案:

(1) FileInputStream(file1)
(2)FileOutputStream或OutputStream
(3)fis.available()
(4)IOException或Exception

5 、(8分)
设计一个复数类,复数类的定义要求如下:

public class Complex { 
     Complex(){ } //无参构造方法
     Complex(double x,double y){    //带参构造方法
      }
     Complex add(Complex c){  //两复数相加
     } 
     Complex minus(Complex c){  //两复数相减
     }
     Complex multi(Complex c){   //两复数相乘
     }
     Complex divide(Complex c){   //两复数相除
     } 
     void print(){  //输出复数的a+bi形式
     }
  } 
  完成其加、减、乘、除等运算。并测试输出3-49i与8+91i的加、减、乘、除等运算结果。
  提示:两个复数的乘除运算结果见下图.

参考答案:

import java.util.*;

class Complex
{
     double a,b;
     Complex(){};
     Complex(double x,double y) {                                                    
        a=x;
        b=y;
    }
    Complex add(Complex c)//加法运算
    {
        Complex p = new Complex();
        p.a=a+c.a;
        p.b=b+c.b;
        return p;
    }
    Complex minus(Complex c)//减法运算
    {
        Complex p = new Complex();
        p.a=a-c.a;
        p.b=b-c.b;
        return p;
    }
    Complex multi(Complex c)//乘法运算
    {
        Complex p = new Complex();
        p.a=a*c.a-b*c.b;
        p.b=b*c.a-a*c.b;
        return p;
    }
    Complex divide(Complex c)//除法运算
    {
        Complex p = new Complex();
        try {
            p.a=(a*c.a+b*c.b)/(c.a*c.a+c.b*c.b);
            p.b=(b*c.a+a*c.b)/(c.a*c.a+c.b*c.b);
        } catch (Exception e) {
            System.out.println("你除数为0了!");
        }
        return p;
    }
    void print()//将其输出结果转为a+bi形式
    {
        if(b>0) {
            if(a!=0)
                System.out.println(a+"+"+b+"i");
            else
                System.out.println(b+"i");
        }
        if(b==0)
            System.out.println(a);
        if(b<0) {
            if(a==0)
                System.out.println(b+"i");
            else
                System.out.println(a+""+b+"i");
        }
    }
}

6 、(8分)

设计一个Shape接口和他的两个实现类Square和Circle,要求如下:
(1)Shape接口定义一个方法area(),方法接收一个double类型的参数,返回一个double类型的结果。
(2)Square和Circle中实现Shape接口,分别求正方形和圆形的面积。
在测试类中完成创建Square和Circle对象,计算边长为2的正方形面积和半径为3的圆形面积,圆周率使用Math类中的PI值。

参考答案:

import java.util.*;

class Test {
    public static void main(String[] args) {
        Squre sq = new Squre();
        System.out.println("边长为2的正方形面积为”+sq.area(2));
        Circle cr = new Circle();
        System.out.println("半径为3的圆形面积为”+cr.area(3));
    }
}

Interface Shape {
    double area(double x);
}

class Square implements Shape {
    double area(double x){
        return x*x;
    }
}

class Circle implements Shape{
    double area(double r) {
        return Math.PI*r*r;
    }
}

7 、(5分)编写一个学生类 Student ,要求:
(1) 学生类 Student 属性有:
id : long型,代表学号
name : String类对象,代表姓名
age : int型,代表年龄
sex : boolen型,代表性别(其中:true表示男,false表示女)
phone : String类对象,代表联系电话
(2) 学生类 Student的方法有:
Student(long i , String n , int a , boolean s ,String p) :有参构造函数,形参表中的参数分别初始化学号、姓名、年龄、性别和联系电话。
int getAge() ( ) : 获取年龄作为方法的返回值。
boolean getSex( ) ( ) : 获取性别作为方法的返回值。
String getPhone ( ) : 获取联系电话作为方法的返回值。
public String toString( ) : 以 姓名:联系电话 的形式作为方法的返回值。

请输入答案:

参考答案:

class  Student {
    long id;      
    String name;
    int age;
    boolean sex;
    long phone;
          
    Student(long i, String n, int a, boolean s, String p){
        id = i;       
        name = n;
        age = a;
        sex = s;
        phone = p;
    }
    int getAge() {return age;}  
    boolean getSex() {return sex;}   
    String getPhone() {return phone;}
    public String toString() {return name+" : "+phone;}
}

8 、(8分)

设计一个Shape接口和他的实现类园Circle,要求如下:
(1)在接口Shape中定义一个方法area(),方法无参数,返回一个double类型的结果,该结果表示图形的面积。
(2)Circle中实现Shape接口,求圆形的面积,设计该类型的成员变量和给成员变量赋值的构造方法。
(3)设计测试类,完成创建Circle对象,计算半径为3的圆形面积。

请输入答案:

参考答案:
(1)(20%分)接口Shape设计如下:
public interface Shape {
public double area();
}
(2)(60%分)实现类型设计如下:
public class Circle implements Shape{
double r;
public Circle(double r){
this.r=r;
}
public double area(){
return Math.PIrr;
}
}

(3)(20%分)测试类设计如下:
public class Test{
public static void main(String[] args){
Circle circle=new Circle(3);
System.out.println("半径为3的园面积为:"+square.area());
}
}

9 、(9分)
根据下面提供的手机接口和电话卡抽象类,以及苹果手机类型,请你设计一个使用移动网络的电话卡MobileCard,电话卡支持打电话,其实现打电话采用模拟代码,以标准输出”正在使用移动网络拨打xxx电话“描述,其中xxx为你拨打的电话号码。
interface IPhoneable
{
void call(String telid);
}
abstract class PhoneCard
{
public abstract void call(String telid);
}

class AppleIphone12 implements IPhoneable
{
private PhoneCard pc;
public void setPc(PhoneCar pc){
this.pc=pc;
}
public void pollPc(){
this.pc=null;
}
public void call(String telid){
if(pc==null){
System.out.println("手机没有电话卡,请安装电话卡");
}else{
pc.call(telid);
}
}
}
你的任务如下:
(1)完成移动网络的电话卡MobileCard的设计;
(2)完成使用苹果手机AppleIphone12进行打电话的模拟演示;程序名为PhoneTestDemo,模拟演示的主要内容如下:
a)购买一个苹果AppleIphone12手机实例;
b)使用手机打号码为”15044556666“的电话;
c)购买一个你设计的移动电话卡实例,并安装到手机上;
d)使用手机打号码为”15044556666“的电话;
(3)写出模拟演示的运行结果。

请输入答案:

参考答案:
(1)(40%)
class MobileCard extends PhoneCard {
public void call(String telid) {
System.out.println("正在使用移动网络拨打"+telid+"电话");
}
}
(2)(40%)模拟代码主程序如下:
public class PhoneTestDemo{
public static void main(String[] args) {
AppleIphone12 phone=new AppleIphone12();
phone.call("15044556666");
phone.setPc(new MobileCard());
phone.call("15044556666");
}
}
(3)(20%)模拟运行的结果如下:
手机没有电话卡,请安装电话卡
正在使用移动网络拨打15044556666电话

10 、(9分)怀化学院在线考试系统需要提供学生的基本信息,在基本信息中包含学生的照片信息,在上传学生的基本信息(学号、姓名、性别、入学年份、班级)后,再上传学生的照片,上传学生照片的文件规定为文件名要符合"学号+姓名"的规则,如0906403048张三.jpg,而教务办提供的学生照片命名为”学号.jpg“文件,所有照片在文件夹"studentpicture21"中,学生基本信息在一个文本文件中,文件名为students21.txt文件,文件内容格式如下(学生全部信息在该文件,下面仅提供样例):
学号,班级代码,姓名,性别,入学时间
1800120438,2106406,刘小晴,男,2018
2100130601,2106406,李金媛,女,2021
2100130602,2106406,罗兰,女,2021
给你的问题是,根据提供的照片(在文件夹studentpicture21)和学生信息文件students21.txt,解决上传学生照片的文件要求,即照片的文件名必须是“学号+姓名.jpg”,请你根据学习的Java程序设计知识,编写一个简单的程序完成该实际问题。要求给出如下回答:
(1)写出你的解决问题的思路;
(2)写出实现的代码。

    答:(1)(30%分)解决问题的思路为:通过读学生信息文件提取学生的学号和姓名,然后创建一个File文件对象对应到照片文件夹中以学号命名的照片文件,判定文件是否存在,如果文件存在,将给文件更名为“学号+姓名.jpg”文件。
    

(2)(70%分)程序实现代码如下:

import java.io.*;

public class ImputImage {

     public static void main(String[] args) {
    
             String namefile="students21.txt"; 
    
             String picdir="studentpicture21";
    
             try {
    
                     BufferedReader bin=new BufferedReader(new InputStreamReader(new BufferedInputStream(new FileInputStream(namefile))));
    
                     while(bin.ready()) {
    
                             String line=bin.readLine();
    
                             String[] items=line.split(",");       
    
                             File f=new File(picdir,items[0]+".jpg");      
    
                             if(f.exists()) {
    
                                     String newname=items[0]+items[2]+".jpg";
    
                                     System.out.println(f.renameTo(new File(picdir,newname)));
    
                             }
   


                            }
    
             } catch (FileNotFoundException e) {
    
                     e.printStackTrace();
    
             } catch (IOException e) {
    
                     e.printStackTrace();
    
             }
    
     }
    

}

11 、(8分)在Java图形界面应用程序开发中,在窗体中定义了一个组件JButton,定义为JButton jb1=new JButton("效果测试");当用户点击该按钮时,需要在控制台标准输出该按钮的名称,请你根据要求完成下列问题:
(1)设计一个满足要求的该按钮的监听器组件;
(2)写出将该监听器安装到该组件的代码。

答:(1)(70%分)监听器为:
public class MyActionListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
JButton jb=(JButton)e.getSource();
System.out.println(jb.getText());
}
}

(2)(30%分)安装监听器的代码为:

jb1.addActionListener(new MyActionListener());

12 、(5分)

设计一个Shape接口和他的实现类正方形Square,要求如下:
(1)设计接口Shape,要求定义一个方法area(),方法无参数,返回一个double类型的结果,该结果表示图形的面积。
(2)设计Square,要求实现Shape接口,分别求正方形面积,设计该类型的成员变量和给成员变量赋值的构造方法。
(3)设计测试类,完成创建Square对象,计算边长为2的正方形面积。

请输入答案:

参考答案:

(1)(20%分)接口Shape设计如下:
public interface Shape {
public double area();
}
(2)(60%分)实现类型设计如下:
public class Square implements Shape{
double edge;
public Square(double edge){
this.edge=edge;
}
public double area(){
return edge*edge;
}
}
(3(20%分))测试类设计如下:
public class Test{
public static void main(String[] args){
Square square=new Square(2);
System.out.println("边长为2的正方形面积为:"+square.area());
}
}

13 、(5分)
在定义变量类型的基础上赋值,分析以下执行语句可能产生的异常:

    int a,b,n,m;      
     String s=null;
     int[] arr=null;
    
     a=a/b;
     arr=new int[n];
     a= arr[m];
     b=Integer.parseInt(s );

  请上机调试,写出可能产生的异常对象类型,并说明每种异常产生的条件?

请输入答案:

参考答案:

回答出以下6种中的5种异常和产生的条件就可以了。

ArrayIndexOutOfBoundsException、ArithmeticException、NegativeArraySizeException、OutOfMemoryError、NullPointerException和NumberFormatException

14 、(8分) 下列程序实现从当前目录的date.ser文件中读取文件内容并显示到控制台.请将程序补充完整.
import java.io.*;
import java.util.Date;
public class UnSerializeDate {
public UnSerializeDate() {
Date d=null;
try {
FileInputStream f=new _(1)(“date.ser”);
ObjectInputStream s=new ObjectInputStream(
_(2)_____);
d=(Date) s.readObject();
f.close();
}
catch(Exception e) {
e.printStackTrace();
}
System.out.println(“Unserialized Date object from date.set”);
System.out.println(“Date:”+d);
}
public static void main(String args[]) {
(3) UnSerializeDate();
}
}

请输入答案:

(1)FileInputStream

(2)f

(3)new

标签: java

本文转载自: https://blog.csdn.net/qq_46373141/article/details/124881326
版权归原作者 呆萌小甜心喜欢小白兔 所有, 如有侵权,请联系我们删除。

“第一大题、分析(共14小题,满分100分)”的评论:

还没有评论