JavaSE 01 作业讲解和答案

1. 单选题

台式机,安卓手机,iPhone手机,他们其实都是计算机,计算机干的事情就是严格的执行人的指令,但是目前的科技条件下,电脑仍然有一个很大的短板,这个短板是?

A 思考
B 计算

答案:A

计算机最擅长的是运行固定的程序,就目前而言,计算机还缺少思考的能力。包括目前的人工智能,也缺少类似于人的思考过程。
	我们以下棋的人工智能为例,包括五子棋,国际象棋,围棋等。在以前,计算机会根据对手的每一步,计算自己所有步骤的胜率,根据结果找出最优的下法。其中最杰出的代表就是1997年深蓝战胜了人类的国际象棋冠军卡斯帕罗夫。在国际象棋中,步骤是有限的,深蓝就在这有限个走法中找到胜率最大的。这种把所有情况都考虑到的方式叫做穷举法,适用于不是很复杂的情况,这是以前的人工智能。但是这种方式是有弊端的,比如围棋,围棋中可走的步数就太多了,计算量太大,利用穷举法就不现实,所以在下围棋的时候就会更换算法,比如:在201年AlphaGo对战人类顶级围棋大师的时候,就没有采取穷举法,而是借鉴了人类的思维习惯:推演。也就是,走一步,看三步。首先会判断,在哪几个地方可以落子,然后再判断每一个地方的胜率,找出胜率最大的,这样就不需要把整个棋盘中可以落子的所有地方都考虑完毕,大大减少了计算的时间。但是这种方式也是程序员提前写好的程序,还不能算是自我思考。

2.单选题

计算机不能思考,那他是如何工作的呢,下面的描述哪个是对的?

A 等待人工智能的进一步发展,计算机能自己思考
B 人类告诉计算机如何计算,规则是什么

答案:B

我们将来写的代码就是告诉计算机如何计算的,计算机会按照我们编写的代码去运行

3.多选题

任何计算机能执行的东西都是程序,下面的内容哪些是程序?

A 操作系统
B 360浏览器
C 安卓app
D 电脑病毒

答案:ABCD

只要是我们人为编写的,都是程序。
计算机中的程序有系统软件还有应用软件。
关于计算机的其他知识我已录了视频,可以下载观看。
链接:https://pan.baidu.com/s/1et04S2zgVInVNwvmnTuIfw 
提取码:m6ga

4.流程考察题

大多数程序都是顺序结构,计算机一步一步的执行我们的指令,请大家为黑马机器人排列指令,完成机器人进屋的操作

A 把门拉开
B 开锁
C 进入房间
D 关上房门

本题的目的是为了让大家在学习之前,初步了解一下什么是逻辑性。
所谓逻辑性,说白了就是事情进行的步骤,我们以后在写代码的时候也要能梳理逻辑。
答案能否自己梳理呢?

5.流程考察题

请给下面的步骤排序,制作麦辣鸡腿堡

A 把第一片面包和第二片面包夹在一起
B 在第一片面包上面放麦辣鸡酱
C 拿两片面包
D 在第二片面包上放麦辣鸡

本题的目的是为了让大家在学习之前,初步了解一下什么是逻辑性。
所谓逻辑性,说白了就是事情进行的步骤,我们以后在写代码的时候也要能梳理逻辑。
答案能否自己梳理呢?

6.操作题

安装JDK

Java 00 开发环境配置

7.操作题

配置环境变量

请参见视频和day01的笔记

8.操作题

安装Notepad++

请参见视频和day01的笔记

9.操作题

利用记事本和Notepad++分别写一个HelloWorld并成功运行

请参见视频和day01的笔记

JavaSE 02 作业讲解和答案

题目1:(选择)

下列关于java变量声明那个是错误的:

A . int x = 5;
B. double d = 3.14;
C. char grade = ‘C’;
D. String name = ‘黑马程序员’;

讲解:D

字符串需要用双引号引起来

题目2:(看代码说结果)

看代码说结果,不要去运行。

double money = 10.0;
money = money + 5;
money -= 2.5;
money = money + 10;
money = money -3;
System.out.println(money)

**程序从上往下依次执行,不断的修改 money **这个变量中的值

最终变化为:19.5

题目3:(代码题)

请用代码描述下列银行流水变化过程:

  1. 小明账户bankBalance初始值有500.00元
  2. 存入250元
  3. 支出100元
  4. 打印剩余存款

讲解:

double bankBalance = 500.0;
bankBalance = bankBalance + 250;
bankBalance = bankBalance - 250;
System.out.println(bankBalance);

题目4:(选择题)

变量名是一个单词或者是一组单词,用来描述一个数据的含义,方便人理解,变量名不能有空格。下面的名字哪些可以是变量名?

A. mybirthday
B. myname
C. my name
D. my birthday
E. 1987.
F. ”传智播客”

讲解:

AB正确,其他错误
C:不能有空格
D:不能有空格
E:不能以数字开头
F:变量名不能有双引号

题目5:(选择题)

关于变量的说法哪些是对的?

A. 一个变量一次就可以存储很多种不同的数据
B. 变量是值的容器,定义变量可以存放值
C. 变量可以随时修改存储数据的类型
D. 定义变量可以帮我们存储信息方便后面使用

讲解:

A:错误,一个变量只能存一个值
B:正确
C:错误,只有存储的值可以修改,数据类型一旦确定无法修改
D:正确

题目6:(选择题)

下面代码哪些是创建一个变量?

A. int myAge = 18;
B. myName='传智播客”;
C. myAge = 16;
D. String myName ;

讲解:

A:正确
B:错误,缺少数据类型,而且数据值也错误
C:错误,缺少数据类型
D:错误,没有赋值

题目7:(选择题)

int和float的区别是什么?

A. 区别是没有区别
B. int是变量, float是方法
C. int是用来存放整数数据的变量类型,float是存放小数的
D. int类型的数据要用”, 引号引起来

讲解:

A:错误,有区别
B:错误,int和float都是数据类型
C:正确
D:错误,整数不用双引号引起来

题目8:(代码题)

变量应该是先声哪后使用,请完成下面代码

A.声明字符串型变量name
B.声明字符串型变量birthday
C.声明整数类型变量age
D.声明float类型变量money

讲解:

A:String name = "尼古拉斯阿玮";
B:String birthday = "9月10日";
C:int age = 18;
D:float money = 999999999.99F;

题目9(代码题)

请编写程序,分别定义8种基本数据类型的变量,并打印变量的值。

训练目标

java中的八种基本基本数据类型和变量的定义

训练提示

1、java中的8种基本数据类型都有什么?
2、定义变量的格式是什么?
3、变量名该怎样定义?
4、该怎样使用变量?

参考方案

定义变量,并输出变量的值。

训练步骤

1、创建java文件,定义类Test03,编写主方法。
2、在java语言中,定义变量必须明确变量的数据类型。八种基本数据类型包括byte、short、int、long、float、double、char、boolean。
3、定义变量的格式是:

数据类型 变量名 = 初始化值; // 声明变量并赋值
// 或
数据类型 变量名; // 先声明
变量名 = 初始化值; // 再赋值

4、可以包含英文字母、数字字符、英文下划线(_)和英文美元符($),并且不能以数字开头。在开发中,java变量的命名又最好符合“小驼峰”式的惯例规范,并且最好做到见名知意。
5、在输出语句中,直接调用变量名即可。
6、编译并运行代码,查看输出结果。

参考答案

public class Test01 {
    public static void main(String[] args) {
        // 定义byte类型变量,值为整数,只要在byte范围即可,byte范围:-128 ~ 127
        byte b = 100;
        System.out.println(b);
		// 定义short类型变量,值为整数,只要在short范围即可
        short s = 12345;
        System.out.println(s);

        // 整数的默认类型就是int类型
        int num = 654321;
        System.out.println(num);

        // 定义long类型的整数,需要在数据的后面加字母(L),大小写不限,建议大写。
        long lo = 123456789L;
        System.out.println(lo);

        // 定义float类型的浮点数,需要在数据的后面加字母(F),大小写不限,建议大写。
        float f = 1.5F;
        System.out.println(f);

        // 浮点型默认类型double
        double d = 123.456;
        System.out.println(d);

        // 布尔型只有两个取值:true和false
        boolean b1 = true;
        boolean b2 = false;
        System.out.println(b1);
        System.out.println(b2);

        // 定义字符型需要一对英文的单引号包裹,并且只能包含一个字符
        char c = 'a';
        System.out.println(c);
    }
}

题目10(代码题)

请根据下列描述,选用合适的数据类型定义变量,并输出变量的值。

1、班级里有100个学员。
2、某商品价格55.55元。
3、地球已经诞生超过46亿年。
4、“5是偶数”这句话的描述是假的。

输出结果如下:

100
55.55
4600000000
false

训练目标

变量的定义

训练提示

1、不同的数据信息需要使用不同的数据类型,可以根据不同数据类型的大小以及特点选择合适的类型来定义变量,描述事物的信息。

参考方案

定义变量描述信息。

训练步骤

1、创建java文件,定义类Test04,编写主方法。

2、在主方法中定义不同的变量描述题目中的信息。
2.1、学员数量,可以用默认的整数类型int表示
2.2、商品价格,使用默认的浮点数类型double表示
2.3、天文数字,可以使用长整型long表示
2.4、一个描述真或者假,只有两种状态,可以使用boolean类型

3、使用输出语句,输出变量。

4、编译并运行,查看输出结果。

参考答案

public class Test02 {
    public static void main(String[] args) {
        int studentNumber = 100; // 学生数量
        System.out.println(studentNumber);

        double price = 55.55; // 商品价格
        System.out.println(price);

        long yearNumber = 4600000000L; // 超出int范围的整数
        System.out.println(yearNumber);

        boolean flag = false; // 真假值
        System.out.println(flag);
    }
}

题目11(代码题)

在今天的课程学习中,我们知道了java的8种基本数据类型,随着后续学习,我们还将学习引用数据类型。此时由于练习需要,我们要了解其中一个最常用的引用数据类型-字符串(String),字符串变量的一种定义方式与基本数据类型一致:

// 数据类型 变量名 = 初始化值;
String str = "中国";
System.out.println(str);
// 其中String为数据类型,str为变量名(符合标识符规则即可),"中国"是我们学习的字符串常量值。
// 总体即表示:将字符串"abc",赋值给字符串类型的变量str。
// 输出结果为:中国

请根据以上描述,选用合适的数据类型定义变量用于描述一个学员的信息,并将其输出到屏幕上。输出结果如下:

************************
我的姓名是:张三
我的性别是:男
我的年龄是:18
我的地址是:xx省xx市
我的饭卡余额是:55.55元
************************

训练目标

数据类型、变量的定义和使用、字符串连接符

训练提示

1、根据题目要求,学员的信息包含姓名、性别、年龄、地址、余额,这些信息分别应该使用什么样的数据类型来存储呢?
2、在输出语句中,为了按照题目要求的格式输出,需要将一些已知字符串和变量进行拼接,比如:“我的姓名是:” + name

参考方案

训练步骤

1、创建java文件,定义类Test03,编写主方法。
2、在主方法中定义变量用于存储学员信息。
2.1、姓名、性别、地址都可以使用字符串类型
2.2、年龄为整数数据,使用int类型
2.3、余额为小数类型,使用double类型
3、将已知字符串与变量使用“+”拼接在一起输出。
4、保存文件,编译运行,查看结果。

参考答案

public class Test03 {
    public static void main(String[] args) {
        // 姓名
        String name = "张三";
        // 性别
        String gender = "男";
        // 年龄
        int age = 20;
        // 地址
        String address = "美国芝加哥";
        // 余额
        double money = 88.88;

        System.out.println("************************");
        System.out.println("我的姓名是:" + name); // 在输出语句中将变量与字符串拼接
        System.out.println("我的性别是:" + gender);
        System.out.println("我的年龄是:" + age);
        System.out.println("我的地址是:" + address);
        System.out.println("我的饭卡余额是:" + money + "元");
        System.out.println("************************");
    }
}

JavaSE 03 作业讲解和答案

知识点

运算符

题目1(训练)

身高是具有遗传性的,子女的身高和父母的身高有一定的关系。假定,父母和子女的身高遗传关系如下:

儿子身高(厘米)=(父亲身高+母亲身高) ×1.08÷2
女儿身高(厘米)=(父亲身高×0.923+母亲身高) ÷2

现有父亲身高177CM,母亲身高165CM。求子女身高分别预计为多少?

训练提示

  1. 已知的父母身高如何用代码体现?
  2. 题目中的公式如何转化为代码?

解题方案

  1. 使用变量的定义和算术运算符完成本题

操作步骤

  1. 定义小数变量代表父亲身高
  2. 定义小数变量代表母亲身高
  3. 通过儿子身高计算方式计算儿子身高
  4. 通过女儿身高计算方式计算女人身高

参考答案

public class Demo01 {
    public static void main(String[] args) {
        //1.定义父亲身高
        double father = 177;
        //2.定义母亲身高
        double mother = 165;
        //3.利用公式计算儿子身高
        double son = (father + mother) * 1.08 / 2;
        //4.利用公式计算女儿身高
        double daughter = (father * 0.923 + mother) / 2;
		//5.打印结果
        System.out.println("儿子预计身高" + son + "厘米");
        System.out.println("女儿预计身高" + daughter + "厘米");

    }
}

题目2(训练)

红茶妹妹有21元钱,她攒了几天钱之后自己的钱比原来的两倍还多三块。绿茶妹妹有24元钱,她攒了几天钱之后自己的钱正好是原来的两倍。那么红茶和绿茶现在的钱一样多,请问对么?

训练提示

  1. 用什么知识点来计算她们现在的钱有多少?
  2. 如何对比两个人的钱数?

解题方案

  1. 使用赋值运算符和算术运算符计算各自的钱,使用比较运算符对比大小

操作步骤

  1. 定义红茶妹妹原来的钱为整数变量
  2. 定义绿茶妹妹原来的钱为整数变量
  3. 使用赋值运算符和算术运算符计算其现有的钱
  4. 使用比较运算符对数值做出比较

参考答案

public class Demo2 {
    public static void main(String[] args) {
        //1.定义红茶妹妹原来的钱
        int red = 21;
        //2.定义绿茶妹妹原来的钱
        int green = 24;
        //3.求红茶妹妹现有的钱
        red = red * 2 + 3;
        //4.求绿茶妹妹现有的钱
        green *= 2;
        //5.判断并输出两个人的钱是否相等
        System.out.println(red == green);
    }
}

题目3(综合)

某小伙想定一份外卖,商家的优惠方式如下:鱼香肉丝单点24元,油炸花生米单点8元,米饭单点3元。订单满30元8折优惠。鱼香肉丝优惠价16元,但是优惠价和折扣不能同时使用。那么这个小伙要点这三样东西,最少要花多少钱?

训练提示

  1. 有两种购买方式,一种是不使用优惠价,另一种是使用优惠价。分别计算花费后,对两种方式的花费作对比。

解题方案

  1. 使用算术运算符、赋值运算符和三元运算符联合完成本题

操作步骤

  1. 使用算术运算符求出不使用优惠时的总价
  2. 使用三元运算符判断总价是否满足打折条件,并求出折后总价
  3. 使用算术运算符求出使用优惠价时的总价
  4. 使用三元运算符判断最终更合算的购买方式和花费

参考答案

public class Demo3 {
    public static void main(String[] args) {
        //1.求不使用优惠时的总价
        double money1 = 24 + 8 + 3;
        //2.判断折后总价
        money1 = (money1 >= 30 ? money1 * 0.8 : money1);
        //3.求使用优惠时的总价
        double money2 = 16 + 8 + 3;
        //4.判断两种花费哪个更少
        double money = money1 < money2 ? money1 : money2;
        //5.打印最终花费
        System.out.println(money);
    }
}

题目4

看代码说结果,不要去运行。

System.out.println(2.0*(5/2));

  1. 4
  2. 4.0
  3. 5
  4. 5.0
  5. 以上答案都不对

讲解:

答案:4.0

在Java中整数相除结果为整数,所以5/2结果是2

2.0乘以2,结果就是4.0

题目5:

看代码说结果,不要去运行。

String firstName = "Tomas";
String familyName = "Zhang";
打印firstName + familyName 之后是什么结果?
"TomasZhang"
因为字符串相加其实是进行拼接操作

题目6:

需求:

数字6是一个真正伟大的数字,键盘录入两个整数。  	
如果其中一个为6,最终结果输出true。  	
如果它们的和为6的倍数。最终结果输出true。  	
其他情况都是false。

请参见视频

题目7:

需求:

键盘录入一个三位数,求这个三位数每一位的数字和。
举例:
键盘录入123。那么每一位数字相加为:1 + 2 + 3,和为:7。

代码示例:

import java.util.Scanner;
public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个三位数");
        int number = sc.nextInt();
        int ge = number % 10;
        int shi = number / 10 % 10;
        int bai = number / 100 % 10;

        int sum = ge + shi + bai;
        System.out.println(sum);
    }
}

JavaSE 04 作业讲解和答案

一、if 判断语句作业

题目1

李雷想买一个价值7988元的新手机,她的旧手机在二手市场能卖1500元,而手机专卖店推出以旧换新的优惠,把她的旧手机交给店家,新手机就能够打8折优惠。为了更省钱,李雷要不要以旧换新?请在控制台输出。

训练提示

  1. 用什么知识点能够对不同购买方式的价格做判断?

解题方案

  1. 使用if…else语句判断

操作步骤

  1. 计算不使用以旧换新时的花费。
  2. 计算使用以旧换新时的花费。
  3. 使用if…else语句判断哪种方式更省钱,并输出结果

参考答案

public class Demo1 {
    public static void main(String[] args) {
        //1.计算不使用以旧换新的花费
        int money1 = 7988 - 1500;
        //2.计算以旧换新的花费
        double money2 = 7988 * 0.8;
        //3.判断两种方式
        if(money1 > money2){
            System.out.println("使用以旧换新更省钱");
        }else{
            System.out.println("不使用以旧换新更省钱");
        }
    }
}

题目2

让用户依次录入三个整数,求出三个数中的最小值,并打印到控制台。

训练提示

  1. 如何完成用户录入?
  2. 求最小值需要用到什么知识点?

解题方案

  1. 使用Scanner键盘录入三个数字,使用三元运算符实现
  2. 使用Scanner键盘录入三个数字,使用if…else的嵌套实现(不做要求)

操作步骤

  1. 使用三次键盘录入的方法让用户输入三个整数
  2. 使用三元运算符求出最小值
  3. 打印输出最小值

备注:

本题,也可以使用if嵌套的方式书写,但是非常麻烦,建议用三元运算符。
可以自己试着写一下if嵌套方式,然后跟三元运算符方式进行对比一下,看看谁更简单。

参考答案

//1.导包
import java.util.Scanner;
public class Demo2 {
    public static void main(String[] args) {
        //2.创建键盘录入对象
        Scanner sc = new Scanner(System.in);
        //3.分别录入三个数字
        System.out.println("请输入第一个整数:");
        int i = sc.nextInt();
        System.out.println("请输入第二个整数:");
        int j = sc.nextInt();
        System.out.println("请输入第三个整数:");
        int k = sc.nextInt();
        //4.定义变量代表最小值
        int min;
        //5.对三个整数进行判断
        if( i < j && i < k){
            min = i;
        }else if( j < i && j < k){
            min = j;
        }else{
            min = k;
        }
        //6.打印最小值
        System.out.println("最小值是" + min);
    }
}

题目3(一般难度)

某银行推出了整存整取定期储蓄业务,其存期分为一年、两年、三年、五年,到期凭存单支取本息。存款年利率表如下:

存期 年利率(%)
一年 2.25
两年 2.7
三年 3.25
五年 3.6

请存入一定金额(1000起存),存一定年限(四选一),计算到期后得到的本息总额。

提示:
存入金额和存入年限均由键盘录入
本息计算方式:本金+本金×年利率×年限

训练提示

  1. 使用什么方式让用户输入内容?
  2. 使用哪种if语句的格式对信息作出判断?

解题方案

  1. 使用Scanner和if…else…的嵌套操作。

操作步骤

  1. 键盘录入金额和年份。
  2. 使用多条件if…else判断年份,计算本息金额。
  3. 输出结果。

参考答案

//1.导包
import java.util.Scanner;
public class Demo3 {
    public static void main(String[] args) {
        // 2.创建键盘录入对象
        Scanner sc = new Scanner(System.in);
        // 3.调用方法获取键盘录入的本金和存取年限
        System.out.println("请输入存款金额:");
        int money = sc.nextInt();
        System.out.println("请输入存款年限:");
        int year = sc.nextInt();
        // 4.定义本息和的变量
        double outMoney = 0;
        // 5.根据利率和年限计算本息和
        if (year == 1) {
            outMoney = money + money * 2.25 / 100 * 1;
        } else if (year == 2) {
            outMoney = money + money * 2.7 / 100 * 2;
        } else if (year == 3) {
            outMoney = money + money * 3.25 / 100 * 3;
        } else if (year == 5) {
            outMoney = money + money * 3.6 / 100 * 5;
        } else {
            System.out.println("输入的年限有误");
        }
        // 6.打印输出
        System.out.println("存款" + year + "年后的本息是:" + outMoney);
    }
}

题目4(较难)

某商场购物可以打折,具体规则如下:

普通顾客购不满100元不打折,满100元打9折;
会员购物不满200元打8折,满200元打7.5折;
不同打折规则不累加计算。

请根据此优惠计划进行购物结算,键盘录入顾客的类别(0表示普通顾客,1表示会员)和购物的折前金额(整数即可),输出应付金额(小数类型)。

训练提示

  1. 使用什么方式让用户输入内容?
  2. 使用哪种if语句的格式对信息作出判断?

解题方案

  1. 使用Scanner键盘录入和if…else判断语句的嵌套使用来完成。

操作步骤

  1. 键盘录入会员类别和购物金额。
  2. 先使用if-else判断顾客类别。
  3. 在不同的顾客类别中再使用if-else语句判断购物金额。
  4. 输出结果。

参考答案

//1.导包
import java.util.Scanner;
public class Demo4 {
    public static void main(String[] args) {
        // 2.创建键盘录入对象
        Scanner sc = new Scanner(System.in);
        // 3.调用方法获取键盘录入的顾客类别和购物金额
        System.out.println("请输入顾客类别(0表示普通顾客,1表示会员顾客):");
        int type = sc.nextInt();
        System.out.println("请输入购物金额:");
        int money = sc.nextInt();
        // 4.先判断顾客类别
        if (type == 0) {
            // 4.1.普通顾客,再判断购物金额
            if (money > 0 && money < 100) {
                System.out.println("您的应付金额为:" + money);
            } else if (money >= 100) {
                System.out.println("您的应付金额为:" + money * 0.9);
            } else {
                System.out.println("您输入的金额有误");
            }
        } else if (type == 1) {
            // 4.2.会员顾客,再判断购物金额
            if (money > 0 && money < 200) {
                System.out.println("您的应付金额为:" + money * 0.8);
            } else if (money >= 200) {
                System.out.println("您的应付金额为:" + money * 0.75);
            } else {
                System.out.println("您输入的金额有误");
            }
        } else {
            System.out.println("您输入的顾客类别有误");
        }
    }
}

题目5(很难)

2019年1月1日起,国家推出新的个人所得税政策,起征点上调值5000元。也就是说税前工资扣除三险一金(三险一金数额假设是税前工资的10%)后如果不足5000元,则不交税。如果大于5000元,那么大于5000元的部分按梯度交税,具体梯度比例如下:

0 ~ 3000元的部分,交税3%
3000 ~ 12000元的部分,交税10%
12000 ~ 25000的部分 , 交税20%
25000 ~ 35000的部分,交税25%
35000 ~ 55000的部分,交税30%
55000 ~ 80000的部分,交税35%
超过80000的部分,交税45%

比如:黑马某学员入职一家企业后,税前工资是15000,则他每月该交个税的部分是15000-1500-5000=8500元,个税缴纳数额是3000×3%+5500×10%=640元。税后工资12860元。

请完成一个个税计算程序,在用户输入税前工资后,计算出他对应的纳税数额,以及税后工资为多少?

训练提示

  1. 工资的哪些部分是属于要纳税部分,如何计算?
  2. 纳税比例有很多区间,用什么知识点能够对应多个区间?
  3. 每个区间的纳税数额是多少,计算的规律是什么?

解题方案

  1. 使用多条件的if…else对应各个纳税梯度,分别计算每一个梯度的纳税数额。

操作步骤

  1. 提示用户输入税前工资,使用键盘录入让用户输入一个整数。
  2. 计算工资中应交税部分。也就是去除三险一金和起征点数额。
  3. 使用多条件if…else…对每个区间分别判断,用每个梯度的计算公式求出对应的纳税数额。
  4. 根据求出的纳税数额求出税后工资。

参考答案

//1.导包
import java.util.Scanner;
public class Demo5 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您的税前工资:");
        //2.键盘录入税前工资
        int money = sc.nextInt();
        //3.计算应纳税部分的工资
        double before = money - (money*0.1) - 5000;
        //4.定义个税变量
        double shui = 0;
        //5.按照梯度范围计算个税数值
        if(before > 0 && before <=3000){
            shui = before * 0.03;
        }else if(before > 3000 && before <=12000){
            shui = 3000*0.03 + (before-3000) * 0.1;
        }else if(before > 12000 && before <=25000){
            shui = 3000*0.03 + 9000*0.1 +  (before-12000)*0.2;
        }else if(before > 25000 && before <=35000){
            shui = 3000*0.03 + 9000*0.1 + 13000*0.2 + (before-25000)*0.25;
        }else if(before > 35000 && before <=55000){
            shui = 3000*0.03 + 9000*0.1 + 13000*0.2 + 10000*0.25 + (before-35000)*0.3;
        }else if(before > 55000 && before <=80000){
            shui = 3000*0.03 + 9000*0.1 + 13000*0.2 + 10000*0.25 + 20000*0.3 + (before-55000)*0.35;
        }else if(before > 80000){
            shui = 3000*0.03 + 9000*0.1 + 13000*0.2 + 10000*0.25 + 20000*0.3 + 25000*0.35 + (before-80000)*0.45;
        }
        //6.计算税后工资
        double after = money - (money*0.1) - shui;
        //7.打印个税和税后工资
        System.out.println("个人所得税" + shui + "元");
        System.out.println("税后工资" + after + "元");
    }
}

二、switch选择语句作业

题目1

模拟计算器功能,对键盘录入的两个int类型的数据进行加、减、乘、除的运算,并打印运算结果。

要求:

键盘录入三个整数,其中前两个整数代表参加运算的数据,第三个整数为要进行的运算(1:表示加法运算,2:表示减法运算,3:表示乘法运算,4:表示除法运算),演示效果如下:

请输入第一个整数: 30
请输入第二个整数: 40
请输入您要进行的运算(1:表示加法,2:表示减法,3:表示乘法,4:表示除法): 1
控制台输出:30+40=70

训练提示

  1. 用户录入了数据之后,用什么知识点去判断加减乘除四种不同的操作?

解题方案

  1. 使用switch判断语句完成。

操作步骤

  1. 使用键盘录入三个变量。
  2. 使用switch判断语句对第三个变量进行判断,匹配要执行的操作。
  3. 在每一个case中分别对第一个变量和第二个变量进行不同的操作。

参考答案

// 1.导包
import java.util.Scanner;
public class Demo2 {
    public static void main(String[] args) {
        // 2.创建键盘录入对象
        Scanner sc = new Scanner(System.in);
        // 3.提示需要输入的数据,并调用方法获取输入的数据
        System.out.println("请输入第一个整数:");
        int num1 = sc.nextInt();
        System.out.println("请输入第二个整数:");
        int num2 = sc.nextInt();
        System.out.println("请输入您要进行的运算(1:表示加法,2:表示减法,3:表示乘法,4:表示除法)");
        int type = sc.nextInt();
        // 4.使用switch语句判断计算类型,并输出相应的结果
        switch (type) {
            case 1:
                System.out.println(num1 + " + " + num2 + " = " + (num1 + num2));
                break;
            case 2:
                System.out.println(num1 + " - " + num2 + " = " + (num1 - num2));
                break;
            case 3:
                System.out.println(num1 + " * " + num2 + " = " + (num1 * num2));
                break;
            case 4:
                System.out.println(num1 + " / " + num2 + " = " + (num1 * 1.0 / num2));
                break;
            default:
                System.out.println("您输入的运算类别有误");
                break;
        }
    }
}

三、循环语句作业

题目1

键盘录入两个数字number1和number2表示一个范围,求这个范围之内的数字和。

训练提示

  1. number1和number2不知道谁大谁小,需要先判断大小关系
  2. 确定大小之后,可以循环得到范围里面的每一个数
  3. 把每一个数字进行累加即可

参考答案

import java.util.Scanner;
public class Test1 {
    public static void main(String[] args) {
		//键盘输入两个数字
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入第一个数字");
        int number1 = sc.nextInt();
        System.out.println("请输入第二个数字");
        int number2 = sc.nextInt();
        //获取最大值和最小值
        int max = number1 > number2 ? number1 : number2;
        int min= number1 < number2 ? number1 : number2;

		//累加求和
        int sum = 0;
        for (int i = min; i <= max; i++) {
            sum = sum + i;
        }
        System.out.println(sum);
    }
}

题目2

需求:
键盘录入两个数字,表示一个范围。统计这个范围中。既能被3整除,又能被5整除数字有多少个?

训练提示

  1. 需要先判断键盘录入两个数字的大小关系
  2. 确定大小之后,可以循环得到范围里面的每一个数
  3. 找到一个符合条件的数字,统计变量就自增一次

操作步骤

  1. 确定键盘录入的两个数字大小关系
  2. 定义for循环,找到范围之内的每一个数字
  3. 对每一个数字进行判断
  4. 符合条件统计变量自增一次

参考答案

import java.util.Scanner;
public class Test2 {
    public static void main(String[] args) {
        //键盘输入两个数字
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入第一个数字");
        int number1 = sc.nextInt();
        System.out.println("请输入第二个数字");
        int number2 = sc.nextInt();
        //获取最大值和最小值
        int max = number1 > number2 ? number1 : number2;
        int min= number1 < number2 ? number1 : number2;

		//统计个数
        int count = 0;
        for (int i = min; i <= max; i++) {
            if(i % 3 == 0 && i % 5 == 0){
                count++;
            }
        }
        System.out.println(count);

    }
}

题目3

需求:世界最高山峰是珠穆朗玛峰(8844.43米=8844430毫米),

假如我有一张足够大的纸,它的厚度是0.1毫米。
请问,我折叠多少次,可以折成珠穆朗玛峰的高度?

参考答案

参见视频

题目4

需求:给你一个整数 x 。
如果 x 是一个回文整数,打印 true ,否则,返回 false 。

解释:回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

例如,121 是回文,而 123 不是。

参考答案

参见视频

题目5

需求:

给定两个整数,被除数dividend和除数divisor(都是正数,且不超过int的范围) 。
将两数相除,要求不使用乘法、除法和 % 运算符。
得到商和余数。

参考答案

参见视频

题目6(较难)

已知2019年是猪年,请在控制台输出从1949年到2019年中所有是猪年的年份。

训练提示

  1. 1949到2019有很多年?逐个判断这么多年份肯定要用循环。
  2. 用什么条件来判断是否是猪年?

解题方案

  1. 使用for循环逐年判断,根据2019是猪年这个条件,使用if来判断其他是猪年的年份。

操作步骤

  1. 定义for循环,1949到2019的年份是循环次数。
  2. 对每个年份逐个判断,如果年份和2019的差值是12的倍数,说明这年是猪年
  3. 打印符合条件的年份

参考答案

public class Demo1 {
    public static void main(String[] args) {
        //1.循环开始是1949 结束是2019
        for (int i = 1949; i < 2019; i++) {
            //2.如果年份和2019年的差值是12的倍数 则说明是猪年
            if( (2019 - i) % 12 == 0 ){
                //3.打印符合条件的年份
                System.out.println(i);
            }
        }
    }
}

题目7(较难)

中国有闰年的说法。闰年的规则是:四年一闰,百年不闰,四百年再闰。(年份能够被4整除但不能被100整除算是闰年,年份能被400整除也是闰年)。请打印出1988年到2019年的所有闰年年份。

训练提示

  1. 从1988年到2019年有很多年,每年都需要判断,用什么知识点对每年进行判断?

解题方案

  1. 使用while循环完成
  2. 使用for循环完成
    以下以方案2为准

操作步骤

  1. 定义for循环,循环开始是1988,结束是2019
  2. 在循环中对年份进行判断
  3. 如果符合闰年的判断条件,则打印该年份

参考答案

public class Demo2 {
    public static void main(String[] args) {
        //1. 定义对年份的循环
        for (int year = 1988; year <= 2019; year++) {
            //2. 判断当年是否符合闰年条件
            if((year%4 == 0 && year%100 != 0) || year%400 == 0){
                System.out.println(year + "是闰年");
            }
        }
    }
}

JavaSE 05 作业讲解和答案

知识点

数组

题目1

请创建一个长度为6的整数数组,并为数组中的元素赋值。遍历数组,打印所有元素,元素之间用空格隔开。比如:

数组为:{1,2,3,4,5}
打印结果:1 2 3 4 5

训练提示

1、数组中的元素有索引,开始索引和结束索引分别是什么?使用循环语句,依次通过索引获取元素即可遍历数组。
2、在打印数组元素时,是以空格分隔,并且不换行,该怎样输出?

解题方案

for循环遍历数组

操作步骤

1、定义int数组,使用静态初始化方式为元素赋值。
2、使用for循环对数组进行遍历,循环索引从0开始,到数组的长度-1结束。
3、逐个打印数组元素,打印元素不换行,在输出元素的后面拼接空格。

参考答案

public class Demo1 {
    public static void main(String[] args) {
        //1.定义数组
        int[] arr = {11,22,33,44,55};
        //2.对数组遍历
        for (int i = 0; i < arr.length; i++) {
            //3.打印每一个元素
            System.out.print(arr[i] + " ");
        }
    }
}

题目2

现有一个小数数组{12.9, 53.54, 75.0, 99.1, 3.14}。请编写代码,找出数组中的最小值并打印。

训练提示

1、数组的元素是小数,需要定义小数类型数组。
2、找最值需要先定义一个参考值,然后依次拿每个值与参考值比较即可。

解题方案

将数组的第一个值作为参考值,遍历数组,依次比较,记录更小值。

操作步骤

1、定义double类型数组并存入元素。
2、定义double类型变量min代表最小值,初始化为数组第一个值。
3、遍历数组,用每个元素依次和变量min对比。
4、如果发现有元素小于min,则把该元素赋值给min。
5、遍历结束之后min记录的就是最小值,打印结果。

参考答案

public class Demo2 {
    public static void main(String[] args) {
        //1.定义数组
        double[] arr = {12.9,53.54,75.0,99.1,3.14};
        //2.定义变量代表最小值
        double min = arr[0];
        //3.对数组遍历
        for (int i = 1; i < arr.length; i++) {
            //4.判断
            if(arr[i] < min){
                min = arr[i];
            }
        }
        //4.打印最小值
        System.out.println("最小值是" + min);
    }
}

题目3

创建一个长度为6的整数数组。请编写代码,随机生成六个0(包含)-100(不包含)之间的整数存放到数组中,然后计算出数组中所有元素的和并打印。

训练提示

1、数组有6个元素,那么就要生成6次随机数。
2、要求所有元素的和,首先需要定义变量来存储求和结果,然后再获取所有元素,依次累加就可以了。

解题方案

定义求和变量,遍历数组,累加元素值。

操作步骤

1、定义长度为6的int数组。
2、创建随机数Random类对象。
3、遍历数组,在循环中生成随机数并给数组元素赋值。
4、定义求和变量,初始化值为0。
5、遍历数组,获取每一个元素,累加。
6、遍历结束,打印结果。

参考答案

public class Demo3 {
    public static void main(String[] args) throws IOException {
        //1.创建随机数对象
        Random r = new Random();
        //2.定义长度为6的数组
        int[] arr = new int[6];
        //3.循环给数组赋值
        for (int i = 0; i < arr.length; i++) {
            int num = r.nextInt(100);
            arr[i] = num;
        }
        //4.定义求和变量
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum += arr[i];
        }
        //5.打印结果
        System.out.println("和是" + sum);
    }
}

题目4

现有一个整数数组,数组中的每个元素都是[0-9]之间的数字,从数组的最大索引位置开始到最小索引位置,依次表示整数的个位、十位、百位。。。依次类推。请编写程序计算,这个数组所表示的整数值。例如:

数组:{2, 1, 3, 5, 4}
表示的整数为:21354 // 注:是整数类型的两万一千三百五十四,不是字符串拼起来的。

训练提示

1、首先肯定要获取数组的每一个元素,需要遍历。

2、根据题目分析,个位元素本身就可以表示值,十位是元素乘以10来表示值,百位就是元素乘以100来表示值。。。它们之间有什么规律呢?从左至右,每一位所表示的值是下一位的十倍。根据此规律,怎样编写算法实现呢?

解题方案

遍历数组,与求和的思路相似,但算法不同,累加时需要将高位*10再累加。

操作步骤

1、定义int类型数组,使用静态初始化,将数字存入数组。
2、定义变量num用来存储最终的数值。
3、对数组进行遍历,遍历开始索引是0,结束索引是arr.length-1。
4、在循环中,把num的值乘10再加上元素的值,赋值给num变量。
5、循环上面的步骤,num的值即为所求,打印结果。

参考答案

public class Demo4 {
    public static void main(String[] args) {
        //1.定义数组
        int[] arr = {1, 3, 5, 7, 9};
        //2.定义变量存储最终的整数
        int num = 0;
        //3.对数组进行遍历
        for (int i = 0; i < arr.length; i++) {
            //4.计算,高位乘以10再加上当前位的值
            num = num * 10 + arr[i];
        }
        //5.打印结果
        System.out.println(num);
    }
}

题目5

定义一个数组来存储10个学生的成绩,例如:{72, 89, 65, 87, 91, 82, 71, 93, 76, 68}。计算并输出学生的平均成绩。

训练提示

1、要操作数组的每一个元素,需要遍历。
2、怎样求平均数?其实只要求和之后也就知道了平均数。

解题方案

使用数组的遍历操作完成。

操作步骤

  1. 定义保存学生成绩的数组arr。
  2. 定义变量sum用来存储和。
  3. 对数组进行遍历,求和。
  4. 和除以元素个数得到平均数。
  5. 打印结果。

参考答案

public class Demo5 {
    public static void main(String[] args) {
        //1.定义数组
        int[] arr = {72,89,65,87,91,82,71,93,76,68};
        //2.定义变量存储累加和
        double sum = 0;
        //3.遍历数组
        for (int i = 0; i < arr.length; i++) {
            sum += arr[i];
        }
        //4.通过和求出平均数
        double avg = sum / arr.length;
        //5.打印平均数
        System.out.println("平均值是" + avg);
    }
}

题目6(很难)

有一个数组,其中有十个元素从小到大依次排列 {12,14,23,45,66,68,70,77,90,91}。再通过键盘录入一个整数数字。要求:把数字放入数组序列中,生成一个新的数组,并且数组的元素依旧是从小到大排列的。执行效果如下:

请输入一个整数数字:
50
生成的新数组是:12 14 23 45 50 66 68 70 77 90 91

训练提示

  1. 数组的长度是不能改变的,所以增加一个元素需要定义一个新数组。
  2. 数组元素是从小到大排列的,如何找到新元素存放的位置?

解题方案

使用数组的遍历,用元素依次和数字作比较,找到正确的存放位置。

操作步骤

  1. 定义原数组arr,和一个比原数组长度大1的新数组brr。
  2. 通过键盘录入的方式输入变量num的值。
  3. 定义变量index用于记录num存放的索引位置。
  4. 遍历数组,小于或等于num的元素直接存放到原来的位置,大于num的元素往后移动一个位置。
  5. 存放结束之后,中间会空出一个位置,在遍历时用index记录这个位置。把num放在这个索引处。
  6. 最终遍历新数组打印结果。

参考答案

public class Demo6 {
    public static void main(String[] args) {        
		//1.定义长度为10的原数组
        int[] arr = {12,14,23,45,66,68,70,77,90,91};
        //2.定义长度为11的空数组
        int[] brr = new int[11];
        //3.键盘录入数组
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个整数数字");
        int num = sc.nextInt();
        //4.定义变量代表要插入的位置
        int index = 0;
        //5.循环遍历原数组
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] <= num) {
                //5.1如果元素小于等于要插入的数字,则直接存放
                brr[i] = arr[i];
                //5.2把i后面的位置记录下来
                index = i + 1;
            }else{
                //5.3如果元素大于要插入的数字,则往后一个位置存放
                brr[i+1] = arr[i];
            }
        }
        //6.index存储的就是要插入的位置
        brr[index] = num;
        //7.遍历新数组查看结果
        System.out.print("生成的新数组是:");
        for (int i = 0; i < brr.length; i++) {
            System.out.print(brr[i] + " ");
        }
    }
}

题目7(很难)

定义一个数组其中包含多个数字。用自己的方式最终实现,奇数放在数组的左边,偶数放在数组的右边。(可以创建其他数组,不必须在原数组中改变)

训练提示

  1. 要找奇数和偶数只需要判断对2取余即可。
  2. 找到一个奇数或偶数之后,把它放在哪个索引处?

解题方案

  1. 定义一个新数组。把原数组的奇数放在新数组的左边,把原数组的偶数放在新数组的右边。
  2. 不定义新数组。找到左边的偶数,和右边的奇数互换位置。
    以下以方案1为准

操作步骤

  1. 定义出原数组arr,其中包含多个数字。
  2. 定义新数组brr,和arr的长度一样。
  3. 定义变量left,初始值是0准备从左边放元素,定义变量right,初始值是arr.length-1准备从右边放元素。
  4. 对原数组arr进行遍历。
  5. 如果元素是奇数,则放在新数组brr的左边,left变量加一。
  6. 如果元素是偶数,则放在新数组brr的右边,right变量减一。
  7. 遍历新数组brr打印最终结果。

参考答案

public class Demo8 {
    public static void main(String[] args) {
        //1.定义原数组
        int[] arr = {12,23,34,45,67,78,11,22};
        //2.定义空数组
        int[] brr = new int[arr.length];
        //3.定义变量代表奇数要存放的位置
        int left = 0;
        //4.定义变量代表偶数要存放的位置
        int right = arr.length-1;
        //5.对原数组进行遍历
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] % 2 == 1){
                //5.1如果是奇数就往左边放
                brr[left] = arr[i];
                //5.2存放之后让索引向右移动
                left++;
            }else{
                //5.3如果是偶数就往右边放
                brr[right] = arr[i];
                //5.4存放之后让索引向左移动
                right--;
            }
        }
        //6.打印brr数组
        for (int i = 0; i < brr.length; i++) {
            System.out.print(brr[i] + " ");
        }
    }
}

JavaSE 06 作业讲解和答案

知识点

方法

题目1

定义一个方法,该方法能够找出两个小数中的较小值并返回。在主方法中调用方法进行测试。

训练提示

  1. 根据方法的功能描述,方法的参数应该是两个小数。
  2. 要返回两个小数的较小值,所以返回值类型也是小数类型。

解题方案

操作步骤

  1. 定义方法getMin(),方法的参数是double a ,double b。
  2. 在方法中对两个数字进行判断,返回较小值。
  3. 在主方法中调用getMin()方法并接受返回值。
  4. 在主方法中打印结果。

参考代码

public class Test1 {
    public static void main(String[] args) {
        System.out.println(getMin(2.1,3.7));
    }

    public static double getMin(double a, double b) {
        double min = a < b ? a : b;
        return min;
    }
}

题目2

定义一个方法,该方法能够找出三个整数中的最大值并返回。在主方法中调用方法测试执行。

训练提示

  1. 根据题意,方法中需要使用三个整数,所以方法参数应该是三个整数类型。
  2. 方法需要有返回值,返回值的类型也是整数类型。

解题方案

操作步骤

  1. 定义方法getMax(),方法的参数是三个int类型变量a,b,c,方法的返回值是int类型。
  2. 在方法中使用多分支if…else…或者三元运算符判断出最大值并返回。
  3. 在主方法中调用getMax()方法并接受返回值。
  4. 在主方法中打印结果。

参考代码

public class Test1 {
    public static void main(String[] args) {
        System.out.println(getMax(3,17,10));
    }

    public static int getMax(int a, int b, int c) {
       int temp = a > b ? a : b;
       int max = temp > c ? temp : c ;
       return max;
    }
}



public class Test2 {
    public static void main(String[] args) {
        System.out.println(getMax(3, 17, 10));
    }

    public static int getMax(int a, int b, int c) {
        if (a > b) {
            //a 大
            //拿着大的跟第三个数再比较
            if(a > c){
                return a;
            }else{
                return c;
            }
        }else{
            //b 大
            if(b > c){
                return b;
            }else{
                return c;
            }
        }

    }
}

题目3

在主方法中通过键盘录入三个整数。定义一个方法,方法接收三个整数变量,在方法中从大到小依次打印三个变量。执行效果如下:

请输入第一个整数:10
请输入第二个整数:30
请输入第三个整数:20
从大到小的顺序是: 30 20 10

训练提示

  1. 方法需要接受三个整数,那么方法的形式参数如何定义?
  2. 方法没有返回值的需求,返回值类型是什么?

解题方案

操作步骤

  1. 使用键盘录入分别录入三个整数。
  2. 定义method方法,方法的参数是三个int类型,方法的返回值类型是void。
    2.1. 定义整数变量max用于存储最大值,定义min变量用于存储最小值。
    2.2. 使用if…else…多分支判断语句或者三元运算符计算三个整数中的最大值并赋值给max。
    2.3. 使用if…else…多分支判断语句或者三元运算符计算三个整数中的最小值并赋值给min。
    2.4. 定义变量mid代表中间数,三个整数的和减去max,再减去min,就是中间数的值。
    2.5. 依次打印最大值,中间值和最小值。
  3. 在主方法中调用method方法,传入参数。

参考答案

public class Test5 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入第一个数");
        int num1 = sc.nextInt();
        System.out.println("请输入第二个数");
        int num2 = sc.nextInt();
        System.out.println("请输入第三个数");
        int num3 = sc.nextInt();
		
        //获取最大值
        int max = getMax(num1, num2, num3);
        //获取最小值
        int min = getMin(num1, num2, num3);
        //获取中间值
        int mid = (num1 + num2 + num3) - max - min;

        System.out.println(max + " " + mid + " " + min);
    }

    public static int getMax(int a, int b, int c) {
        int temp = a > b ? a : b;
        int max = temp > c ? temp : c;
        return max;
    }

    public static int getMin(int a, int b, int c) {
        int temp = a < b ? a : b;
        int min = temp < c ? temp : c;
        return min;
    }
}

题目4

数字是有绝对值的,负数的绝对值是它本身取反,非负数的绝对值是它本身。请定义一个方法,方法能够得到小数类型数字的绝对值并返回。请定义方法并测试。

训练提示

  1. 方法的功能是得到一个小数的绝对值,参数应该是一个小数类型。
  2. 绝对值需要被返回,返回值类型应该也是小数类型。

解题方案

操作步骤

  1. 定义一个小数变量num。
  2. 定义获取绝对值的方法,方法的参数是一个double类型,返回值类型是double。
  3. 在方法内部使用if…else…判断。
    3.1. 如果是负数则对负数取反并返回。
    3.2. 如果不是负数则直接返回数字本身。
  4. 在主方法中调用绝对值方法,传入参数num,并接受返回值。
  5. 打印返回的结果。

参考答案

本题有点意思,能否自己思考一下,不懂的可以在评论区或者群里问其他小伙伴哟~

题目5

键盘录入一个正整数

定义一个方法,该方法的功能是计算该数字是几位数字,并将位数返回

在main方法中打印该数字是几位数

演示格式如下:
(1)演示一:
请输入一个整数:1234
控制台输出:1234是4位数字
(2)演示二:
请输入一个整数:34567
控制台输出:34567是5位数字

训练提示

  1. 方法的功能是求有多少位,所以参数是一个,就是要计算的数据。
  2. 题目说要返回,所以方法必须有返回值。

解题方案

操作步骤

  1. 键盘录入一个正整数
  2. 定义获取位数的方法,方法的参数是一个int类型,返回值类型是int。
  3. 在方法内部使用循环获取有多少位
    可以不断的除以10,当结果为0时,循环结束。
    除以10的次数,就是数字的位数。
    举例:
    123 除以第一次10之后为:12
    除以第二次10之后为:1
    除以第三次10之后为:0
    表示123是三位数
  4. 在主方法中调用方法,传入参数,并接受返回值。
  5. 打印返回的结果。

参考答案

本题有点意思,能否自己思考一下,不懂的可以在评论区或者群里问其他小伙伴哟~

题目6

需求:

定义一个方法equals(int[] arr1,int[] arr2).

功能:

比较两个数组是否相等(长度和内容均相等则认为两个数组是相同的)

参考答案

本题有点意思,能否自己思考一下,不懂的可以在评论区或者群里问其他小伙伴哟~

题目7:

需求:

定义一个方法fill(int[] arr,int value)

功能:

将数组arr中的所有元素的值改为value

参考答案

本题有点意思,能否自己思考一下,不懂的可以在评论区或者群里问其他小伙伴哟~

题目8:(较难)

需求:

定义一个方法fill(int[] arr,int fromIndex,int toIndex,int value)

功能:

将数组arr中的元素从索引fromIndex开始到toIndex(不包含toIndex)对应的值改为value

参考答案

本题有点意思,能否自己思考一下,不懂的可以在评论区或者群里问其他小伙伴哟~

题目9:(较难)

需求:

定义一个方法copyOf(int[] arr, int newLength)

功能:

将数组arr中的newLength个元素拷贝到新数组中,并将新数组返回,从索引为0开始

参考答案

本题有点意思,能否自己思考一下,不懂的可以在评论区或者群里问其他小伙伴哟~

题目10:(较难)

需求:

定义一个方法copyOfRange(int[] arr,int from, int to)

功能:

将数组arr中从索引from(包含from)开始,到索引to结束(不包含to)的元素复制到新数组中,

并将新数组返回。

参考答案

本题有点意思,能否自己思考一下,不懂的可以在评论区或者群里问其他小伙伴哟~

题目11(很难)

一个大V直播抽奖,奖品是现金红包,分别有{2,588,888,1000,10000}五个奖金。请使用代码模拟抽奖,打印出每个奖项,奖项的出现顺序要随机且不重复。打印效果如下:(随机顺序,不一定是下面的顺序)

888元的奖金被抽出
588元的奖金被抽出
10000元的奖金被抽出
1000元的奖金被抽出
2元的奖金被抽出

训练提示

  1. 奖项要随机出现,但奖金不是连续的数字,不能被随机产生。能随机产生的只有数组的索引了,可以使用随机索引来代表随机元素。因为索引和元素是一一对应的,
  2. 哪些奖被抽过了,哪些奖没有被抽过,要定义一个数组来存放已经被抽过的奖项。
  3. 每个奖项只能被抽出一次,要写一个方法来控制奖项不重复。

解题方案

使用数组存放多个奖金,再使用另一个数组存放已经被抽过的奖金,使用方法来判断某个奖金是否已经被抽取过。

操作步骤

  1. 定义奖金的数组arr。
  2. 定义数组brr准备存放已经被抽过的奖金,两个数组长度相同。
  3. 定义一个变量index,用户代表数组brr的索引。
  4. 定义方法,判断数组中是否存在某数字,存在返回true,不存在返回false。
  5. 写一个while循环,如果index<arr.length则说明奖项没有被抽完继续抽取。
  6. 在循环中使用随机数产生一个随机索引i。
  7. 使用步骤4的方法判断brr数组中是否包含arr[i]奖金。
  8. 如果不包含,则打印arr[i]奖金,并且把它放入brr数组中代表已经被抽取过,同时index加一。

参考答案

本题为后一天的课堂练习,不会的小伙伴可以看视频哟~

JavaSE 07 作业讲解和答案

知识点

面向对象

题目1(完成)

定义手机类,手机有品牌(brand),价格(price)和颜色(color)三个属性,有打电话call()和sendMessage()两个功能。

请定义出手机类,类中要有空参、有参构造方法,set/get方法。

定义测试类,在主方法中使用空参构造创建对象,使用set方法赋值。

调用对象的两个功能,打印效果如下:

正在使用价格为3998元黑色的小米手机打电话....
正在使用价格为3998元黑色的小米手机发短信....

训练提示

  1. 类中的属性就是成员变量,类中的行为功能就是成员方法。
  2. 成员变量要被private修饰。

解题方案

操作步骤

  1. 定义手机类,手机类中定义String类型的品牌,int类型的价格,String类型的颜色,三个成员变量都用privice修饰。
  2. 提供空参构造方法和有参构造方法。
  3. 提供set/get方法。
  4. 编写打电话的成员方法,方法中对成员变量进行使用。
  5. 编写发短信的成员方法,方法中对成员变量进行使用。
  6. 在测试类中创建手机对象,使用set方法赋值,分别调用各个方法。

参考答案

题目2(完成)

定义一个女朋友类。女朋友的属性包含:姓名,身高,体重。行为包含:洗衣服wash(),做饭cook()。另外定义一个用于展示三个属性值的show()方法。请在测试类中通过有参构造方法创建对象并赋值,然后分别调用展示方法、洗衣服方法和做饭方法。打印效果如下:

我女朋友叫凤姐,身高155.0厘米,体重130.0斤
女朋友帮我洗衣服
女朋友给我做饭

训练提示

  1. 类中的属性就是成员变量,类中的行为功能就是成员方法。
  2. 成员变量要被private修饰。
  3. 展示方法的作用就是打印姓名、身高、体重三个成员变量的值。

解题方案

操作步骤

  1. 定义女朋友类,定义String类型姓名,double类型身高和double类型体重三个成员变量,三个成员变量都用privice修饰。
  2. 提供空参构造方法和有参构造方法。
  3. 提供set/get方法。
  4. 编写展示方法show(),方法打印三个成员变量的值。
  5. 编写洗衣服wash()方法,输出洗衣服的语句。
  6. 编写做饭cook()方法,输出做饭的语句。
  7. 在测试类中使用有参构造创建女友对象,分别调用各个方法。

参考答案

题目3(完成)

定义项目经理类Manager。属性:姓名name,工号id,工资salary,奖金bonus。行为:工作work()
定义程序员类Coder。属性:姓名name,工号id,工资salary。行为:工作work()

要求:

1.按照以上要求定义Manager类和Coder类,属性要私有,生成空参、有参构造,set和get方法
2.定义测试类,在main方法中创建该类的对象并给属性赋值(set方法或有参构造方法)
3.调用成员方法,打印格式如下:

工号为123基本工资为15000奖金为6000的项目经理张三正在努力的做着管理工作,分配任务,检查员工提交上来的代码.....
工号为135基本工资为10000的程序员李四正在努力的写着代码......

训练提示

  1. 类中的属性就是成员变量,类中的行为功能就是成员方法。
  2. 成员变量要被private修饰。
  3. 在工作work()方法中调用成员变量,输出成员变量的值。

解题方案

操作步骤

  1. 定义项目经理类,定义成员变量,构造方法,set和get方法,work方法,方法中根据打印格式输出id,salary,bonus的值。
  2. 定义程序猿类,定义成员变量,构造方法,set和get方法,work方法,方法中根据打印格式输出id和salary的值。
  3. 在测试类中使用有参构造创建项目经理对象并赋值,调用工作方法打印结果。
  4. 在测试类中使用有参构造创建程序员对象并赋值,调用工作方法打印结果。

参考答案

题目4(完成)

定义猫类Cat。属性:毛的颜色color,品种breed。行为:吃饭eat(),抓老鼠catchMouse()
定义狗类Dog。属性:毛的颜色color,品种breed。行为:吃饭(),看家lookHome()
要求:
1.按照以上要求定义Cat类和Dog类,属性要私有,生成空参、有参构造,set和get方法
2.定义测试类,在main方法中创建该类的对象并给属性赋值(set方法或有参构造方法)
3.调用成员方法,打印格式如下:

花色的波斯猫正在吃鱼.....
花色的波斯猫正在逮老鼠....
黑色的藏獒正在啃骨头.....
黑色的藏獒正在看家.....

训练提示

  1. 类中的属性就是成员变量,类中的行为功能就是成员方法。
  2. 成员变量要被private修饰。

解题方案

操作步骤

  1. 定义猫类,定义成员变量,构造方法,set和get方法,吃饭方法eat(),抓老鼠方法catchMouse(),方法中根据题目给出的格式输出成员变量的值。
  2. 定义狗类,定义成员变量,构造方法,set和get方法,吃饭方法eat(),看家方法lookHome(),方法中根据题目给出的格式输出成员变量的值。
  3. 在测试类中使用有参构造创建猫类对象,调用eat()方法和catchMouse()方法。
  4. 在测试类中使用有参构造创建狗类对象,调用eat()方法和lookHome()方法。

参考答案

JavaSE 08 作业讲解和答案

知识点

面向对象

题目1(完成)

定义手机类,手机有品牌(brand),价格(price)和颜色(color)三个属性,有打电话call()和sendMessage()两个功能。

请定义出手机类,类中要有空参、有参构造方法,set/get方法。

定义测试类,在主方法中使用空参构造创建对象,使用set方法赋值。

调用对象的两个功能,打印效果如下:

正在使用价格为3998元黑色的小米手机打电话....
正在使用价格为3998元黑色的小米手机发短信....

训练提示

  1. 类中的属性就是成员变量,类中的行为功能就是成员方法。
  2. 成员变量要被private修饰。

解题方案

操作步骤

  1. 定义手机类,手机类中定义String类型的品牌,int类型的价格,String类型的颜色,三个成员变量都用privice修饰。
  2. 提供空参构造方法和有参构造方法。
  3. 提供set/get方法。
  4. 编写打电话的成员方法,方法中对成员变量进行使用。
  5. 编写发短信的成员方法,方法中对成员变量进行使用。
  6. 在测试类中创建手机对象,使用set方法赋值,分别调用各个方法。

参考答案

public class Phone {
    private String brand;
    private double price;
    private String color;


    public Phone() {
    }

    public Phone(String brand, double price, String color) {
        this.brand = brand;
        this.price = price;
        this.color = color;
    }

    public String getBrand() {
        return brand;
    }


    public void setBrand(String brand) {
        this.brand = brand;
    }


    public double getPrice() {
        return price;
    }


    public void setPrice(double price) {
        this.price = price;
    }


    public String getColor() {
        return color;
    }


    public void setColor(String color) {
        this.color = color;
    }

    public void call() {
        System.out.println("正在使用价格为" + price + "元" + color + "色的" + brand + "手机打电话....");
    }

    public void sendMessage() {
        System.out.println("正在使用价格为" + price + "元" + color + "色的" + brand + "手机发短信....");
    }

}


public class Test {
    public static void main(String[] args) {
        Phone p = new Phone();
        p.setBrand("小米");
        p.setColor("黑");
        p.setPrice(3998);

        p.call();
        p.sendMessage();
    }
}

题目2(完成)

定义一个女朋友类。女朋友的属性包含:姓名,身高,体重。行为包含:洗衣服wash(),做饭cook()。另外定义一个用于展示三个属性值的show()方法。请在测试类中通过有参构造方法创建对象并赋值,然后分别调用展示方法、洗衣服方法和做饭方法。打印效果如下:

我女朋友叫凤姐,身高155.0厘米,体重130.0斤
女朋友帮我洗衣服
女朋友给我做饭

训练提示

  1. 类中的属性就是成员变量,类中的行为功能就是成员方法。
  2. 成员变量要被private修饰。
  3. 展示方法的作用就是打印姓名、身高、体重三个成员变量的值。

解题方案

操作步骤

  1. 定义女朋友类,定义String类型姓名,double类型身高和double类型体重三个成员变量,三个成员变量都用privice修饰。
  2. 提供空参构造方法和有参构造方法。
  3. 提供set/get方法。
  4. 编写展示方法show(),方法打印三个成员变量的值。
  5. 编写洗衣服wash()方法,输出洗衣服的语句。
  6. 编写做饭cook()方法,输出做饭的语句。
  7. 在测试类中使用有参构造创建女友对象,分别调用各个方法。

参考答案

public class GirlFriend {
    private String name;
    private double height;
    private double weight;


    public GirlFriend() {
    }

    public GirlFriend(String name, double height, double weight) {
        this.name = name;
        this.height = height;
        this.weight = weight;
    }

    /**
     * 获取
     *
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     *
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     *
     * @return height
     */
    public double getHeight() {
        return height;
    }

    /**
     * 设置
     *
     * @param height
     */
    public void setHeight(double height) {
        this.height = height;
    }

    /**
     * 获取
     *
     * @return weight
     */
    public double getWeight() {
        return weight;
    }

    /**
     * 设置
     *
     * @param weight
     */
    public void setWeight(double weight) {
        this.weight = weight;
    }

    public void wash() {
        System.out.println("女朋友帮我洗衣服");
    }

    public void cook() {
        System.out.println("女朋友给我做饭");
    }


    public void show() {
        System.out.println("我女朋友叫" + name + ",身高" + height + "厘米,体重" + weight + "斤");
    }
}


public class Test {
    public static void main(String[] args) {
        GirlFriend gf = new GirlFriend("凤姐",155.0,130);
        gf.show();
        gf.wash();
        gf.cook();

    }
}

题目3(完成)

定义项目经理类Manager。属性:姓名name,工号id,工资salary,奖金bonus。行为:工作work()
定义程序员类Coder。属性:姓名name,工号id,工资salary。行为:工作work()

要求:

1.按照以上要求定义Manager类和Coder类,属性要私有,生成空参、有参构造,set和get方法
2.定义测试类,在main方法中创建该类的对象并给属性赋值(set方法或有参构造方法)
3.调用成员方法,打印格式如下:

工号为123基本工资为15000奖金为6000的项目经理张三正在努力的做着管理工作,分配任务,检查员工提交上来的代码.....
工号为135基本工资为10000的程序员李四正在努力的写着代码......

训练提示

  1. 类中的属性就是成员变量,类中的行为功能就是成员方法。
  2. 成员变量要被private修饰。
  3. 在工作work()方法中调用成员变量,输出成员变量的值。

解题方案

操作步骤

  1. 定义项目经理类,定义成员变量,构造方法,set和get方法,work方法,方法中根据打印格式输出id,salary,bonus的值。
  2. 定义程序猿类,定义成员变量,构造方法,set和get方法,work方法,方法中根据打印格式输出id和salary的值。
  3. 在测试类中使用有参构造创建项目经理对象并赋值,调用工作方法打印结果。
  4. 在测试类中使用有参构造创建程序员对象并赋值,调用工作方法打印结果。

参考答案

public class Manager {
    //姓名name,工号id,工资salary,奖金bonus。行为:工作work()
    private String id;
    private String name;
    private double salary;
    private double bonus;


    public Manager() {
    }

    public Manager(String id, String name, double salary, double bonus) {
        this.id = id;
        this.name = name;
        this.salary = salary;
        this.bonus = bonus;
    }

    /**
     * 获取
     *
     * @return id
     */
    public String getId() {
        return id;
    }

    /**
     * 设置
     *
     * @param id
     */
    public void setId(String id) {
        this.id = id;
    }

    /**
     * 获取
     *
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     *
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     *
     * @return salary
     */
    public double getSalary() {
        return salary;
    }

    /**
     * 设置
     *
     * @param salary
     */
    public void setSalary(double salary) {
        this.salary = salary;
    }

    /**
     * 获取
     *
     * @return bonus
     */
    public double getBonus() {
        return bonus;
    }

    /**
     * 设置
     *
     * @param bonus
     */
    public void setBonus(double bonus) {
        this.bonus = bonus;
    }


    public void work() {
        System.out.println("工号为" + id + "基本工资为" + salary + "奖金为" + bonus + "的项目经理"+name+"正在努力的做着管理工作,分配任务,检查员工提交上来的代码.....");
    }
}



public class Coder {
    private String id;
    private String name;
    private double salary;


    public Coder() {
    }

    public Coder(String id, String name, double salary) {
        this.id = id;
        this.name = name;
        this.salary = salary;
    }

    /**
     * 获取
     * @return id
     */
    public String getId() {
        return id;
    }

    /**
     * 设置
     * @param id
     */
    public void setId(String id) {
        this.id = id;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return salary
     */
    public double getSalary() {
        return salary;
    }

    /**
     * 设置
     * @param salary
     */
    public void setSalary(double salary) {
        this.salary = salary;
    }

    public void work() {
        System.out.println("工号为" + id + "基本工资为" + salary + "的程序员"+name+"正在努力的写着代码......");
    }
}



public class Test {
    public static void main(String[] args) {
        Manager m = new Manager("123","张三",15000,6000);
        m.work();


        Coder c = new Coder("135","李四",10000);
        c.work();

    }
}

题目4(完成)

定义猫类Cat。属性:毛的颜色color,品种breed。行为:吃饭eat(),抓老鼠catchMouse()
定义狗类Dog。属性:毛的颜色color,品种breed。行为:吃饭(),看家lookHome()
要求:
1.按照以上要求定义Cat类和Dog类,属性要私有,生成空参、有参构造,set和get方法
2.定义测试类,在main方法中创建该类的对象并给属性赋值(set方法或有参构造方法)
3.调用成员方法,打印格式如下:

花色的波斯猫正在吃鱼.....
花色的波斯猫正在逮老鼠....
黑色的藏獒正在啃骨头.....
黑色的藏獒正在看家.....

训练提示

  1. 类中的属性就是成员变量,类中的行为功能就是成员方法。
  2. 成员变量要被private修饰。

解题方案

操作步骤

  1. 定义猫类,定义成员变量,构造方法,set和get方法,吃饭方法eat(),抓老鼠方法catchMouse(),方法中根据题目给出的格式输出成员变量的值。
  2. 定义狗类,定义成员变量,构造方法,set和get方法,吃饭方法eat(),看家方法lookHome(),方法中根据题目给出的格式输出成员变量的值。
  3. 在测试类中使用有参构造创建猫类对象,调用eat()方法和catchMouse()方法。
  4. 在测试类中使用有参构造创建狗类对象,调用eat()方法和lookHome()方法。

参考答案

public class Cat {
    private String color;
    private String breed;


    public Cat() {
    }

    public Cat(String color, String breed) {
        this.color = color;
        this.breed = breed;
    }

    /**
     * 获取
     *
     * @return color
     */
    public String getColor() {
        return color;
    }

    /**
     * 设置
     *
     * @param color
     */
    public void setColor(String color) {
        this.color = color;
    }

    /**
     * 获取
     *
     * @return breed
     */
    public String getBreed() {
        return breed;
    }

    /**
     * 设置
     *
     * @param breed
     */
    public void setBreed(String breed) {
        this.breed = breed;
    }

    public void eat() {
        System.out.println(color + "色的" + breed + "正在吃鱼.....");
    }

    public void catchMouse() {
        System.out.println(color + "色的" + breed + "正在逮老鼠....");
    }
}




public class Dog {
    private String color;
    private String breed;


    public Dog() {
    }

    public Dog(String color, String breed) {
        this.color = color;
        this.breed = breed;
    }

    /**
     * 获取
     * @return color
     */
    public String getColor() {
        return color;
    }

    /**
     * 设置
     * @param color
     */
    public void setColor(String color) {
        this.color = color;
    }

    /**
     * 获取
     * @return breed
     */
    public String getBreed() {
        return breed;
    }

    /**
     * 设置
     * @param breed
     */
    public void setBreed(String breed) {
        this.breed = breed;
    }

    public void eat() {
        System.out.println(color + "色的" + breed + "正在啃骨头.....");
    }

    public void lookHome() {
        System.out.println(color + "色的" + breed + "正在看家.....");
    }
}


public class Test {
    public static void main(String[] args) {
       Cat c = new Cat("花","波斯猫");
       c.eat();
       c.catchMouse();


       Dog d = new Dog("花","藏獒");
       d.eat();
       d.lookHome();

    }
}

JavaSE 09 作业讲解和答案

知识点

面向对象

题目1

题目描述:

定义数组存储3部汽车对象。

汽车的属性:品牌,价格,颜色。

创建三个汽车对象,数据通过键盘录入而来,并把数据存入到数组当中。

练习答案:

public class Car {
    private String brand;//品牌
    private int price;//价格
    private String color;//颜色


    public Car() {
    }

    public Car(String brand, int price, String color) {
        this.brand = brand;
        this.price = price;
        this.color = color;
    }

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }
}



public class CarTest {
    public static void main(String[] args) {
        //1.创建一个数组用来存3个汽车对象
        Car[] arr = new Car[3];

        //2.创建汽车对象,数据来自于键盘录入
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < arr.length; i++) {
            //创建汽车的对象
            Car c = new Car();
            //录入品牌
            System.out.println("请输入汽车的品牌");
            String brand = sc.next();
            c.setBrand(brand);
            //录入价格
            System.out.println("请输入汽车的价格");
            int price = sc.nextInt();
            c.setPrice(price);
            //录入颜色
            System.out.println("请输入汽车的颜色");
            String color = sc.next();
            c.setColor(color);

            //把汽车对象添加到数组当中
            arr[i] = c;
        }

        //3.遍历数组
        for (int i = 0; i < arr.length; i++) {
            Car car = arr[i];
            System.out.println(car.getBrand() + ", " + car.getPrice() + ", " + car.getColor());
        }
    }
}

题目2

题目描述:

定义数组存储3部手机对象。

手机的属性:品牌,价格,颜色。

要求,计算出三部手机的平均价格

练习答案:

public class Phone {
    private String brand;//品牌
    private int price;//价格
    private String color;//颜色

    public Phone() {
    }

    public Phone(String brand, int price, String color) {
        this.brand = brand;
        this.price = price;
        this.color = color;
    }

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }
}


public class PhoneTest {
    public static void main(String[] args) {
        //1.创建一个数组
        Phone[] arr = new Phone[3];

        //2.创建手机的对象
        Phone p1 = new Phone("小米",1999,"白色");
        Phone p2 = new Phone("华为",4999,"蓝色");
        Phone p3 = new Phone("魅族",3999,"红色");

        //3.把手机对象添加到数组当中
        arr[0] = p1;
        arr[1] = p2;
        arr[2] = p3;

        //4.获取三部手机的平均价格
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            //i 索引  arr[i] 元素(手机对象)
            Phone phone = arr[i];
            sum = sum + phone.getPrice();
        }

        //5.求平均值
        //数据能不写死,尽量不写死
        //int avg = sum / arr.length;

        double avg2 = sum * 1.0 / arr.length;

        System.out.println(avg2);//3665.6666666666665
    }
}

题目3:

题目描述:

定义数组存储4个女朋友的对象

女朋友的属性:姓名、年龄、性别、爱好

要求1:计算出四女朋友的平均年龄

要求2:统计年龄比平均值低的女朋友有几个?并把她们的所有信息打印出来。

练习答案:

public class GirlFriend {
    private String name;//姓名
    private int age;//年龄
    private String gender;//性别
    private String hobby;//爱好


    public GirlFriend() {
    }

    public GirlFriend(String name, int age, String gender, String hobby) {
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.hobby = hobby;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getHobby() {
        return hobby;
    }

    public void setHobby(String hobby) {
        this.hobby = hobby;
    }
}

public class GirlFriendTest {
    public static void main(String[] args) {
        //1.定义数组存入女朋友的对象
        GirlFriend[] arr = new GirlFriend[4];

        //2.创建女朋友对象
        GirlFriend gf1 = new GirlFriend("小诗诗",18,"萌妹子","吃零食");
        GirlFriend gf2 = new GirlFriend("小丹丹",19,"萌妹子","玩游戏");
        GirlFriend gf3 = new GirlFriend("小惠惠",20,"萌妹子","看书,学习");
        GirlFriend gf4 = new GirlFriend("小莉莉",21,"憨妹子","睡觉");

        //3.把对象添加到数组当中
        arr[0] = gf1;
        arr[1] = gf2;
        arr[2] = gf3;
        arr[3] = gf4;

        //4.求和
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            //i 索引 arr[i] 元素(女朋友对象)
            GirlFriend gf = arr[i];
            //累加
            sum = sum + gf.getAge();
        }

        //5.平均值
        int avg = sum / arr.length;

        //6.统计年龄比平均值低的有几个,打印他们的信息
        int count = 0;
        for (int i = 0; i < arr.length; i++) {
            GirlFriend gf = arr[i];
            if(gf.getAge() < avg){
                count++;
                System.out.println(gf.getName() + ", " + gf.getAge() + ", " + gf.getGender() + ", " + gf.getHobby());
            }
        }

        System.out.println(count + "个");
    }
}

题目4:

题目描述:

定义数组存储3个学生对象。

学生的属性:学号,姓名,年龄。

要求1:添加的时候需要进行学号的唯一性判断。

要求2:添加完毕之后,遍历所有学生信息。

要求3:通过id删除学生信息

如果存在,则删除,如果不存在,则提示删除失败。

要求4:删除完毕之后,遍历所有学生信息。

要求5:id为2的学生,年龄+1岁

练习答案:

public class Student {
    private int id;
    private String name;
    private int age;

    public Student() {
    }

    public Student(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}



public class Test {
    public static void main(String[] args) {
        /*定义一个长度为3的数组,数组存储1~3名学生对象作为初始数据,学生对象的学号,姓名各不相同。
        学生的属性:学号,姓名,年龄。
        要求1:再次添加一个学生对象,并在添加的时候进行学号的唯一性判断。
        要求2:添加完毕之后,遍历所有学生信息。
		*/

        //1.创建一个数组用来存储学生对象
        Student[] arr = new Student[3];
        //2.创建学生对象并添加到数组当中
        Student stu1 = new Student(1, "zhangsan", 23);
        Student stu2 = new Student(2, "lisi", 24);

        //3.把学生对象添加到数组当中
        arr[0] = stu1;
        arr[1] = stu2;


        //要求1:再次添加一个学生对象,并在添加的时候进行学号的唯一性判断。
        Student stu4 = new Student(1, "zhaoliu", 26);

        //唯一性判断
        //已存在 --- 不用添加
        //不存在 --- 就可以把学生对象添加进数组
        boolean flag = contains(arr, stu4.getId());
        if(flag){
            //已存在 --- 不用添加
            System.out.println("当前id重复,请修改id后再进行添加");
        }else{
            //不存在 --- 就可以把学生对象添加进数组
            //把stu4添加到数组当中
            //1.数组已经存满 --- 只能创建一个新的数组,新数组的长度 = 老数组 + 1
            //2.数组没有存满 --- 直接添加
            int count = getCount(arr);
            if(count == arr.length){
                //已经存满
                //创建一个新的数组,长度 = 老数组的长度 + 1
                //然后把老数组的元素,拷贝到新数组当中
                Student[] newArr = creatNewArr(arr);
                //把stu4添加进去
                newArr[count] = stu4;

                //要求2:添加完毕之后,遍历所有学生信息。
                printArr(newArr);

            }else{
                //没有存满
                //[stu1,stu2,null]
                //getCount获取到的是2,表示数组当中已经有了2个元素
                //还有一层意思:如果下一次要添加数据,就是添加到2索引的位置
                arr[count] = stu4;
                //要求2:添加完毕之后,遍历所有学生信息。
                printArr(arr);

            }
        }
    }


    public static void printArr(Student[] arr){
        for (int i = 0; i < arr.length; i++) {
            Student stu = arr[i];
            if(stu != null){
                System.out.println(stu.getId() + ", " + stu.getName() + ", " + stu.getAge());
            }
        }
    }

    //创建一个新的数组,长度 = 老数组的长度 + 1
    //然后把老数组的元素,拷贝到新数组当中
    public static Student[] creatNewArr(Student[] arr){
        Student[] newArr = new Student[arr.length + 1];

        //循环遍历得到老数组中的每一个元素
        for (int i = 0; i < arr.length; i++) {
            //把老数组中的元素添加到新数组当中
            newArr[i] = arr[i];
        }

        //把新数组返回
        return newArr;

    }

    //定义一个方法判断数组中已经存了几个元素
    public static int getCount(Student[] arr){
        //定义一个计数器用来统计
        int count = 0;
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] != null){
                count++;
            }
        }
        //当循环结束之后,我就知道了数组中一共有几个元素
        return count;
    }


    //1.我要干嘛?  唯一性判断
    //2.我干这件事情,需要什么才能完成? 数组 id
    //3.调用处是否需要继续使用方法的结果? 必须返回
    public static boolean contains(Student[] arr, int id) {
        for (int i = 0; i < arr.length; i++) {
            //依次获取到数组里面的每一个学生对象
            Student stu = arr[i];
            if(stu != null){
                //获取数组中学生对象的id
                int sid = stu.getId();
                //比较
                if(sid == id){
                    return true;
                }
            }
        }

        //当循环结束之后,还没有找到一样的,那么就表示数组中要查找的id是不存在的。
        return false;
    }


}



ublic class Test3 {
    public static void main(String[] args) {
        /*定义一个长度为3的数组,数组存储1~3名学生对象作为初始数据,学生对象的学号,姓名各不相同。
        学生的属性:学号,姓名,年龄。

        要求3:通过id删除学生信息
            如果存在,则删除,如果不存在,则提示删除失败。
        要求4:删除完毕之后,遍历所有学生信息。
		*/


        //1.创建一个数组用来存储学生对象
        Student[] arr = new Student[3];
        //2.创建学生对象并添加到数组当中
        Student stu1 = new Student(1, "zhangsan", 23);
        Student stu2 = new Student(2, "lisi", 24);
        Student stu3 = new Student(3, "wangwu", 25);

        //3.把学生对象添加到数组当中
        arr[0] = stu1;
        arr[1] = stu2;
        arr[2] = stu3;

        /*要求3:通过id删除学生信息
        如果存在,则删除,如果不存在,则提示删除失败。*/

        //要找到id在数组中对应的索引
        int index = getIndex(arr, 2);
        if (index >= 0){
            //如果存在,则删除
            arr[index] = null;
            //遍历数组
            printArr(arr);
        }else{
            //如果不存在,则提示删除失败
            System.out.println("当前id不存在,删除失败");
        }
    }



    //1.我要干嘛?  找到id在数组中的索引
    //2.我需要什么? 数组 id
    //3.调用处是否需要继续使用方法的结果? 要
    public static int getIndex(Student[] arr , int id){
        for (int i = 0; i < arr.length; i++) {
            //依次得到每一个学生对象
            Student stu = arr[i];
            //对stu进行一个非空判断
            if(stu != null){
                int sid = stu.getId();
                if(sid == id){
                    return i;
                }
            }
        }

        //当循环结束之后,还没有找到就表示不存在
        return -1;
    }

    public static void printArr(Student[] arr){
        for (int i = 0; i < arr.length; i++) {
            Student stu = arr[i];
            if(stu != null){
                System.out.println(stu.getId() + ", " + stu.getName() + ", " + stu.getAge());
            }
        }
    }
}


public class Test4 {
    public static void main(String[] args) {
        /*定义一个长度为3的数组,数组存储1~3名学生对象作为初始数据,学生对象的学号,姓名各不相同。
        学生的属性:学号,姓名,年龄。

        要求5:查询数组id为“2”的学生,如果存在,则将他的年龄+1岁*/


        //1.创建一个数组用来存储学生对象
        Student[] arr = new Student[3];
        //2.创建学生对象并添加到数组当中
        Student stu1 = new Student(1, "zhangsan", 23);
        Student stu2 = new Student(2, "lisi", 24);
        Student stu3 = new Student(3, "wangwu", 25);

        //3.把学生对象添加到数组当中
        arr[0] = stu1;
        arr[1] = stu2;
        arr[2] = stu3;


        //4.先要找到id为2的学生对于的索引
        int index = getIndex(arr, 2);

        //5.判断索引
        if(index >= 0){
            //存在, 则将他的年龄+1岁
            Student stu = arr[index];
            //把原来的年龄拿出来
            int newAge = stu.getAge() + 1;
            //把+1之后的年龄塞回去
            stu.setAge(newAge);
            //遍历数组
            printArr(arr);
        }else{
            //不存在,则直接提示
            System.out.println("当前id不存在,修改失败");
        }


    }

    //1.我要干嘛?  找到id在数组中的索引
    //2.我需要什么? 数组 id
    //3.调用处是否需要继续使用方法的结果? 要
    public static int getIndex(Student[] arr , int id){
        for (int i = 0; i < arr.length; i++) {
            //依次得到每一个学生对象
            Student stu = arr[i];
            //对stu进行一个非空判断
            if(stu != null){
                int sid = stu.getId();
                if(sid == id){
                    return i;
                }
            }
        }

        //当循环结束之后,还没有找到就表示不存在
        return -1;
    }

    public static void printArr(Student[] arr){
        for (int i = 0; i < arr.length; i++) {
            Student stu = arr[i];
            if(stu != null){
                System.out.println(stu.getId() + ", " + stu.getName() + ", " + stu.getAge());
            }
        }
    }
}

JavaSE 10 作业讲解和答案

今日作业:

题目1

完成课堂上所有练习哦

题目2

键盘输入任意字符串,打乱里面的内容

训练目标

随机数类Random相关API、字符串相关API

训练提示

1、字符串是不可变的

2、如果要变化需要变成字符数组

3、调整完毕之后再变回字符串

参考答案

public class Test {
    public static void main(String[] args) {
       //键盘录入字符串
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String str = sc.next();

        //把字符串变成字符数组
        char[] arr = str.toCharArray();

        //将数组里面的内容打乱
        //打乱的核心要素:
        //遍历数组得到每一个元素与每一个随机索引处的数据进行交换
        Random r = new Random();
        for (int i = 0; i < arr.length; i++) {
            int index = r.nextInt(arr.length);
            char temp = arr[i];
            arr[i] = arr[index];
            arr[index] = temp;
        }

        //将字符数组再变回字符串
        String newStr = new String(arr);

        //输出打印
        System.out.println(newStr);

    }
}

题目3

训练目标:

生成验证码

内容:可以是小写字母,也可以是大写字母,还可以是数字

规则:

长度为5

内容中是四位字母,1位数字。

其中数字只有1位,但是可以出现在任意的位置。

参考答案

public class Test {
    public static void main(String[] args) {
        //1.大写字母和小写字母都放到数组当中
        char[] chs = new char[52];
        for (int i = 0; i < chs.length; i++) {
            //ASCII码表
            if(i <= 25){
                //添加小写字母
                chs[i] = (char)(97 + i);
            }else{//27
                //添加大写字母
                // A --- 65
                chs[i] = (char)(65 + i - 26);
            }
        }

        //定义一个字符串类型的变量,用来记录最终的结果
        String code = "";

        //2.随机抽取4次
        //随机抽取数组中的索引
        Random r = new Random();
        for (int i = 0; i < 4; i++) {
            int randomIndex = r.nextInt(chs.length);
            //利用随机索引,获取对应的元素
            //System.out.println(chs[randomIndex]);
            code = code + chs[randomIndex];
        }
        //System.out.println(result);
        //3.随机抽取一个数字0~9
        int number = r.nextInt(10);
        //生成最终的结果
        code = code + number;


        //4.变成字符数组打乱数据
        char[] arr = code.toCharArray();
        //将数组里面的内容打乱
        for (int i = 0; i < arr.length; i++) {
            int index = r.nextInt(arr.length);
            char temp = arr[i];
            arr[i] = arr[index];
            arr[index] = temp;
        }

        //将字符数组再变回字符串
        String result = new String(arr);

        //输出打印
        System.out.println(result);

    }
}

题目4

请编写程序,由键盘录入一个字符串,统计字符串中英文字母和数字分别有多少个。比如:Hello12345World中字母:10个,数字:5个。

训练目标

字符串遍历

训练提示

1、键盘录入一个字符串,用 Scanner 实现
2、要统计两种类型的字符个数,需定义两个统计变量,初始值都为0
3、遍历字符串,得到每一个字符
4、判断该字符属于哪种类型,然后对应类型的统计变量+1,判断字母时需要考虑大小写,条件比较复杂,怎样做才能使判断更简单呢?

训练步骤

1、创建键盘录入Scanner对象,使用nextLine方法接收输入的字符串。

2、为方便后续判断,使用String的toLowerCase方法,将字符串中的字符都转为小写。

3、需定义两个统计变量,初始值都为0

4、遍历字符串,得到每一个字符

5、判断该字符属于哪种类型,然后对应类型的统计变量+1,次数判断英文字母时只需判断小写即可。

参考答案

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        //键盘录入一个字符串,用 Scanner 实现
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        String line = sc.nextLine();
        // 为方便统计,将字符串中的字母都转为小写
        line = line.toLowerCase();
        //要统计两种类型的字符个数,需定义两个统计变量,初始值都为0
        int letterCount = 0;
        int numberCount = 0;
        // 遍历字符串,得到每一个字符
        for(int i=0; i<line.length(); i++) {
            char ch = line.charAt(i);
            // 判断该字符属于哪种类型,然后对应类型的统计变量+1
            if (ch >= 'a' && ch <= 'z') {
                letterCount++;
            } else if (ch >= '0' && ch <= '9') {
                numberCount++;
            }
        }
        //输出两种类型的字符个数
        System.out.println("英文字母:" + letterCount + "个");
        System.out.println("数字:" + numberCount + "个");
    }
}

题目5

请定义一个方法用于判断一个字符串是否是对称的字符串,并在主方法中测试方法。例如:“abcba”、"上海自来水来自海上"均为对称字符串。

训练目标

字符串的反转功能,判断是否相等功能

训练提示

1、判断是否对称,方法的返回值是什么类型?参数列表是什么?

2、怎样判断对称呢?如果可以将字符串反转,反转后发现跟原来的字符串完全一样,不就可以判断出来了吗,那么哪个类有字符串的反转功能呢?

训练步骤

1、定义方法,返回值类型为boolean,参数列表为String类型的一个参数。

2、将字符串转换为StringBuilder类型,调用StringBuilder的reverse()方法将字符串反转。

3、将反转后的字符串再转回String类型,并与原字符串比较,如果相等,返回true,否则返回false

4、在主方法中,定义一个字符串,调用方法测试结果。

参考答案

public class Test {
    public static void main(String[] args) {
        String str = "上海自来水来自海上";
        System.out.println(isSym(str));
    }

    public static boolean isSym(String str) {
        // 为了程序的健壮,如果传递的是空值,返回false
        if (str == null) {
            return false;
        }
        // 转换为StringBuilder
        StringBuilder sb = new StringBuilder(str);
        // 反转,再转成String
        String reStr = sb.reverse().toString();
        // 比较与原字符串是否相等
        // 相等返回true,不相等返回false,正好与equals的返回值一致,直接返回即可。
        return reStr.equals(str);
    }
}

题目6

我国的居民身份证号码,由由十七位数字本体码和一位数字校验码组成。请定义方法判断用户输入的身份证号码是否合法,并在主方法中调用方法测试结果。规则为:号码为18位,不能以数字0开头,前17位只可以是数字,最后一位可以是数字或者大写字母X。

训练目标

字符串的遍历、判断

训练提示

1、要判断字符串是否符合规则,方法的返回值类型是什么?参数列表是什么?

2、使用String的API,对每种不符合条件的情况作出判断,一旦发现不符合条件就可以结束方法的执行,返回结果了。

3、在主方法中创建键盘录入,调用方法,输入各种数据测试结果。

训练步骤

1、定义方法,返回值类型为boolean表示是否合法,参数列表为String类型的id,表示要判断的数据。

2、对每种不符合条件的情况作出判断

2.1、如果字符串长度不是18,返回false。

2.2、如果字符串以数字"0"开头,返回false。

2.3、遍历字符串,获取每一位字符,判断前17位,如果不是数字,返回false,判断最后一位如果不是数字或者X,返回false

2.4、所以的不符合条件都筛选完成,返回true

3、在主方法中创建键盘录入Scanner对象,调用nextLine()方法,获取用户输入,调用方法,传递参数,查看结果。要多运行几次,判断各种不符合条件的数据。

参考答案

import java.util.Scanner;
public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入身份证号:");
        String id = sc.nextLine();
        System.out.println(check(id));
    }

    // 返回值boolean类型,表示是否符合规则。参数列表:需要判断的字符串
    public static boolean check(String id) {
        // 如果传递了空参数,返回false
        if (id == null) {
            return false;
        }
        // 如果是数字0开头,返回false
        if (id.startsWith("0")) {
            return false;
        }
        // 如果不是18位,返回false
        if (id.length() != 18) {
            return false;
        }
        // 遍历判断每一位
        for (int i = 0; i < id.length(); i++) {
            char ch = id.charAt(i);
            // 前17位都是数字,最后一位可以是数字或者大写字母X
            if (i == id.length() - 1) { // 最后一位
                if (ch < '0' || ch > '9' && ch != 'X') { // 不是数字或者X
                    return false;
                }
            } else { // 其他位
                if (ch < '0' || ch > '9') { // 不是数字
                    return false;
                }
            }
        }
        // 所有的规则都符合,返回true
        return true;
    }
}

题目7

定义一个方法,把 int 数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,并在控制台输出结果。

要求:

1、如果传递的参数为空,返回null

2、如果传递的数组元素个数为0,返回[]

3、如果数组为int[] arr = {1,2,3}; ,执行方法后的输出结果为:[1, 2, 3]

训练目标

字符串的拼接

训练提示

1、定义方法的返回值是什么?参数列表是什么?

2、如果不做判断就对数组进行遍历,那么如果数组对象为空,会报出异常,怎样避免空指针异常呢?

3、拼接字符串必然涉及到频繁改变,该采用可变的字符序列StringBuilder比较好

4、遍历数组,按照题目格式拼接数组中的元素。

5、将字符串返回

6、在主方法中定义数组,并调用方法,打印结果

训练步骤

1、定义方法返回值类型:String,参数:int[] arr

2、判断对象如果为null,直接返回null

3、创建StringBuilder对象

4、遍历数组,按照要求进行拼接数组元素,如果是不是最后一个元素,还要拼接逗号和空格

5、将StringBuilder转为String返回

6、在主方法中定义数组,并调用方法,打印结果

参考答案1

public class Test {
    public static void main(String[] args) {
        // 定义一个 int 类型的数组,用静态初始化完成数组元素的初始化
        int[] arr = {1, 2, 3};
        // 调用方法,输出结果
        System.out.println(arrayToString(arr));
    }

    /*定义一个方法,用于把 int 数组中的数据按照指定格式拼接成一个字符串返回
		返回值类型:String
		参数:int[] arr
     */
    public static String arrayToString(int[] arr) {
        // 健壮性判断
        if (arr == null) {
            return null;
        }
        //在方法中用 StringBuilder 按照要求进行拼接,并把结果转成 String 返回
        StringBuilder sb = new StringBuilder();
        sb.append("[");
        for (int i = 0; i < arr.length; i++) {
            // 拼接元素
            sb.append(arr[i]);
            // 如果不是最后一个元素,再拼接逗号和空格
            if (i != arr.length - 1) {
                sb.append(", ");
            }
        }
        sb.append("]");
        return sb.toString();
    }
}

参考答案2:

public class Test {
    public static void main(String[] args) {
        // 定义一个 int 类型的数组,用静态初始化完成数组元素的初始化
        int[] arr = {1, 2, 3};
        // 调用方法,输出结果
        System.out.println(arrayToString(arr));
    }


    public static String arrayToString(int[] arr) {
        // 健壮性判断
        if (arr == null) {
            return null;
        }
        //在方法中用 StringBuilder 按照要求进行拼接,并把结果转成 String 返回
        StringJoiner sj = new StringJoiner(", ","[","]");
        for (int i = 0; i < arr.length; i++) {
            sj.add(arr[i] + "");
        }
        return sj.toString();
    }
}

题目8(扩展)

在String类的API中,有如下两个方法:

// 查找参数字符串str在调用方法的字符串中第一次出现的索引,如果不存在,返回-1
public int indexOf(String str)

// 截取字符串,从索引beginIndex(包含)开始到字符串的结尾
public String substring(int beginIndex)

请仔细阅读API中这两个方法的解释,完成如下需求。

现有如下文本:“Java语言是面向对象的,Java语言是健壮的,Java语言是安全的,Java是高性能的,Java语言是跨平台的”。请编写程序,统计该文本中"Java"一词出现的次数。

训练目标

String类API的灵活使用

训练提示

1、要找的子串是否存在,如果存在获取其出现的位置。这个可以使用indexOf完成。
2、如果找到了,那么就记录出现的位置并在剩余的字符串中继续查找该子串,而剩余字符串的起始位是出现位置再加上子串的长度。

3、以此类推,通过循环完成查找,如果找不到就是-1,每次找到用计数器记录次数。

训练步骤

1、定义方法,返回值int表示次数,参数列表两个字符串,第一个表示在哪个字符串中查找,第二个表示要查找的目标子串

2、定义统计变量表示次数。

3、定义索引变量,表示每次找到子串出现的索引。

4、定义循环,判断条件为在字符串中找到了目标子串,使用indexOf实现。

5、如果找到的索引不是-1,在循环中,统计变量累加。

6、把查找过的部分剪切掉,从找到的索引+子串长度的位置开始截取,使用substring实现。

7、将统计变量返回

8、在主方法中,定义字符串表示题目中的文本,定义字符串表示要查找的子串,调用方法,获取结果。

参考答案1

public class Test {
    public static void main(String[] args) {
        String str = "Java语言是面向对象的,Java语言是健壮的,Java语言是安全的,Java是高性能的,Java语言是跨平台的";
        String tar = "Java";
        // 调用方法并输出
        System.out.println(search(str, tar));

    }
    // 返回值int表示次数,参数列表str表示在哪个字符串中查找,tar表示要查找的目标子串
    public static int search(String str, String tar) {
        // 定义统计变量表示次数
        int count = 0;
        // 定义索引变量,表示每次找到子串出现的索引
        int index = -1;
        // 定义循环,判断条件为在字符串中找到了目标子串
        while ((index = str.indexOf(tar)) != -1) { // 将找到的索引赋值给变量并判断
            // 次数累加
            count++;
            // 把查找过的部分剪切掉,从找到的索引+子串长度的位置开始截取。
            str = str.substring(index + tar.length());
        }
        return count;
    }
}

参考答案2

public class Test {
    public static void main(String[] args) {
        String str = "Java语言是面向对象的,Java语言是健壮的,Java语言是安全的,Java是高性能的,Java语言是跨平台的";
        String tar = "Java";
        // 调用方法并输出
        System.out.println(search(str, tar));

    }

    // 替换之后求长度差
    public static int search(String str, String tar) {
        String newStr = str.replace(tar, "");
        int count = (str.length() - newStr.length()) / tar.length();
        return count;

    }
}

JavaSE 11 作业讲解和答案

JavaSE 12 作业讲解和答案

JavaSE 13 作业讲解和答案

JavaSE 14 作业讲解和答案

JavaSE 15 作业讲解和答案

JavaSE 16 作业讲解和答案

JavaSE 17 作业讲解和答案

JavaSE 18 作业讲解和答案

JavaSE 19 作业讲解和答案