java实验二正式报告

Posted _DiMinisH

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java实验二正式报告相关的知识,希望对你有一定的参考价值。

实验二 面向对象(一)(实验报告)

姓名: XXX          班级: XXX          学号: XXX

一、实验目的

  在集成开发环境下,运用Java语言的面向对象的特性来实现类的封装、构造方法的定义以及对象的实例化和对象方法的调用。

二、实验目标

  1. 能够根据需要解决的实际问题,利用Java语言实现类的定义;
  2. 能够熟练运用构造方法来实例化对象以及调用对象的方法。

三、实验内容

3.1 实验环境

IntelliJ IDEA Ultimate Edition 2021.2 x64. + openjdk-17.0.1.

3.2 具体实验内容

问题一
  • 定义一个计算机类,要求该类中至少包含3个私有的属性(为每个属性定义设置和获取方法),该类中至少包含两个构造方法(一个无参,一个有参),以及包含2-4个方法来描述计算机对象的行为(其中一个方法要能打印输出计算机对象的所有属性值)。

问题分析:定义类用class关键字,一个计算机的属性有很多,列举几个即可,使用alt + insert可以快速为每个属性增加设置和获取方法

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.SQLOutput;
import java.util.Scanner;

public class QuestionOne 
    public static void main(String[] args) throws IOException 
        Computer computer =
                new Computer("DESKTOP-HJCF1OD",
                        "Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz   2.59 GHz",
                        "32.0 GB (31.9 GB usable)",
                        "C659EABC-1D0D-4F6A-9958-E300C6E81453",
                        "00330-80000-00000-AA007",
                        "64-bit operating system, x64-based processor");
        computer.showParameter();
        computer.computer();
        computer.openSoftWare();
    


class Computer 
    private String deviceName;
    private String processor;
    private String installedRAM;
    private String deviceID;
    private String productId;
    private String systemType;

    public Computer(String deviceName, String processor, String installedRAM, String deviceID, String productId, String systemType) 
        this.deviceName = deviceName;
        this.processor = processor;
        this.installedRAM = installedRAM;
        this.deviceID = deviceID;
        this.productId = productId;
        this.systemType = systemType;
    

    public String getProductId() 
        return productId;
    

    public void setProductId(String productId) 
        this.productId = productId;
    

    public Computer()  

    public String getDeviceName() 
        return deviceName;
    

    public void setDeviceName(String deviceName) 
        this.deviceName = deviceName;
    

    public String getProcessor() 
        return processor;
    

    public void setProcessor(String processor) 
        this.processor = processor;
    

    public String getInstalledRAM() 
        return installedRAM;
    

    public void setInstalledRAM(String installedRAM) 
        this.installedRAM = installedRAM;
    

    public String getDeviceID() 
        return deviceID;
    

    public void setDeviceID(String deviceID) 
        this.deviceID = deviceID;
    

    public String getSystemType() 
        return systemType;
    

    public void setSystemType(String systemType) 
        this.systemType = systemType;
    

    @Override
    public String toString() 
        return "deviceName='" + deviceName + '\\n' +
                "processor='" + processor + '\\n' +
                "installedRAM='" + installedRAM + '\\n' +
                "deviceID='" + deviceID + '\\n' +
                "productId='" + productId + '\\n' +
                "systemType='" + systemType + '\\n';
    

    public void showParameter() 
        System.out.println(this.toString());
    

    public void openSoftWare() throws IOException 
        System.out.println("请输入要打开的软件(路径):");
        Scanner scanner = new Scanner(System.in);
        String cmd = scanner.next();
        Process process = Runtime.getRuntime().exec(cmd);
    

    public void computer() 
        double a = 0, b = 0;
        System.out.println("请输入两个数(空格分隔):");
        Scanner scanner = new Scanner(System.in);
        a = scanner.nextDouble();
        b = scanner.nextDouble();
        System.out.println("请选择操作符:");
        String operation = scanner.next();
        switch (operation) 
            case "+" -> System.out.println(a + b);
            case "-" -> System.out.println(a - b);
            case "*" -> System.out.println(a * b);
            case "/" -> 
                if (b == 0) 
                    System.out.println("除数为0");
                    break;
                
                System.out.println(a / b);
            
            default -> System.out.println("计算机没有该功能");
        
    

  • 实验结果

deviceName='DESKTOP-HJCF1OD
processor='Intel® Core™ i7-9750H CPU @ 2.60GHz 2.59 GHz
installedRAM='32.0 GB (31.9 GB usable)
deviceID='C659EABC-1D0D-4F6A-9958-E300C6E81453
productId='00330-80000-00000-AA007
systemType='64-bit operating system, x64-based processor

请输入两个数(空格分隔):
2 6
请选择操作符:
+
8.0
请输入要打开的软件(路径):
notepad

问题二
  • 定义一个类,该类中包含以下几个方法(静态):
    1.实现字符串数组的逆序,输出结果为字符串数组;
    2.求两个整形数组的交集;
    3.求两个浮点型数组的并集;

问题分析:
1.逆序的方式有很多,我使用开辟一个新空间,把原来的字符串反着拷贝到新的空间里

public static String[] stringDecSort (String[] a) 
        String[] c = new String[a.length];
        for (int i = a.length - 1, j = 0; i >= 0; i--, j++)
            c[i] = a[j];
        return c;

问题分析:
2.两个集合的交集是两个集合共有的元素,使用双重循环,从第一个数组取一个元素,依次与第二个数组的每个元素比较,如果一样就插入到新的数组里,不一样就什么都不错,当第一个数组遍历完了,新得到的数组就是交集的数组

public static int[] intersection (int[] a, int[] b) 
        ArrayList<Integer> arrayList = new ArrayList<>();
        for (int j : b)
            for (int k : a)
                if (j == k)
                    arrayList.add(j);
        int[] c = new int[arrayList.size()];
        for (int i = 0; i < arrayList.size(); i++)
            c[i] = arrayList.get(i);
        return c;

问题分析:
3.求并集的方法是先把一个数组放到新的数组里,然后依次取第二个数组的元素跟新的数组里的元素比较,如果相同就不插入,不相同就插入

public static double[] unionSet (double[] a, double[] b) 
        ArrayList<Double> arrayList = new ArrayList<>();
        for (var i : a)
            arrayList.add(i);
        for (var j : b) 
            boolean isTheSame = false;
            for (Double aDouble : arrayList) 
                if (j == aDouble) 
                    isTheSame = true;
                    break;
                
            
            if (!isTheSame) arrayList.add(new Double(j));
        
        double[] c = new double[arrayList.size()];
        for (int i = 0; i < arrayList.size(); i++)
            c[i] = arrayList.get(i);
        return c;

整个的代码


import java.io.IOException;
import java.sql.SQLOutput;
import java.util.*;

public class QuestionTwo 
    public static void main(String[] args) 
        String[] a = "zz", "ac", "os", "ii";
        System.out.println(Arrays.toString(Operation.stringDecSort(a)));


        int[] arr1 = 1,2,3,4,5,6;
        int[] arr2 = 2,3,4;
        System.out.println(Arrays.toString(Operation.intersection(arr1, arr2)));

        double[] arr3 = 1,2,3,4,5,6;
        double[] arr4 = 2,3,4,10;
        System.out.println(Arrays.toString(Operation.unionSet(arr3, arr4)));

    


class Operation 
    public static String[] stringDecSort (String[] a) 
        String[] c = new String[a.length];
        for (int i = a.length - 1, j = 0; i >= 0; i--, j++)
            c[i] = a[j];
        return c;
    

    public static int[] intersection (int[] a, int[] b) 
        ArrayList<Integer> arrayList = new ArrayList<>();
        for (int j : b)
            for (int k : a)
                if (j == k)
                    arrayList.add(j);
        int[] c = new int[arrayList.size()];
        for (int i = 0; i < arrayList.size(); i++)
            c[i] = arrayList.get(i);
        return c;
    

    public static double[] unionSet (double[] a, double[] b) 
        ArrayList<Double> arrayList = new ArrayList<>();
        for (var i : a)
            arrayList.add(i);
        for (var j : b) 
            boolean isTheSame = false;
            for (Double aDouble : arrayList) 
                if (j == aDouble) 
                    isTheSame = true;
                    break;
                
            
            if (!isTheSame) arrayList.add(new Double(j));
        
        double[] c = new double[arrayList.size()];
        for (int i = 0; i < arrayList.size(); i++)
            c[i] = arrayList.get(i);
        return c;
    

  • 实验结果

[ii, os, ac, zz]
[2, 3, 4]
[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 10.0]

  • 错误分析

使用foreach循环语句不能将零时元素进行修改

问题三
  • 定义一个表示学生信息的类Student,要求如下:
属性名含义
sNO表示学号
sName表示姓名
sSex表示性别
sJava表示Java课程成绩

1.类Student带参数的构造方法:
在构造方法中通过形参完成对成员变量的赋值操作。

2.类Student的方法成员:

成员函数名含义
getNo()获得姓名
getSex()获得性别
getAge()获得年龄
getJava()获得Java 课程成绩

根据类Student的定义,创建五个该类的对象,输出每个学生的信息,计算并输出这五个学生Java语言成绩的平均值,以及计算并输出他们Java语言成绩的最大值和最小值。

import java.util.Arrays;

public class QuestionThree 
    public static void main(String[] args) 
        var s = new Student[]
                new Student("01", "a", "男", 19, 98.5),
                new Student("02", "b", "女", 19, 68.5),
                new Student("03", "b", "男", 21, 90),
                new Student("04", "d", "男", 20, 100),
                new Student("05", "e", "女", 20, 60)
        ;
        double java = 0, min = s[0].sJava(), max = 0;
        for (var i : s) 
            java += i.sJava();
            if (min > i.sJava())
                min = i.sJava();
            if (max < i.sJava())
                max = i.sJava();
        
        java /= s.length;
        System.out.println(Arrays.toString(s))以上是关于java实验二正式报告的主要内容,如果未能解决你的问题,请参考以下文章

java实验四正式报告

java实验五正式报告

20175209 实验二《Java面向对象程序设计》实验报告

20165229实验二 《Java面向对象程序设计》实验报告

2018-2019-2 20175308实验二《面向对象程序设计》实验报告

2018-2019-2 20175211 实验二《Java面向对象程序设计》实验报告