Java面向对象基础练习题(含答案超详细)

第1题

案例:

声明一个日期类MyDate,包含属性:年、月、日

声明一个Test02测试类,并在main方法中,创建3个日期对象,一个是你的出生日期,一个是随机定义的日期,一个是今年过年的日期,并打印显示

系统预定义的日期类型。jdk1.8+提供了2套日期类型

java.util.Date

public class Date implements java.io.Serializable,Cloneable,
Comparable<Date>{
    private transient long fastTime;  //具体的日期是采用从1970-1-1 0:0:0 到指定日期的毫秒值进行存储。  年-1900  月-1
}

自定义类

public class MyDate{  //默认继承于java.lang.Object类,不需要import语句导入。
    int year;   //成员属性  范围限定词默认为package,只是同包可见
    int month;
    int date;
    public void setYear(int year){  //方法名称命名的规则为小写字母开头,大写字母分词
        this.year = year;  
    }
    public String toString(){
        return year + "年" + month + "月" + date + "日";
    }
}

测试类

public class Test02{
    public static void main(String[] args){
        MyDate d1 = new MyDate();
        d1.year = 1972;
        d1.month = 4;
        d1.date = 30;
        System.out.println(d1.toString());
    }
}

第2题

案例:

声明公民类Citizen,包含属性:姓名,生日,身份证号,其中姓名是String类型,生日是MyDate类型,身份证号也是String类型。

声明Test03测试类,在main方法中创建你们家庭成员的几个对象,并打印信息。

public class Citizen{
    protected String name;
    public MyDate birth;
    private String ID;
​    
    //私有属性添加get/set方法访问
    public String getID() {
        return ID;
    }
​
    public void setID(String iD) {
        ID = iD;
    }
​
    public String toString() {
        return "家庭成员 " + "姓名:" + name + " 出生日期:" + birth + " 身份证号:" + this.ID;
    }
}

测试类

public class Test03 {
    public static void main(String[] args) {
        Citizen citizen  = new Citizen();
        citizen.name = "张三";
        MyDate mydate = new MyDate();
        mydate .setYear(2021);
        mydate .setMonth(03);
        mydate .setDate(06);
        citizen.birth = d1;
        citizen.setID("123456789");
        System.out.println(citizen.toString());
    }
​
}

第3题

案例:

声明一个日期类MyDate,包含属性:年、月、日,并在MyDate类中声明几个方法:

1、boolean isLeapYear():判断当前日期的是闰年吗?

2、void set(int y, int m, int d):修改年,月,日为新日期

3、void puls(int years, int months, int days):加上years年,months月,days天后的日期

并在测试类Test04的main方法中创建对象,并调用测试

public class MyDate{
    private int year;
    private int month;
    private int date;
    
    //判断当前日期是否是闰年
    public boolean isLeapYear(){
        if(year % 4 == 0 && year / 100 !=0)
            return ture;
        else if(year % 400 == 0)
            return true;
        else
            return false;
    }
    
    //修改年,月,日为新日期
    public void set(int y,int m, int d){
        year = y;
        month = m;
        date = d;  
    }
    //加上years年,months月,days天后的日期
    public void puls(int years, int months, int days){
        this.year += years;
        this.date += days;
        this.month += months;
        if (this.month > 12) {
            this.year++;
            this.month -= 12;
        }
        //这里得判断加完的月份值是否超过12,天数是否超过本月的天数
        //如果超过则月份和天数做出相应的变化
        //2月有闰年的存在  所以需要单独进行判断
        //特殊12月  如果超出则需要对年进行修稿
        while (true) {
            if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10) {
                if (date > 31) {
                    date -= 31;
                    month++;
                } else
                    break;
            } else if (month == 4 || month == 6 || month == 9 || month == 11) {
                if (date > 30) {
                    date -= 30;
                    month++;
                } else
                    break;
            } else if (month == 2) {
                //调用当前类中的方法  判断是否是闰年
                if (isLeapYear()) {
                    if (date > 28) {
                        date -= 28;
                        month++;
​
                    } else
                        break;
                } else if (date > 29) {
                    date -= 29;
                    month++;
                } else
                    break;
            } else if (month == 12) {
                if (date > 31) {
                    date -= 31;
                    month = 1;
                    year++;
                }
            }
        }
    }
}

测试类

public class Test04 {
	public static void main(String[] args) {
		MyDate date = new MyDate();
         //调用方法 修改年,月,日为新日期
		date.set(2001, 3, 6);
		System.out.println(date);
         // 判断是否为闰年
         System.out.println(date.isLeapYear());
		//加上years年,months月,days天后的日期
         date.puls(20, 9, 3);
		System.out.println(date);
	}

}

第4题

案例:

声明一个三角形类Triangle,包含属性:a,b,c,表示三条边,包含几个方法:

1、boolean isRightTriangle():判断是否是一个直角三角形

2、boolean isIsoscelesTriangle():判断是否是一个等腰三角形

3、boolean isEquilateralTriangle():判断是否是一个等边三角形

4、double getArea():根据三条边,用海伦公式求面积

5、double getLength():求周长

并在测试类Test05的main方法中调用测试

public class Triangle {
    private double a;
    private double b;
    private double c;
​
    // 判断是否为直角三角形
    public boolean isRightTriangle() {
        // 首先判断值的合法性
        if (a > 0 && b > 0 && c > 0) {
            // 判断是否构成三角形
            if (a + b > c && a + c > b && b + c > a) {
                // 判断是否为直角三角形
                if (a * a == b * b + c * c || b * b == a * a + c * c || c * c == a * a + b * b) {
                    return true;
                }
            }
        }
        return false;
    }
​
    // 判断是否为等腰三角形
    public boolean islsoscelesTriangle() {
        // 判断值的合法性
        if (a > 0 && b > 0 && c > 0) {
            // 判断是否能构成三角形
            if (a + b > c && a + c > b && b + c > a) {
                // 判断是否为等腰三角形
                if (a == b || b == c || a == c) {
                    return true;
                }
            }
        }
        return false;
​
    }
    
    //判断是否为等边三角形
    public boolean isEquilateralTriangle() {
        // 判断值的合法性
        if (a > 0 && b > 0 && c > 0) {
            // 判断是否能构成三角形
            if (a + b > c && a + c > b && b + c > a) {
                // 判断是否为等边三角形
                if (a == b && b == c) {
                    return true;
                }
            }
        }
        return false;
    }
    
    //计算三角形的周长
    public double getLength() {
        // 判断值的合法性
        if (a > 0 && b > 0 && c > 0) {
            // 判断是否能构成三角形
            if (a + b > c && a + c > b && b + c > a) {
                return (a + b + c);
            }
        }
        return -1;
    }
    
    //计算三角形的面积(利用海伦公式)
    public double getArea() {
        // 判断值的合法性
        if (a > 0 && b > 0 && c > 0) {
            // 判断是否能构成三角形
            if (a + b > c && a + c > b && b + c > a) {
                double p = (a + b + c) / 2;
                double q = (p * (p - a) * (p - b) * (p - c));
                return Math.sqrt(q);
            }
        }
        return -1;
    }
    
    //私有类外访问  添加get/set方法
    public double getA() {
        return a;
    }
​
    public void setA(double a) {
        this.a = a;
    }
​
    public double getB() {
        return b;
    }
​
    public void setB(double b) {
        this.b = b;
    }
​
    public double getC() {
        return c;
    }
​
    public void setC(double c) {
        this.c = c;
    }
​
}

测试类

public class Test05 {
    public static void main(String[] args) {
        Triangle triangle  = new Triangle();  //调用无参构造器
         // 私有属性通过set方法修改值  get方法获取
        triangle.setA(3.); 
        triangle.setB(4.);
        triangle.setC(5.);
         //通过对象名.方法名调用方法
        System.out.println("是否为等边三角形:"+triangle.isEquilateralTriangle());
        System.out.println("是否为等腰三角形:"+triangle.islsoscelesTriangle());
        System.out.println("是否为直角三角形:"+triangle.isRightTriangle());
        System.out.println("面积为:"+triangle.getArea());
        System.out.println("周长为:"+triangle.getLength());
    }
​
}

第5题

工具类的概念和static方法

定义对象的目标是为了封装数据和数据相关操作,同一个类属的对象相互堵路

public class A{
 public void pp(){}
}
/*  在测试类中
 *  正常调用方法pp: new A().pp();
 *  不能  A.pp();
 *  在类A内部可以直接调用
 */
public class A{
    public void pp() {}
    public void cc() {
        pp();   //允许方法之间相互调用
    }
}
​

工具类中只有操作,没有数据的封装,则可以定义访问为static静态的。静态方法不需要创建对象在进行调用

public class A{
    public static void pp(){}
}
/*
 * 在测试类中
 * 通过 A.pp()进行调用  也可以使用new A().pp();  但是不建议
 */

案例:

声明一个数学计算工具类MathTools,包含如下方法:

1、int add(int a, int b):求a+b

2、int subtract(int a,int b):求a-b

3、int mutiply(int a, int b):求a*b

4、int divide(int a, int b):求a/b

5、int remainder(int a, int b):求a%b

6、int max(int a, int b):求a和b中的最大值

7、int min(int a, int b):求a和b中的最小值

8、boolean equals(int a, int b):判断a和b是否相等

9、boolean isEven(int a):判断a是否是偶数

10、boolean isPrimeNumer(int a):判断a是否是素数

11、int round(double d):返回d的四舍五入后的整数值

public class MathTools {
    // 如果没有定义构造器 系统默认提供无参构造器
    // 如果自定义构造器 那么应该提供无参构造器(建议做法)
    public MathTools() {
    }
​
    // a+b
    public static int add(int a, int b) {
        int c = a + b;
        return c;
    }
​
    // a-b
    public static int subtract(int a, int b) {
        int c = a - b;
        return c;
    }
​
    // a*b
    public static int mutiply(int a, int b) {
        int c = a * b;
        return c;
    }
​
    // a%b
    public static int remainder(int a, int b) {
        int c = a % b;
        return c;
    }
​
    // a和b中的最大值
    public static int Max(int a, int b) {
        int c = Math.max(a, b);
        return c;
    }
​
    // a和b中的最小值
    public static int Min(int a, int b) {
        int c = Math.min(a, b);
        return c;
    }
​
    // 判断a和b是否相等
    public static boolean equals(int a, int b) {
        if (a == b) {
            return true;
        }
        return false;
    }
​
    // 判断a是否是偶数
    public static boolean isEven(int a) {
        if (a % 2 == 0) {
            return true;
        }
        return false;
    }
​
    // 返回四舍五入后的整数值
    public static int round(double a) {
        // 传入的参数为double类型 所以需要进行窄化操作
        int c = (int) Math.round(a);
        return c;
    }
​
    // a/b
    public static int Divide(int a, int b) {
        int c = a / b;
        return c;
    }
​
    // 判断a是否是素数
    public boolean isPrimeNumber(int a) {
        int count = 0;
        for (int i = 2; i < a; i++) {
            if (a % i == 0) {
                count++;
                break;
            }
        }
        if (count == 0)
            return true;
        else
            return false;
    }
}
 

声明一个Test06测试类,并在main方法中调用测试

public class Test06 {
    public static void main(String[] args) {
        new MathTools();
        // 调用方法 判断是否为素数
        boolean res = MathTools.isPrimeNumber(13);
        System.out.println(res);
        // 两数和
        int sum = MathTools.add(2, 3);
        System.out.println(sum);
        // 四舍五入
        int digital = MathTools.round(18.2);
        System.out.println(digital);
    }
}

第6题

案例:练习排序算法和折半查找法以及System.arrayCopy方法

声明一个数组管理工具类MyArrays,包含如下方法:

1、void sort(int[] arr):可以为任意一维整型数组arr实现从小到大排序

2、int indexOf(int[] arr, int value):可以在任意一维整型数组arr中查找value值的下标,如果不存在返回-1

3、int[] copy(int[] arr, int len):可以实现从任意一维数组arr中复制一个新数组返回,新数组的长度为len,从arr[0]开始复制

import java.util.Arrays;
​
public class MyArrays {
    // 定义方法 利用冒泡排序对数组进行排序(自然排序)
    public static void sort(int[] arr) {
        for (int i = 1; i < arr.length; i++) {
            for (int k = 0; k < arr.length - i; k++) {
                if (arr[k] > arr[k + 1]) {
                    int temp = arr[k + 1];
                    arr[k + 1] = arr[k];
                    arr[k] = temp;
                }
            }
        }
    }
​
    // 在任意一维整型数组arr中查找value值的下标,如果不存在返回-1
    public static int indexOf(int[] arr, int value) {
        sort(arr); // 折半查找的前提是有序的  所以调用冒泡排序对数组进行排序
        return binarySearch(arr, value, 0, arr.length - 1);//利用折半查找的方法寻找value值的下标
    }
​
    // 折半查找
    public static int binarySearch(int[] arr, int target, int begin, int end) {
        if (begin > end)
            return -1;
        int mid = (begin + end) / 2;
        if (arr[mid] < target) {
            begin = mid + 1;
        } else if (arr[mid] > target) {
            end = mid - 1;
        } else
            return mid;
        return binarySearch(arr, target, begin, end); // 调用自身
    }
​
    // 实现从任意一维数组arr中复制一个新数组返回,新数组的长度为len,从arr[0]开始复制
    public static int[] copy(int[] arr, int len) {
        int[] res = new int[len];
        int newLen = Math.min(len, arr.length);
        System.arraycopy(arr, 0, res, 0, newLen);
        return res;
    }
​
    // 输出数组
    public static void showArray(int[] arr) {
        System.out.println(Arrays.toString(arr));
    }
}

声明一个Test07测试类,并在main方法中调用测试

import java.util.Arrays;
import java.util.Random;
​
public class Test07 {
​
    public static void main(String[] args) {
        Random random = new Random();
        // 生成[10,20)以内的随机数(int类型)
        int[] arr = new int[random.nextInt(10) + 10];
        // 生成随机数组
        for (int i = 0; i < arr.length; i++) {
            arr[i] = (int) (Math.random() * 100);
        }
        new MyArrays();
        // 调用静态方法 冒泡排序
        MyArrays.sort(arr);
        // 调用方法输出数组
        MyArrays.showArray(arr);
        int[] arr1 = new int[] { 6, 2, 1, 3, 8, 4, 56, 7, 9 };
        // 调用方法 寻找value=56的下标
        int temp = MyArrays.indexOf(arr1, 56);
        System.out.println("数组中56的下标为:" + temp);
        // 实现数组的复制
        int[] res = MyArrays.copy(arr, 10);
        System.out.println("复制后的数组为:" + Arrays.toString(res));
    }
​
}

第7题

案例:

声明一个常识工具类DateCommonsTools,包含如下方法:

1、String getWeekName(int week):根据星期值,返回对应的英语单词

2、String getMonthName(int month):根据月份值,返回对应的英语单词

3、int getTotalDaysOfMonth(int year, int month):返回某月的总天数

4、int getTotalDaysOfYear(int year):获取某年的总天数

5、boolean isLeapYear(int year):判断某年是否是闰年

public class DateCommonsTools {
//根据星期值,返回对应的英语单词
    public String getWeekName(int week) {
​
        String[] arr = new String[] { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Staurday", "Sunday" };
        if (week < 7 && week > 0)
            return arr[week];
        else
            return "输入有误!";
    }
​
//根据月份值,返回对应的英语单词
    public String getMonthName(int month) {
        String[] arr = new String[] { "January", "February", "March", "April", "May", "June", "July", "Auguet",
                "September", "October", "November", "December" };
        if (month > 0 && month < 13)
            return arr[month];
        else
            return "";
    }
​
//返回某年某月的总天数
    public int getTotalDaysOfMonth(int year, int month) {
        int res = 0;
        if (month > 0 && month < 32) {
            switch (month) {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                res = 31;
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                res = 30;
                break;
            case 2:
                if (isLeapYear(year))
                    res = 28;
                else
                    res = 29;
                break;
            default:
                System.out.println("输入有误!");
            }
        }
        return res;
    }
​
//获取某年的总天数
    public int getTotalDaysOfYear(int year) {
        if (isLeapYear(year))
            return 366;
        else
            return 356;
    }
​
//判断是否为闰年
    private static boolean isLeapYear(int year) {
        if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
            return true;
        else
            return false;
​
    }
}

声明一个Test08测试类,并在main方法中调用测试

public class Test08 {
    public static void main(String[] args) {
        new DateCommonsTools();
        String WeekName = DateCommonsTools.getWeekName(2);
        System.out.println(WeekName);
        String MonthName = DateCommonsTools.getMonthName(10);
        System.out.println(MonthName);
        int MonthNum = DateCommonsTools.getTotalDaysOfMonth(2020, 2);
        System.out.println(MonthNum);
        int YearNum = DateCommonsTools.getTotalDaysOfYear(2020);
        System.out.println(YearNum);
    }
​
}

  • 33
    点赞
  • 404
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
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
### 回答1: 以下是几个Java面向对象编程的练习题和参考答案: 1. 创建一个名为Person的类,其中包一个String类型的名字和一个int类型的年龄。实现一个方法来打印这个人的详细信息。 答案: ```java public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public void printInfo() { System.out.println("Name: " + name + ", Age: " + age); } } ``` 2. 创建一个名为Circle的类,其中包一个double类型的半径和一个静态常量PI。实现一个计算圆的周长和面积的方法。 答案: ```java public class Circle { private double radius; public static final double PI = 3.14159; public Circle(double radius) { this.radius = radius; } public double getCircumference() { return 2 * PI * radius; } public double getArea() { return PI * radius * radius; } } ``` 3. 创建一个名为BankAccount的类,其中包一个String类型的账户号码和一个double类型的余额。实现方法来存款、取款和打印余额。 答案: ```java public class BankAccount { private String accountNumber; private double balance; public BankAccount(String accountNumber, double balance) { this.accountNumber = accountNumber; this.balance = balance; } public void deposit(double amount) { balance += amount; System.out.println("Deposit successful. Current balance: " + balance); } public void withdraw(double amount) { if (balance < amount) { System.out.println("Withdrawal failed. Insufficient balance."); } else { balance -= amount; System.out.println("Withdrawal successful. Current balance: " + balance); } } public void printBalance() { System.out.println("Current balance: " + balance); } } ``` 希望这些练习题能对你有所帮助! ### 回答2: 以下是一些Java面向对象编程的练习题: 1. 创建一个名为Person的类,该类具有属性name和age。编写一个构造方法,接受name和age作为参数,并创建一个Person对象。编写一个方法,在控制台上打印出Person对象的名字和年龄。 答案如下: ```java public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public void printInfo() { System.out.println("Name: " + name); System.out.println("Age: " + age); } } public class Main { public static void main(String[] args) { Person person = new Person("John", 25); person.printInfo(); } } ``` 2. 创建一个名为Rectangle的类,具有属性width和height,还有一个计算矩形面积的方法。编写一个构造方法,接受width和height作为参数,并创建一个Rectangle对象。编写一个方法,在控制台上打印出Rectangle对象的面积。 答案如下: ```java public class Rectangle { private int width; private int height; public Rectangle(int width, int height) { this.width = width; this.height = height; } public int calculateArea() { return width * height; } } public class Main { public static void main(String[] args) { Rectangle rectangle = new Rectangle(5, 10); int area = rectangle.calculateArea(); System.out.println("Area: " + area); } } ``` 以上是两个简单的Java面向对象编程的练习题,希望能够帮助到您。请注意,答案仅供参考,实际情况可能有所不同。如有疑问,请随时提问。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值