江苏海洋大学Java期末考试解析

众所周知,学校的Java课老师向来不放期末复习资料,只给一个笼统的大范围,人很多期望速成的铁铁苦不堪言,为此,转载一篇学校的大佬写的回忆版期末真题,对于求及格选手很有帮助!!!

第一篇

题目一 改错题
提供一个错误的程序给你,需要进行改错。
由于错误版本我也找不到了,这里就直接放正确代码:
这里已经将改错的点附上了基本上满足题意的,详情请看代码。
提几个注意点吧,首先使用的extends Thread,当然main方法要使用staic,睡眠异常也需要注意。

import java.awt.*;
import javax.swing.*;
import java.io.*;//为IOException导入包

public class MainClass extends JFrame // 继承需要extends,拼写错误
{
    MyThread t1 = new MyThread(this);// 需要构造方法,使用类
    int i = 1;

    public MainClass() {
        setTitle("动态图形");// setTitle拼写错误
        setSize(400, 400);
        setVisible(true);
        t1.run();// 拼写错误
    }

    // Graphics拼写错误
    public void paint(Graphics g) {
        // super.paint(g);//调用父类的方法
        g.setColor(Color.red);
        if (i < 20)
            g.fillOval(10 * i, 100, 10, 10);
        else if (i >= 20 && i < 30)
            g.fillOval(200, 100 + 10 * (i - 20), 10, 10);
        else
            g.fillOval(10 * i - 100, 200, 10, 10);
    }

    // main方法少了static
    public static void main(String args[]) {
        new MainClass();
    }
}

// Thread使用的是extends他不是接口
class MyThread extends Thread {
    MainClass a;

    MyThread(MainClass b) {
        a = b;
    }

    // run方法需要返回类型是void
    public void run() {
        while (true) {
            a.repaint();
            a.i++;

            try {
                sleep(500);
            }
            // 睡眠需要有打断异常
            catch (InterruptedException e) {
            }
        }
    }
}


题目二 随机数
题目大意:请写出一个如下程序,班级名称需要自己输入,班级人数也是自己输入的。在周一到周五使用随机数不重复地按照此式排序,只要满足题意即可。

这个题目我一开始是第一个做的,是比较懵逼的,对于后面的不重复一时间无从下手,后来经过思考想到了去重办法,不过考试的时候没有很好地处理好,还是有些疏忽,不过总体框架是对的,下面将附上2种代码,一个是使用set去重,一个是用数组进行判断存在后添加到数组中。
set去重版本:

import java.util.*;

public class OOProgram2_2020122128 {
    public static void main(String[] args) {
        System.out.print("请输入班级名称:");
        Scanner sys = new Scanner(System.in);
        String str = sys.nextLine();
        System.out.println();
        System.out.print("请输入班级人数:");
        Scanner in = new Scanner(System.in);
        int num = in.nextInt();
        System.out.println();
        System.out.println("该班每天抽到以下同学参加核酸检测");
        System.out.println();
        System.out.println("周一\t周二\t周三\t周四\t周五");
        System.out.println();

        int count = 0;

        // 使用set进行去重操作
        Set<Integer> set = new LinkedHashSet<Integer>();
        Random r = new Random();
        while (set.size() < num) {
            int i = r.nextInt(num) + 1;
            set.add(i);
        }
        Iterator<Integer> it = set.iterator();
        while (it.hasNext()) {
            int i = it.next();
            System.out.print(i + "  \t");
            count++;
            if (count % 5 == 0) {
                System.out.println();
            }
        }
    }
}


数组去重版本关键代码,只要从上面的程序中从set开始的set到输出全部替换这个就可,因为考虑到不太有人会用set故放了此数组版本。

// 使用数组进行去重
        int[] a = new int[num + 1];
        ArrayList<Integer> b = new ArrayList<Integer>();
        Random r = new Random();
        for (int i = 0; i < num; i++) {
            a[i] = 0;
        }
        while (b.size() < num) {
            int x = r.nextInt(num) + 1;
            a[x]++;
            if (a[x] == 1) {
                b.add(x);
            }
        }

        for (int i = 0; i < b.size(); i++) {
            System.out.print(b.get(i) + " \t");
            count++;
            if (count % 5 == 0) {
                System.out.println();
            }
        }


题目三 面向对象
这个题目看似简单还是有一些坑的,首先这是UML图,对于protected、public、private是有专门的符号的
-号代表权限为private,没有符号代表权限为default,#号代表权限为protected。所以题目给的属性基本就是protected,那么如果调用属性就得自己设置get方法了。
其次是父类使用抽象类,子类需要重载。需要完成的结果图如下:
这个题基本送分了。

public class OOProgram3_2020122128 {
    public static void main(String[] args) {
        HUAWEIMobilePhone hwAWEIMobilePhone = new HUAWEIMobilePhone("HUAWEI", "P50 Pro", "2022年3月1日", 7288);
        System.out.println("手机信息如下:");
        System.out.println("品牌:" + hwAWEIMobilePhone.getbrand() + "  型号:" + hwAWEIMobilePhone.getModel() + "  发布时间:"
                + hwAWEIMobilePhone.getRelease() + "  单价:" + hwAWEIMobilePhone.getPrice());
        hwAWEIMobilePhone.aboutOS();
        System.out.println();
    }
}

abstract class MobliePhone {
    protected String brand;
    protected String releaseData;
    protected int price;

    public MobliePhone(String name, String releaseData, int price) {
        super();
        this.brand = name;
        this.releaseData = releaseData;
        this.price = price;
    }

    abstract void aboutOS();
}

class HUAWEIMobilePhone extends MobliePhone {
    protected String brand;
    protected String releaseData;
    protected int price;
    private String model;

    public HUAWEIMobilePhone(String brand, String model, String releaseData, int price) {
        super(brand, releaseData, price);
        this.brand = brand;
        this.model = model;
        this.releaseData = releaseData;
        this.price = price;
    }

    void aboutOS() {
        System.out.println("华为【微澜浩海】手机搭载了自主研发的鸿蒙HarmonyOS 2操作系统");
    }

    String getbrand() {
        return brand;
    }

    String getRelease() {
        return releaseData;
    }

    int getPrice() {
        return price;
    }

    String getModel() {
        return model;
    }
}


题目四 GUI
完成如下的界面图,选择求平方的时候计算,选择求立方的时候计算

思路:设置接口比较方便,如果自己重新定义一个监听class可能存在麻烦,因为需要getText();
注意点:首先对按钮进行监听,然后点击按钮以后对radio进行监听,(这个顺序应该没什么讲究,如果讲究的话,只要把两个if顺序换一下就可以了)

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

public class OOProgram4_2020122128 {
    public static void main(String[] args) {
        new GUI();
    }
}

class GUI extends JFrame implements ActionListener {
    JLabel jl = new JLabel("请输入一个整数");
    JRadioButton jr1 = new JRadioButton("求平方");
    JRadioButton jr2 = new JRadioButton("求立方");
    JTextField jt = new JTextField(20);
    JButton jb = new JButton("计算");
    JPanel jp = new JPanel();

    public GUI() {
        jp.add(jl);
        jp.add(jt);
        jp.add(jr1);
        jp.add(jr2);
        jp.add(jb);
        jb.addActionListener(this);
        add(jp);

        setVisible(true);
        setSize(350, 150);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public void actionPerformed(ActionEvent e) {
        int x = Integer.parseInt(jt.getText());

        if ("计算".equals(e.getActionCommand())) {
            if (jr1.isSelected()) {
                JOptionPane.showMessageDialog(null, "该数的平方是" + x * x, "计算结果", JOptionPane.INFORMATION_MESSAGE);
            }
            if (jr2.isSelected()) {
                JOptionPane.showMessageDialog(null, "该数的平方是" + x * x * x, "计算结果", JOptionPane.INFORMATION_MESSAGE);
            }
        }
    }
}


题目五 文件操作
使用字符流在文本(dest.txt)输入”庆祝共青团成立100周年——青春心向党,建功新时代!“。然后使用合适的流将其打印,效果图如下:

考试的时候不巧的是我出现了乱码,比较糟糕,也没有什么时间检查了,其实后来发现就是编码读取的问题,应该使用FileReader读比较好,可惜我用的是流,难受了。。。注释代码就是我考场代码了

import java.io.*;

public class OOProgram5_2020122128 {
    public static void main(String[] args) {
        try {
            FileOutputStream rfFileOutputStream = new FileOutputStream("dest.txt");
            CharArrayWriter caw = new CharArrayWriter();
            caw.write("庆祝共青团成立100周年——青春心向党,建功新时代!");
            char c[] = caw.toCharArray();
            String s = "";
            for (int i = 0; i < c.length; i++) {
                s += c[i];
            }
            byte[] b = new byte[256];
            b = s.getBytes();
            rfFileOutputStream.write(b);
            rfFileOutputStream.close();

            // File f = new File("dest.txt");
            // InputStream in = null;
            // in = new FileInputStream(f);
            // int cn = 0;
            // while ((cn = in.read()) != -1) {
            // System.out.print((char) cn);
            // }
            // in.close();
            FileReader rm = new FileReader("dest.txt");
            // char[] cm = new char[256];
            int n = 0;
            while ((n = rm.read()) != -1) {
                System.out.print((char) n);
            }
            rm.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

第二篇

第一题
    程序改错题,具体代码没有,毕竟是机考的,简单描述一下就是多线程+GUI中的Graphics类绘图,加上类名要更改的格式大概是14个左右,反正能运行达到考试的界面要求就OK了,主要错误还是蛮简单的,期末主要考察线程创建的俩种方式,大家要记住,1:继承自Thread类,2:实现Runnable接口,考试好像是用的实现接口的方式定义的,当时那个错误应该是用implements关键字,而不是用extends,其余的错误像重写的run方法,start()方法写成run()方法,public的l写成了1,super关键字大写,构造方法的传参对象错误之类的,还有就是文件名改了,自己的本类类名也要改,包括像构造方法。

第二题
    第二题是一共九个数,让你去先输出原数组,按照格式[a1,a2,a3,a4,a5]这样的格式去输出,然后再排序(从小到大),然后再求中位数,但是考试的时候那个题目指定了元素的个数(9个),数组长度就是9,当时想了一下应该是跟长度的一半有关,但是因为上一个步骤调冒泡排序稍微没控制时间,所以耍了一点小聪明,我直接输出的第五个数字,哈哈哈哈哈哈哈,说实话时间还是挺紧的,主要是这道题我觉得可能是老师为了方便改卷所以就指定了长度和具体数字,严格来说应该是要去写一个寻找中位数的一个小判断(长度为奇,偶时的不同情况)下面附上源码。

import java.util.Arrays;
 
public class Demo1 {
    public static void main(String[] args) {
        //题目所给的是九个double类型的数据
        //具体的数据不记得了,这里我就用几个数据代替一下,反正就是那个意思
        double []a={5.2,3.5,6.2,1.2,2.5,6.9,9.8,10.2,2.1};
        //先按照指定的格式输出原数组
        int count=0;
        System.out.print("原数组为:");
 
        System.out.print("[");
 
        for(int i=0;i<8;i++)
        {
            System.out.print(a[i]+",");
            count++;
            if(count==8)
            {
                System.out.print(a[count]+"]");
            }
        }
        System.out.println();
        System.out.print("排序后的数组为:");
        System.out.print("[");
 
        Arrays.sort(a);   //这里如果考试不会手写冒泡就用Arrays中的sort方法,但是别忘记导包是util下的
                         //默认排序是从小到大的
        int count1=0;
       for(int i=0;i<8;i++)
       {
           System.out.print(a[i]+",");
           count1++;
           if(count1==8)
           {
               System.out.print(a[count1]+"]");

完整版找我要吧,不方便继续写了,私信我。

java 习题集包括有答案 引 言 6 第一章 JAVA基础 7 一、填空题 7 二、判断题 9 三、选择题 9 四、程序阅读题 26 第二章 控制结构 32 一、选择题 32 二、填空题 48 三、判断题 50 四、程序阅读题 51 五、编程题 55 第三章 字符串 59 一、选择题 59 二、填空题 63 三、判断题 64 四、编程题 65 第四章 数组 66 一、选择题 66 二、判断题 69 三、填空题 70 四、编程题 71 第五章 类和对象 73 一、选择题 73 二、填空题 79 三、程序填空 80 四、问答题 93 五、判断题 94 六、编程题 94 第六章 面向对象程序设计 97 一、选择题 97 二、填空题 118 三、判断题 120 四、编程题 123 第七章 数据库的连接 129 一、选择题 129 二、填空题 131 三、判断题 131 四、编程题 131 第八章 多线程 133 一、填空题 133 二、选择题 134 三、多项选择 147 四、判断题 147 五、程序分析题 148 六、程序设计题 149 第九章 异常处理 151 一、选择题 151 二、填空题 155 三、判断题 157 四、程序阅读题 158 五、程序题 163 第十章 文件操作 165 一、选择题 165 二、填空题 170 三、判断题 174 四、读程序题 177 五、问答题 182 六、编程题 183 第十一章GUI界面设计 185 一、选择题 185 二、填空题 194 三、判断题 196 四、程序填空 197 五、简答题 214 六、编程题 214 参考答案 230 第一章 java基础 230 一、填空题 230 二、判断题 232 三、选择题 232 四、程序阅读题 232 第二章 控制结构 233 一、选择题 233 二、填空题 233 三、判断题 235 四、程序阅读题 235 五、编程题 236 第三章 字符串 255 一、选择题 255 二、填空题 255 三、判断题 255 四、编程题 255 第四章 数组 265 一、选择题 265 二、判断题 265 三、填空题 266 四、编程题 266 第五章 类和对象 269 一、选择题 269 二、填空题 270 三、程序填空 271 五、判断题 274 六、编程题 274 第六章 面向对象程序设计 293 一、选择题 293 二、填空题 294 三、判断题 295 四、编程题 296 第七章 数据库的连接 352 一、选择题 352 二、填空题 352 三、判断题 353 四、编程题 353 第八章 多线程 356 一、填空题 356 二、选择题 357 三、多项选择 357 四、判断题 357 五、程序分析题 357 六、程序设计题 357 第九章 异常处理 391 一、选择题 391 二、填空题 391 三、判断题 392 四、程序阅读题 392 五、程序题 393 第十章 文件操作 396 一、选择题 396 二、填空题 397 三、判断题 398 四、读程序题 398 五、问答题 399 六、编程题 401 第十一章 GUI界面设计 417 一、选择题 417 二、填空题 417 三、判断题 419 四、程序填空 419 五、简答题 420 六、编程题 422
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值