java学习练习题

时间:2022-02-24 12:28:26

一、Java 基础

1.1 环境变量 DOS 键盘录入

1 环境变量配置
2常用DOS命令
3 键盘录入

1.2 三种结构 分支类型

1 数据类型
2 三种结构
3 分支结构 单分支(if) 多分支(switch)
4习题
java学习练习题
java学习练习题

1.3 三种循环

1 三种循环(for while do while)
2 跳转
3 二重循环
4习题
1、使用循环输出100、95、90、85……5。
2、编程计算1至50中是7的倍数的数值之和。
3、1)根据输入数字显示对应的英文星期名称缩写,输入不合法数字时提示输出错误
2)输入错误继续循环
4、求一个数的阶乘例如: 5! 5*4*3*2*1 0!==1
1!=(1-1)!*1=0!*1=1*1=1
2!=(2-1)!*2 1!*2 1*2 2
3!=(3-1)!*3 2!*3 2*3=6
4!=4*3!
阶乘是基斯顿•卡曼(Christian Kramp,1760~1826)于 1808 年发明的运算符号,是数学术语。
一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。1808年,基斯顿•卡曼引进这个表示法。
亦即n!=1×2×3×…×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。

5、打印数字组成的直角三角形
1
22
333
4444
55555
66、商场对顾客的年龄层次进行调查
计算各年龄层次的顾客比例
java学习练习题
7、循环输入商品编号和购买数量(选做)
当输入n时结账
java学习练习题

1.4 方法 方法重载

1 方法 (4种)
2 方法重载
3 跳转语句
4 递归
5习题

1、  输出斐波那契数列的前20项,
结果:1        1       2       3       5       8       13……

2、打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。
3、编写一个方法实现数字倒置并返回这个数字。即3456倒置后6543
4. 用户登录验证。验证次数最多3次
![这里写图片描述](https://img-blog.csdn.net/20171114205926003?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzUyOTI5MjE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
5.综合运用嵌套if选择结构、switch选择结构、多重if选择结构,实现商品换购功能

二 、 面向对象

2.1 类 构造方法

1 类
2 构造方法

1 类
2 构造方法
3 习题

利用面向对象的思想写下面的程序

1.小美在朝阳公园溜旺财【注:旺财是狗】
  分析:
      Dog
         特征:名称
      Person :
         特征:姓名
         行为:溜(Park ,Dog)
      Park:
         特征:名称


2.小明穿着白色的特步运动鞋在奥林匹克公园跑步


3.赵老师在讲台上讲课,小刚认真的听课做笔记


4.张阿姨和李阿姨在物美超市买红富士



构造方法



1.李晓在家里开party,向朋友介绍家中的黄色的宠物狗【彩彩】具有两条腿走路的特异功能。



2.王梅家的荷兰宠物猪【笨笨】跑丢了,她哭着贴寻猪启示。



3.富二代张三向女朋友李四介绍自己的新跑车:白色的宾利


4.定义一“圆”(Circle)类,圆心为“点”Point类,构造一圆,求圆的周长和面积,并判断某点与圆的关系(扩展)
1.  *某公司正进行招聘工作,被招聘人员需要填写,做“个人简历”的封装类,并打印简历信息
//属性
  姓名  年龄 身高 性别  毕业学校  婚姻状况 联系方式
//方法
  打印  showInfo()
2*.某游戏中有巫师角色,巫师的属性有级别、战斗力、生命值等,编写巫师类的重载方法,要求如下:
1)  构造方法1:创建巫师对象后,巫师具有10000的生命值
2)  构造方法2:在创建巫师对象时,可以给巫师指定级别、战斗力、生命值
(级别, 战斗力, 生命值){
}
3)  创建不同对象打印信息。

3.给SE类添加属性:基本工资、考核工资
给PM类添加属性:基本工资、项目奖金、分红
添加构造方法分别对SE与PM中属性进行赋值
编写薪水计算类salary,实现重载pay()方法
提示:pay(SE se)
        pay(PM pm)

4.编写Car类属性:车名、颜色、产地,实现run()方法
1)  添加有参构造方法,在构造方法中给成员赋值,并调用run()方法。
2)  重载run()方法,给run()方法传递一个int类型参数speed,输出此方法信息。

5.编写程序,添加一个Add类
1)  添加一个方法sum(),返回类型为int,有两个int类型参数,该方法计算两个参数的和
2)  添加方法sum()的重载方法,返回类型为double,有三个参数double类型,该方法计算三个参数的和。

2.2 this static

1 this 关键字
2 static 静态

1 this 关键字
2 static 静态
3

利用面向对象 构造函数  this关键字的知识完成以下内容

1.富二代张三向女朋友李四介绍自己的新跑车:白色的宾利
  /* 分析: 富二代 特征: 名称 行为: 介绍(女朋友,车) 女朋友 特征: 名称 车 特征: 品牌 颜色 */



2.贵妇从宠物店购买了宠物狗、宠物猫,某天,家里举行聚会,向朋友介绍起自家豢养的宠物的情形。

    /* 贵妇类: 特征: 名称 行为: 宠物店购买了 宠物狗、宠物猫 家里举行聚会 介绍宠物狗、宠物猫 宠物狗 特征: 性别 年龄 品种 行为: 看家 啃 宠物猫 特征: 性别 年龄 品种 行为: 抓老鼠 */


3.创建一个汽车类,包括轮胎个数,汽车颜色,车身重量等属性和启动/加速/减速/停车的行为,使用不同的构造方法创建汽车对象,实现各个功能





4.定义一“圆”(Circle)类,圆心为“点”Point类,构造一圆,求圆的周长和面积,并判断某点与圆的关系(扩展)
   分析:
       点:x y
       圆:半径和圆心
       人:
         计算
              d>r(圆外)  d==r  圆上   d<r  圆内

5..创建Employee类,属性:姓名,年龄,性别,工资。方法:显示对象的属性值,工作。
要求:
     构造函数重载。(无参数的,有参数的都要有。)
     创建3个对象。

2.3 继承 封装

1 继承
2 封装

1 继承 学生 老师的继承 super equals
2 封装 同上 4种修饰符的应用
3 习题

*1、定义一个人类(姓名,年龄,性别,自我介绍方法),学生类继承人类(学号,班级),
老师类继承人类(工号,教龄),学生类和老师类重写自我介绍
*2、设计Bird、Fish类,都继承自类Animal,实现其重写方法info()打印它们的信息,参考运行结果如图:
我是一只红色的鸟,
今年4岁了!
我是一只五斤重的鱼,
今年2岁了!
3、创建一个Person父类,属性:name、age、sex、address、phone,方法:打印员工信息
  创建Student类继承Person父类,属性:StudentId
  要求如下:
  1)建立一个myemployee1包,所有类添加到此包中。设置name属性设置为public修饰符,age属性设置为protected修饰符,sex属性设置为默认修饰符,address、phone分别设置为private修饰符,使用重写方法打印学生的所有信息,并试图观察是否访问到每个属性,并用注释说明原因


  2)建立一个myemployee2包,此包创建父类,设置name属性设置为public修饰符,age属性设置为protected修饰符,sex属性设置为默认修饰符,addres、phone分别设置为private修饰符
建立一个myemployee3包,此包创建子类,使用重写方法打印学生的所有信息,并试图观察是否访问到每个属性,并用注释说明原因
1.有一个银行账户Account 其中有账户余额的属性, 有存款和取款的行为 【利用封装的思想定义】
    有一个测试类 调用账户的存款和取款的行为
【注意: 取款需要有判断 账户余额是否充足】


2.自己定义一个计算器工具类,实现以下内容
    1.求两个数的和
    2.求两数之差
    3.求两数取余
    4.求两数之积
自己定义一个测试类进行验证

3.利用封装的思想 实现下面功能
    创建一个People类
        属性:姓名 年龄 身高 性别
        方法:说话 计算加法 改名
    创建一个对象名叫“阿美”,年龄18岁 身高160 性别女
        调用说话的方法说出“你好”
        计算23+45的值
        将名字改为“美眉”

2.4 多态 抽象

1 多态
2 抽象
3 final
代码练习
1多态:人 中国人 英国人 意大利人 餐厅 测试
2抽象:猫 狗 动物 测试
3final 具体概念应用
4 习题

1.设计一个形状(Shape)类,里面有计算周长和面积的方法
    设计一个矩形类, 继承自形状类
        自己特有属性 长和宽
    设计一个三角形类 继承自形状类
        特有属性 三个边的边长 【注意:两边之和大于第三边】
设计一个测试类,创建矩形对象和三角形对象 并计算其周长和面积

2.定义一个人的类(属性有名字,年龄。写一个能输出各个属性值
的方法showInfo(),定义一个学生类(属性有性别),学生继承人类
要求:
(1)父类的属性赋值用构造方法来实现(分别用有参数构
造方法和无参数构造方法实现)

(2)子类的属性也用构造方法来赋值。

(3)在子类中重写父类的
showInfo()方法

(4)声明学生类的对象,调用学生的显示信息的方法。

3.请编码实现动物世界的继承关系:

动物(Animal)具有行为:吃(eat)、睡觉(sleep)
动物包括:兔子(Rabbit),老虎(Tiger)
这些动物吃的行为各不相同(兔子吃草,老虎吃肉);但睡觉的行为是一致的。
1.整理面向对象知识点
    类和对象的关系
    构造函数
    this关键字
    封装
    static关键字
    代码块
    继承
    super关键字
    final关键字
    抽象类

*2.愤怒的小鸟游戏中,每种鸟都具有攻击的功能,但是
        小红鸟的攻击方式为 - 投撞
        小黄鸟的攻击行为  -- 加速撞击
        小白鸟的攻击行为 ---- 下蛋攻击
        小黑鸟的攻击行为 --- 自爆
        小蓝鸟的攻击行为 --- 分身攻击
创建对应的对象,实现各自的攻击行为




*3.交通工具都具有有运输的功能,但是
        轮船的运输行为 --- 海运
        飞机的运输行为 --- 空运
        货车的运输行为 ---- 陆运
创建各自的对象,实现运输行为



4.描述一个学生类,具备idname两个属性 、 学生都具备学习的行为功能,但是有部分学生在学习的过程中也会赚钱。
    普通学生: 学习,不会赚钱
    会赚钱的学生:学习、 还会赚钱。

5.描述动物、 狗、 鱼 三个类,动物都具备name、 color两个属性、 动物都具备移动的行为。
    狗特有的一个方法就是咬人。鱼特有的一个行为:吹泡泡。



2.5 接口 内部类 单例

1 接口 关于接口的而一个程序
2 内部类(4类 静态 匿名 局部 成员)
3 单例模式(饿汉 懒汉)

代码练习
1 接口: 鸟 飞机 超人 动物 飞行能力 睡觉能力 测试
2静态内部类 匿名内部类 局部内部类 成员内部类 (各类的定义写法)
3 单例 饿汉 懒汉 (定义写法)
4习题

1.设计一个员工类,其中有计算员工薪水的方法。
 根据员工职务的不同,薪水计算方式也不同。

 员工类型 薪水构成 -----------------------------------------------------
 经理 底薪 + 奖金
 销售人员 底薪 + 提成
 普通员工 底薪 + 补贴(车补、饭补等等)

 然后,设计一个测试类,测试一下。
 场景:年终,领导找员工谈话,让员工介绍自己的薪水。
 打印出来要求:信息尽可能详细。



2.设计一个动物类,属性: 姓名,性别
 设计一个猫类,设计一个狗类, 猫和狗都继承自动物类
 需求:在测试类中设计一个方法,这个方法需要一个参数,参数的类型可以是猫类,也可以是狗类
 在方法体内,将传入的猫或者狗的属性输出即可
 输出到底是猫还是狗



3. 设计一个公司抽象类,具有抽象方法 -- 营业,休息
 设计一个快递公司类作为公司类的子类
 设计一个顺风快递类,作为快递类的子类

 需求:实例化一个顺丰快递的对象,从控制台录入一个24以内的数据,如果数据在8~18点之间,顺丰营业。否则,顺丰快递公司休息 


4.
设计一个外部类,包含一个成员内部类,成员内部类中有一个方法show。
 外部类中有一个属性name, 成员内部类中有一个属性name,show方法中有一个局部变量name
 show方法需要分别打印三个name
class Out{

5.
设计一个家政服务接口,在接口中定义一个方法:洗衣,做饭
 设计一个测试类,在测试类用匿名内部类来实现接口; 在main方法中实现场景:
 小明请了一个保姆,回去做饭



6.每个计算机可以连接任意多个打印机,但是只能有一个打印打印处理系统,避免两个打印作业同时输出到打印机。
利用单例的方式设计程序,完成打印系统处理打印的问题。

7、编写以“动物”为例作为基类(属性:名称、颜色;动作:走路的动作),子类有:猴子类、老虎类、鸟类,并显示出动物的名称以及走路的动作

8、编写一个Person类用来保存人的姓名属性,并定义一个以姓名为参数的Person类的构造函数;再分别编写Person的子类客户类Customer和员工类Employee。
Customer类保存客户的ID属性,并提供可对客户ID号进行更新的方法;其构造方法以客户姓名和ID为参数,方法内部要调用父类Person的构造方法
 Employee类保存员工的工号属性,并提供可对员工工号进行更新的方法;其构造方法以员工姓名和工号为参数,方法内部要调用父类Person的构造方法。

9、某汽车(Vehicle)租赁公司出租多种车辆,车型及租金情况如下:
java学习练习题
编写程序实现计算租赁价
java学习练习题
java学习练习题

三、数组与collection

3.1 数组与查找

主要内容:
1 数组的应用 求和 遍历
2 普通查找 二分查找
3 排序 冒泡排序 选择排序 插入排序

代码练习:
1 数组的应用 求和 遍历 :十人成绩,输入,计算其和平均值,然后遍历输出
2 普通查找 二分查找
3 排序 冒泡排序 选择排序 插入排序
4 习题

   1. 定义存放String类型数据的数组,放置5个元素,利用两种方法遍历数组元素(for for-each)

     2.获取某个数组中的最小值

     3.定义数组,键盘录入5个学生的成绩【成绩值自己设定】,获得成绩之和平均成绩,最小成绩,最大成绩。

     4.一个学生考了三门科目,后来发现该生为特长生,每个科目加55已知一个数组,
    1.求数组中心元素。 
    2.求所有元素和。 
    3.输出所有奇数下标元素。 
    4.输出所有元素中,值为奇数的。 
    5.将所有元素乘二。 

  6.已知一个数组A,将奇数位置元素存到B数组中,偶数位置元素存到C数组中。

75.数组int[] arr = {1, 45, 67, 89, 90}; 将数组倒序输出为{90,89,67, 45, 1}

8.现在有如下的一个数组:
int[] oldArr={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5}  
要求将以上数组中值为0的项去掉,将不为0的值存入一个新的数组,生成的新数组为:
int[] newArr={1,3,4,5,6,6,5,4,7,6,7,5}  
思路:
生活中的问题解决= 程序中的解决;
1、确定出不为0的个数,这样可以开辟新数组; 
2、从旧的数组之中,取出内容,并将其赋给新开辟的数组;


9.现在给出两个数组:
·数组A:[1, 7, 9, 11, 13, 15, 17, 19]
·数组b:[2, 4, 6, 8, 10]
两个数组合并为数组c,按升序排列。
思路:
1.根据A和B的长度和 创建一个新长度的数组C
2.遍历两个数组,将A和B中的元素放在C3.利用冒泡  选择 插入的方式进行升序或者降序的排序

3.2 数组与异常

主要内容:
1常处理机制,五个关键字
2 Arrys工具类的直接调用
3 math 方法的应用
4 多维数组
代码练习(例子)
1 异常查找 异常抛出 几个例子代码
2 Arrays工具类的直接调用(练手用)
3 math 方法的练习
4 多维数组的求和题(练习及变化)
5 习题

   程序设计:
       ---------------------------        请输入一个被除数:
       请输入一个除数:
       除的结果是:
       ---------------------------        请输入一个被除数:
       请输入一个除数:
       除数输入有误,不能为0知道不~
       -------------------------- 

*2、年龄只能输入0到100,使用自定义异常完成 

3、使用二维数组,打印杨辉5行三角 
        1
       1 1
      1 2 1
     1 3 3 1
    1 4 6 4 1 

4、用户从键盘输入若干个数存入数组中,用冒泡排序法对数组排序,比如:1 2 3  5 6  
  然后用户从键盘输入一个数,把该数插入数组中,保证插入该数后,数组还是有序的
 1 2 3    4 5   6   


5、打印数组a中出现奇数次的数字(扩展)
   int[] a = { 1, 3, 3, 4, 4, 4, 5, 5, 6, 6, 6, 6, 6, 8 };
   例如: 1出现次数:1
    4出现次数:3
    6出现次数:5
    8出现次数:1

3.3基本数据类型对应的包装类 常用类

1基本数据类型
2 string类
3 StringBuffer类
4.StringBuilder类


习题
1.从控制台录入一个字符串,判断字符'a'在该字符串中出现的次数

2.从控制台录入一个字符串,去除这个字符串中所有的空格,并输出

 String replace(char oldChar, char newChar)  
(" ","")
3.从控制台录入一个字符串,如果这个字符串以大写字母开头,将该字符串转成全小写;
如果这个字符串以小写字母开头,将该字符串转成全大写
a-z:97-122
A-Z:65-90

4.从控制台输入一个字符串,大写转小写,小写转大写

5.对字符串中字符进行自然顺序降序排序。

6.获取一个字符串在另一个字符串中出现的次数
"abkkcdkkefkkskk"
思路:
1,定义个计数器。
2,获取kk第一次出现的位置。
3,从第一次出现位置后剩余的字符串中继续获取kk出现的位置。
每获取一次就计数一次。
4,当获取不到时,计数完成

7.将一个字符串进行反转。将字符串中指定部分进行反转,"abcdefg";  gfedcba
思路:
1,曾经学习过对数组的元素进行反转。
2,将字符串变成数组,对数组反转。
3,将反转后的数组变成字符串。
4,只要将或反转的部分的开始和结束位置作为参数传递即可

8、声明一个枚举,枚举值为四季,实现需求:
设计一个学生类,在学生类中设计一个枚举类型的成员变量
实现一个普通方法,实现:根据学生的枚举类型的成员变量的值,定制不同季节的上课
---

3.4集合 collection list

collection 接口:list 和 set
1 arraylist
2 linkedlist
3.Iterator接口

习题
    1.创建一个User类,用于name,password两个成员变量。
    在主函数中使用for循环创建10个User对象,并对成员变量赋值,
    在for循环中把10个User对象加入到一个ArrayList对象中。
    然后再使用一个for循环从这个ArrayList对象中把User对象取出,
    并在屏幕上打印这10个User对象的成员变量。

    2.使用Iterator对象取出存放在ArrayList中的User对象,重复上述试验。

    3、设计一个交通工具抽象类,提供抽象方法--驾驶
       汽车作为交通工具的一种,实现了驾驶的方法(在马路上驾驶)
       火车作为交通工具的一种,实现了驾驶的方法(在铁路上驾驶)
       飞机作为交通工具的一种,实现了驾驶的方法(在天上驾驶)
       需求:做一个测试类,在测试类的main函数中,分别实例化一个汽车的对象,
                  火车的对象和飞机的对象,并分别描述驾驶行为



    4.设计一个工厂类(富土康),传入一个标志,返回不同类型的手机



    5、设计一个数据传输接口:Type-C标准
       设计一个防水的接口:防水
        设计一个手机类,实现这个数据传输接口,采用Type-C;同时实现了防水的接口


    6、程序设计:
        运输接口:服务宗旨:更快,更快,更快!
        空运运输接口:空运
        陆运运输接口:陆运

        快递公司类:属性: 公司名
        韵达快递:只能陆运
        申通快递:只能空运
        顺丰快递:既能陆运,也能空运

        需求:
        小明需要寄快递,要发陆运
        小王需要寄快递,要发空运

3.5 set

1 hashset
2treeset
习题

1.已知有一个工人Worker类 属性:姓名 年龄 工资, 行为 void work()
    a.在ArrayList集合中添加三个工人对象,信息如下:
        zhang3  18   3000
        li4      25  3500
        wang5    22  3200
    b. 在li4之前插入一个工人 信息为: zhao6  24  3300
    c. 删除wang5的信息
    d. 利用for循环遍历,打印几个中所有工人的信息
    e. 利用迭代遍历,对集合中的所有工人调用work方法




2. 在上一题的基础上 将集合换为HashSet
    要求: 当工人姓名 年龄 工资全部相等时 是为同一个工人

3.在第1题的基础上 将集合换为TreeSet
    要求:按照工人姓名降序排序,如果姓名一样,按照工人年龄升序排序,如果年龄一样,按照工资降序排序