07_Java基础语法_第7天(练习)

时间:2024-04-06 21:28:24

7 Java基础语法

今日内容介绍

循环练习

数组方法练习

第1章 循环练习

1.1 编写程序求 1+3+5+7+……+99 的和值。

题目分析:

通过观察发现,本题目要实现的奇数(范围1-100之间)的累加和。

1. 为了记录累加和的值,我们需要定义一个存储累加和的变量

2. 我们要获取到1-100范围内的数

3. 判断当前数是否为奇数,是奇数,完成累加和操作

4. 累加完毕后,最终显示下累加和的值

解题步骤:

1. 定义一个用来记录累加和的变量

2. 使用for循环语句,完成1-100之间每个数的获取

3. 使用if条件语句,判断当前数是否是奇数,是奇数,进行累加和操作

4. 使用输出语句,打印累加和变量的值

 

代码如下:

public class Test01 {

public static void main(String[] args) {

int sum = 0;

for (int i = 0; i < 100; i++) {

if (i%2==1) {

sum += i;

}

}

System.out.println("累加和的值 " + sum);

}

}

 

1.2 输出所有的水仙花数,所谓水仙花数是指一个数3位数,其每位数字立方和等于其本身,如153 = 1*1*1 + 3*3*3 + 5*5*5

153 % 10 = 3  //个位

153 / 10 % 10 = 5  //十位153 / 10 = 15,  15%10 = 5

153 / 100 % 10 = 1 //百位

题目分析:

通过观察发现,本题目要实现打印符合要求的数字(即水仙花数)。

1. 明确什么样的数就是水仙花数。水仙花数是指一个3位数(100-999之间),其每位数字立方之和等于该3位数本身。如153 = 1*1*1 + 3*3*3 + 5*5*5

 3位数本身 = 百位数立方 + 十位数立方 + 个位数立方;

2. 获取水仙花范围内的所有3位数(100-999之间的每个3位数)

3. 判断该3位数是否满足水仙花数,满足,打印该3位数

解题步骤:

1. 使用for循环,得到100-999之间的每个3位数

2. 获取3位数中百位数字、十位数字、个位数字

3. 使用if条件语句,判断该3位数是否满足水仙花数,满足,使用输出语句,打印该3位数

代码如下:

public class Test02 {

public static void main(String[] args) {

for (int i = 100; i < 1000; i++) {

int bai = i/100%10;

int shi = i/10%10;

int ge = i%10;

if (i == bai*bai*bai + shi*shi*shi + ge*ge*ge) {

System.out.println(i);

}

}

}

}

 

1.3 利用for循环打印ABCDEFG...XYZ26个大写字母与26个小写字母

题目分析:

通过观察发现,本题目要实现打印26个大写字母、26个小写字母

1. 一共26个大小写字母,那么,可以考虑循环26次。在每次循环中,完成指定字母的大小写打印

2. 找出ABCDEFG…XYZ这些字母之间的变化规律

通过ASCII表发现,后面的字母比它前面的字母,ASCII值大1

下一个字母 = 上一个字母 + 1

如: A B C D

65 66 67 68

3. 在每次循环中打印上一个字母大小写,并指定下一个字母

解题步骤:

1. 定义初始化大写变量,值为’A’ 初始化小写变量,值为’a’

2. 使用for循环,进行26次循环

3. 在每次循环中,打印大写字母、小写字母。

每次打印完成后,更新大写字母值、小写字母值

代码如下:

public class Test04 {

public static void main(String[] args) {

char da = 'A';

char xiao = 'a';

for (int i = 0; i < 26; i++) {

System.out.println("大写字母 "+da+" ,小写字母 "+xiao);

da++; //更新大写字母值

xiao++; //更新小写字母值

}

}

}

1.4 利用for循环打印 9*9 ?

如:

  1*1=1

1*2=2  2*2=4

1*3=3  2*3=6  3*3=9

….

 

题目分析:

通过观察发现,如果把1*1=1这样的内容 看做一颗*的话,那么打印结果就成了如下效果:

*

**

***

这样,就是打印9行星,每行打印星的个数与当前行数相等。

再观察“1*3=3 2*3=6 3*3=9”得出它们如下的变化规律:

每行第n+"*"+ 行号 +"="+ 每行第n* 行号

:1+"*"+  2    +"="+   1*2; // 相当于1*2=2

       2+"*"+  2    +"="+   2*2; // 相当于2*2=4

 

解题步骤:

1. 定义一个外层for循环,初始值从1开始,循环9次。用来控制打印的行数

2. 在外层for循环内部,定义一个for循环,初始值从1开始,循环次数与当前行数相等。用来完成每行打印指定次数的乘法公式 1*1=1

3. 在内层for循环中,完成每行指定次数的乘法公式打印 1*1=1

System.out.print(k +"*"+ j +"="+ j*k +"\t");

// 变量k代表:每行中的第n

// 变量j代表:行号

4. 在外循环中,当每行指定次数的乘法公式打印完毕后,通过System.out.println()切换到下一行。这样,再次打印乘法公式时,就在下一行输出打印了

代码如下:

public class Test05 {

public static void main(String[] args) {

for (int j = 1; j < 10; j++) {

for (int k = 1; k <= j; k++) {

System.out.print(k +"*"+ j +"="+ j*k +"\t");

}

System.out.println();

}

}

}

 

第2章 数组方法练习

2.1 定义打印数组元素方法,按照给定的格式打印[11, 33, 44, 22, 55]

题目分析:

通过观察发现,本题目要实现按照指定格式,打印数组元素操作

1. 通过循环,我们可以完成数组中元素的获取,数组名[索引]

2. 观察发现,每个数组元素之间加入了一个逗号”,”进行分隔;并且,整个数组的前后有一对中括号”[]”包裹数组所有元素。

解题步骤:

1. 使用输出语句完成打印 左边的中括号”[”

2. 使用循环,输出数组元素值。输出元素值分为两种情况,如下:

a) 最后一个数组元素,加上一个右边的中括号”]”

b) 非最后一个数组元素,加上一个逗号”,”

代码如下:

//打印数组

public static void printArray(int[] arr) {

System.out.print("[");

for (int i = 0; i < arr.length; i++) {

if (i == arr.length - 1) {

System.out.println(arr[i]+"]");

} else {

System.out.print(arr[i]+", ");

}

}

}

2.2 数组元素逆序存储

图解:

 07_Java基础语法_第7天(练习)

题目分析:

通过观察发现,本题目要实现原数组元素倒序存放操作。即原数组存储元素为{11,22,33,44},逆序后为原数组存储元素变为{44,33,22,11}

1. 通过图解发现,想完成数组元素逆序,其实就是把数组中索引为startend的元素进行互换。

2. 每次互换后,start索引位置后移,end索引位置前移,再进行互换

3. 直到start位置超越了end位置,互换结束,此时,数组元素逆序完成。

解题步骤:

1. 定义两个索引变量start值为0,变量end值为数组长度减去1(即数组最后一个元素索引)

2. 使用循环,完成数组索引start位置元素与end位置元素值互换。

3. 在循环换过程中,每次互换结束后,start位置后移1end位置前移1

4. 在循环换过程中,最先判断start位置是否超越了end位置,若已超越,则跳出循环

代码如下:

//数组元素逆序

public static void receive(int[] arr){

for (int start = 0, end = arr.length-1; start < end; start++,end--) {

int temp = arr[start];

arr[start] = arr[end];

arr[end] = temp;

}

}

 

2.3 数组元素普通查找

图解:

 07_Java基础语法_第7天(练习)

题目分析:

通过观察发现,本题目要实现查找指定数值第一次在数组中存储的位置(索引),返回该位置(索引)。

1. 我们可以通过遍历数组,得到每个数组元素的值

2. 在遍历数组过程中,使用当前数组元素值与要查找的数值进行对比

a) 数值相等,返回当前数组元素值的索引

b) 整个循环结束后,比对结果数值没有相等的情况,说明该数组中没有存储要查找的数值,此时,返回一个索引值-1,来表示没有查询到对应的位置。(使用 -1来表示没有查询到,是因为数组的索引没有负数)

解题步骤:

1. 使用for循环,遍历数组,得到每个数组元素值

2. 在每次循环中,使用if条件语句进行当前数组元素值与要查找的数值进行对比,若比较结果相等,直接返回当前数组元素的索引值

3. 若整个循环结束后,比对结果数值没有相等的情况,说明该数组中没有存储要查找的数值,此时,返回一个索引值-1

代码如下:

//普通查找

public static int getArrayIndex(int[] arr, int number) {

//把数组中的元素依次与指定的数值 进行比较

for (int i = 0; i < arr.length; i++) {

if (arr[i] == number) {

//找到了

return i;

}

}

return -1;

}

 

上面的代码可以进行优化为一个return,代码如下:

public static int getArrayIndex(int[] arr, int number) {

//定义index变量记录要返回的索引的位置

int index = -1;

//把数组中的元素依次与指定的数值 进行比较

for (int i = 0; i < arr.length; i++) {

if (arr[i] == number) {

//找到了

index = i;

break;

}

}

return index;

}

第3章 自定义类、集合练习

3.1 案例介绍

现在,我们将原有的库存管理案例,采用更可以的集合方式实现。

 07_Java基础语法_第7天(练习)

将对下列功能进行方法封装:

1. 打印库存清单功能

5. 库存商品数量修改功能

6. 退出程序功能

3.2 案例需求分析

管理员能够进行的操作有3项(查看、修改、退出),我们可以采用switch菜单的方式来完成

-------------库存管理------------

1.查看库存清单

2.修改商品库存数量

3.退出

请输入要执行的操作序号:

  每一项功能操作,我们采用方法进行封装,这样,可使程序的可读性增强。

选择“1.查看库存清单功能,则控制台打印库存清单

选择“2.修改商品库存数量功能,则对每种商品库存数进行更新

选择“3.退出功能,则退出库存管理,程序结束

3.3 代码实现

每种库存商品都拥有多项商品信息,为了方便管理每种商品的信息,我们对商品信息进行封装,编写Goods.java文件

/*

 * 库存商品类

 */

public class Goods {

String brand; // 商品品牌型号

double size; // 商品尺寸大小

double price; // 商品价格

int count; // 商品库存个数

}

上述代码中,对商品信息(品牌、尺寸、价格、库存数)进行了封装。这样做的好处在于,以后只要找到这个商品,就能够知道该商品的每项信息了。

编写Demo库存管理.java,完成如下功能:

7. 功能菜单

/**

 * 库存管理功能菜单

 * @return 管理员键盘输入的功能操作序号

 */

public static int chooseFunction() {

System.out.println("-------------库存管理------------");

System.out.println("1.查看库存清单");

System.out.println("2.修改商品库存数量");

System.out.println("3.退出");

System.out.println("请输入要执行的操作序号:");

//接收键盘输入的功能选项序号

Scanner sc = new Scanner(System.in);

int choose = sc.nextInt();

return choose;

}

上述方法用来完成库存管理功能菜单的显示、接收管理员选择的功能操作序号。这是完成了案例的第一步。接下来完成“查看、修改、退出”这三项功能。

8. 编写main主方法,调用库存管理功能菜单方法“查看、修改、退出”这三个方法。

public static void main(String[] args) {

//记录库存商品信息

ArrayList<Goods> list = new ArrayList<Goods>();

//添加商品到库存

addStore(list);

//通过while循环模拟管理员进行功能重复选择操作

while (true) {

//打印功能菜单操作,接收键盘输入的功能选项序号

int choose = chooseFunction();

//执行序号对应的功能

switch (choose) {

case 1://查看库存清单

printStore(list);

break;

case 2://修改商品库存数量

update(list);

break;

case 3://退出

exit();

return;

default:

System.out.println("----------------------------------");

System.out.println("功能选择有误,请输入正确的功能序号!");

break;

}

}

}

在主方法中,创建了ArrayList集合,用来存储库存商品信息,通过接收到的功能选项序号,进行switch语句判断后,调用对应的功能方法。

9. 查看库存清单功能

/**

 * 查看库存清单

 */

public static void printStore(ArrayList<Goods> list) {

//统计总库存个数、统计库存总金额

int totalCount = 0;

double totalMoney = 0.0;

//列表顶部

System.out.println("---------------------------查看库存清单--------------------------");

System.out.println("品牌型号尺寸价格库存数");

//列表中部

for (int i = 0; i < list.size(); i++) {

Goods item = list.get(i);

System.out.println(item.brand+""+item.size+""+item.price+""+ item.count);

//统计总库存个数、统计库存总金额

totalCount += item.count;

totalMoney += item.count * item.price;

}

//列表底部

System.out.println("-------------------------------------------------------------");

System.out.println("总库存数:"+totalCount);

System.out.println("库存商品总金额:"+totalMoney);

}

上述方法用来完成打印库存清单功能,参数list表示库存商品相关信息集合。

10. 修改商品库存数量功能

/**

 * 修改商品库存数量

 */

public static void update(ArrayList<Goods> list){

System.out.println("------------修改商品库存数量-----------");

for (int i = 0; i < list.size(); i++) {

Goods item = list.get(i);

System.out.println("请输入"+ item.brand +"商品库存数量");

item.count = new Scanner(System.in).nextInt();

list.set(i, item);

}

}

上述方法用来完成修改商品库存数量功能,参数list表示库存商品相关信息集合。

11. 退出功能

/**

 * 退出

 */

public static void exit(){

System.out.println("----------------退出---------------");

System.out.println("您已退出系统");

}

上述方法用来完成退出程序的功能