黑马程序员技术交流社区

标题: 【石家庄校区】Java基础入门<四> [打印本页]

作者: liupeng_hm    时间: 2018-2-2 14:36
标题: 【石家庄校区】Java基础入门<四>
本帖最后由 liupeng_hm 于 2018-2-2 14:56 编辑

7Java基础语法
今日内容介绍
[size=14.0000pt]u 循环练习
[size=14.0000pt]u 数组方法练习
第1章 循环练习编写程序求 1+3+5+7+……+99 的和值。
题目分析:
通过观察发现,本题目要实现的奇数(范围1-100之间)的累加和。
l 为了记录累加和的值,我们需要定义一个存储累加和的变量
l 我们要获取到1-100范围内的数
l 判断当前数是否为奇数,是奇数,完成累加和操作
l 累加完毕后,最终显示下累加和的值
解题步骤:
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);
        }
}

输出所有的水仙花数,所谓水仙花数是指一个数3位数,其每位数字立方和等于其本身,如153 = 1*1*1 + 3*3*3 + 5*5*5
题目分析:
通过观察发现,本题目要实现打印符合要求的数字(即水仙花数)。
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);
                        }
                }
        }
}

ASCII编码表
  American Standard Code for Information Interchange美国标准信息交换代码.
  在计算机中,所有的数据在存储和运算时都要使用二进制数表示, abcd这样的52个字母(包括大写)、以及01等数字还有一些常用的符号, 在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了ASCII编码,统一规定了上述常用符号用哪些二进制数来表示。
file:///C:\Users\LP\AppData\Local\Temp\ksohtml\wpsA8AC.tmp.png

  数字0-9对应ASCII编码十进制为48-57, 字母a-z对应ASCII编码十进制为97-122,字母A-Z对应ASCII编码十进制为65-90
利用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++; //更新小写字母值
                }
        }
}
利用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章 数组方法练习定义打印数组元素方法,按照给定的格式打印[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+"]");
                } else {
                        System.out.print(arr+", ");
                }
        }
}
数组元素逆序
图解:
file:///C:\Users\LP\AppData\Local\Temp\ksohtml\wpsA8BD.tmp.jpg
题目分析:
        通过观察发现,本题目要实现原数组元素倒序存放操作。即原数组存储元素为{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;
        }
}

数组元素选择排序
图解:
file:///C:\Users\LP\AppData\Local\Temp\ksohtml\wpsA8BE.tmp.jpg
题目分析:
        通过观察发现,本题目要实现把数组元素{13,46,22,65,3}进行排序
1. 提到数组排序,就要进行元素值大小的比较,通过上图发现,我们想完成排序要经过若干次的比较才能够完成。
2. 上图中用每圈要比较的第一个元素与该元素后面的数组元素依次比较到数组的最后一个元素,把小的值放在第一个数组元素中,数组循环一圈后,则把最小元素值互换到了第一个元素中。
3. 数组再循环一圈后,把第二小的元素值互换到了第二个元素中。按照这种方式,数组循环多圈以后,就完成了数组元素的排序。这种排序方式我们称为选择排序。
解题步骤:
1. 使用for循环(外层循环),指定数组要循环的圈数(通过图解可知,数组循环的圈数为数组长度 - 1
2. 在每一圈中,通过for循环(内层循环)完成数组要比较的第一个元素与该元素后面的数组元素依次比较到数组的最后一个元素,把小的值放在第一个数组元素中
3. 在每一圈中,要参与比较的第一个元素由第几圈循环来决定。如上图所示
a) 进行第一圈元素比较时,要比较的第一个元素为数组第一个元素,即索引为0的元素
b) 进行第二圈元素比较时,要比较的第一个元素为数组第二个元素,即索引为1的元素
c) 依次类推,得出结论:进行第n圈元素比较时,要比较的第一个元素为数组第n个元素,即数组索引为n-1的元素
代码如下:
//选择排序
public static void selectSort(int[] arr) {
        //功能
        //外层循环用来控制数组循环的圈数
        for (int i = 0; i < arr.length-1; i++) {
                //内层循环用来完成元素值比较,把小的元素值互换到要比较的第一个元素中
                for (int j = i+1; j < arr.length; j++) {
                        if (arr > arr[j]) {
                                int temp = arr;
                                arr = arr[j];
                                arr[j] = temp;
                        }
                }
        }
}
数组元素冒泡排序
图解:数组元素{13,46,22,65,3}
file:///C:\Users\LP\AppData\Local\Temp\ksohtml\wpsA8BF.tmp.jpg
题目分析:
        通过观察发现,本题目要实现把数组元素{13,46,22,65,3}进行排序
1. 提到数组排序,就要进行元素值大小的比较,通过上图发现,我们想完成排序要经过若干次的比较才能够完成。
2. 上图中相邻的元素值依次比较,把大的值放后面的元素中,数组循环一圈后,则把最大元素值互换到了最后一个元素中。数组再循环一圈后,把第二大的元素值互换到了倒数第二个元素中。按照这种方式,数组循环多圈以后,就完成了数组元素的排序。这种排序方式我们称为冒泡排序。
解题步骤:
1. 使用for循环(外层循环),指定数组要循环的圈数(通过图解可知,数组循环的圈数为数组长度 - 1
2. 在每一圈中,通过for循环(内层循环)完成相邻的元素值依次比较,把大的值放后面的元素中
3. 每圈内层循环的次数,由第几圈循环来决定。如上图所示
a) 进行第一圈元素比较时,内层循环次数为数组长度 - 1
b) 进行第二圈元素比较时,内层循环次数为数组长度 - 2
c) 依次类推,得出结论:进行第n圈元素比较时,内层循环次数为数组长度 - n
代码如下:
//冒泡排序
public static void bubbleSort(int[] arr) {
        //功能
        //外层循环用来控制数组循环的圈数
        for (int i = 0; i < arr.length-1; i++) {
                //j < arr.length-1 为了避免角标越界
                //j < arr.length-1-i 为了比较效率,避免重复比较
                //内层循环用来完成元素值比较,把大的元素值互换到后面
                for (int j = 0; j < arr.length-1-i; j++) {
                        if (arr[j] > arr[j+1]) {
                                int temp = arr[j];
                                arr[j] = arr[j+1];
                                arr[j+1] = temp;
                        }
                }
        }
}

数组元素普通查找
图解:
file:///C:\Users\LP\AppData\Local\Temp\ksohtml\wpsA8D0.tmp.jpg
题目分析:
        通过观察发现,本题目要实现查找指定数值第一次在数组中存储的位置(索引),返回该位置(索引)。
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 == number) {
                        //找到了
                        return i;
                }
        }
        return -1;
}

数组元素二分查找(折半查找)
图解:
file:///C:\Users\LP\AppData\Local\Temp\ksohtml\wpsA8D1.tmp.jpg
题目分析:
        通过观察发现,本题目要实现查找指定数值在元素有序的数组中存储的位置(索引),返回该位置(索引)。
1. 我们使用数组最中间位置的元素值与要查找的指定数值进行比较,若相等,返回中间元素值的索引
2. 最中间位置的元素值与要查找的指定数值进行比较,若不相等,则根据比较的结果,缩小查询范围为上次数组查询范围的一半;
再根据新的查询范围,更新最中间元素位置,然后使用中间元素值与要查找的指定数值进行比较
n 比较结果相等,返回中间元素值的索引
n 比较结果不相等,继续缩小查询范围为上次数组查询范围的一半,更新最中间元素位置,继续比较,依次类推。
3. 当查询范围缩小到小于0个元素时,则指定数值没有查询到,返回索引值-1。
解题步骤:
1. 定义3个用来记录索引值的变量,变量min记录当前范围最小索引值,初始值为0;变量max记录当前范围最大索引值,初始值为数组长度-1;变量mid记录当前当前范围最中间元素的索引值,初始值为(min+max) / 2
2. 使用循环,判断当前范围下,最中间元素值与指定查找的数值是否相等
n 若相等,结束循环,返回当前范围最中间元素的索引值mid
n 若不相等,根据比较结果,缩小查询范围为上一次查询范围的一般
u 中间元素值 要查询的数值大,说明要查询的数值在当前范围的最小索引位置与中间索引位置之间,此时,更新查询范围为:
范围最大索引值 = 上一次中间索引位置 -1
u 中间元素值 要查询的数值小,说明要查询的数值在当前范围的最大索引位置与中间索引位置之间,此时,更新查询范围为:
范围最小索引值 = 上一次中间索引位置 +1
u 在新的查询范围中,更新中间元素值的位置,再次使用最中间元素值与指定查找的数值是否相等。
                  中间索引值 = (范围最小索引值 +范围最大索引值) / 2;
3. 每次查询范围缩小一半后,使用if语句判断,查询范围是否小于0个元素,若小于0个元素,则说明指定数值没有查询到,返回索引值-1。

代码如下:
//二分查找法(折半查找法)
public static int halfSearch(int[] arr, int number) {
        //定义3个变量,用来记录min, min, mid的位置
        int min = 0;
        int max = arr.length-1;
        int mid = 0;
                while (min <= max) {
           mid = (min+max)/2;
                //没找了, 更新范围,继续比较
                //更新范围
                if (arr[mid] > number) {
                        //在左边
                        max = mid-1;
                } else if(arr < number){
                        //在右边
                        min = mid+1;
                }
                else{
              return mid ;
          }

        return -1;
}

8Java基础语法
今日内容介绍
[size=14.0000pt]u Eclipse开发工具
[size=14.0000pt]u 超市库存管理系统
第3章 Eclipse开发工具
Eclipse是功能强大Java集成开发工具。它可以极大地提升我们的开发效率。可以自动编译,检查错误。在公司中,使用的就是Eclipse进行开发。
Eclipse的下载、安装、卸载
l 安装 (只需要解压后就能使用)
l 卸载(只需要将文件夹删除就可以了)
l 注意: 开发软件的安装目录中,尽量不要出现空格与中文
Eclipse的使用
在当前阶段,我们只需要完成最基本的Java文件编写,其他功能跟随日常教学慢慢渗透学习。
使用步骤:
l 1.开启,选择工作空间,如下图
n 工作空间:指的是将来编写的java源文件存放的位置
n 下图中的复选框“□”,如果选中,表示使用当前工作空间为Eclipse的默认工作空间,以后启动Eclipse时,不在提示选择工作空间。
file:///C:\Users\LP\AppData\Local\Temp\ksohtml\wpsA8D2.tmp.jpg
图1-1 选择工作空间
l 2.在左侧空白区域右键 或者 选中File菜单栏, 选择new--> 创建java项目编写项目名称,点击Finish 完成。如下图
file:///C:\Users\LP\AppData\Local\Temp\ksohtml\wpsA8E2.tmp.jpg
图1-2 创建java项目
l 3.展开项目,选中源包SRC后,在项目的src目录下右键创建类,指定类的名字 Hello,创建main方法并编写源代码System.out.println("HelloWorld");
file:///C:\Users\LP\AppData\Local\Temp\ksohtml\wpsA8E3.tmp.jpg
图1-3 创建类
l 4.编译与执行
n 编译:自动编译,当java代码保存的时候,自动 编译class文件
n 执行:
u 方式1:点击菜单工具栏中的 绿色带有三角形的 run按钮 运行
u 方式2:点击菜单栏中Run, 点击Run 运行  快捷键是 ctrl+F11
u 方式3:选中要运行的java文件,或者在编写代码的空白区域,右键选择 Run As --> 运行java程序
针对Eclipse空间的简单配置
l 程序的编译环境和运行环境
n 编译环境:Window -- Preferences – Java - Compiler
n 运行环境:Window -- Preferences – Java - Installed JREs
file:///C:\Users\LP\AppData\Local\Temp\ksohtml\wpsA8E4.tmp.jpg
图1-4 编译环境与运行环境配置
l 如何显示行号与隐藏行号
n 显示:在代码区域的左边空白区域,右键 -- Show Line Numbers
n 隐藏:将上面的操作再做一遍
file:///C:\Users\LP\AppData\Local\Temp\ksohtml\wpsA8E5.tmp.jpg
图1-5 行号显示与隐藏
l 如何更改字体大小与颜色
n 修改java代码的字体大小与颜色
u Window -- Preferences -- General -- Appearance -- Colors and Fonts -- Java -- Java Editor Text Font选中后,点击Edit,进行修改
n 修改其他字体大小与颜色
u Window -- Preferences -- General -- Appearance -- Colors and Fonts -- Basic -- Text Font 选中后 点击Edit ,进行修改
file:///C:\Users\LP\AppData\Local\Temp\ksohtml\wpsA8E6.tmp.jpg
图1-6 设置字体

l 显示的窗口乱了,还原默认显示模式
n Window – Perspective -- Reset Prespective
file:///C:\Users\LP\AppData\Local\Temp\ksohtml\wpsA8F7.tmp.jpg
l 如何去掉默认注释
n Window -- Preferences -- Java -- Code Style -- Code Templates -- Comments – Methods,点击Edit ,将注释部分删除 (不建议删除)
n Window -- Preferences -- Java -- Code Style -- Code Templates -- Code -- Method body,点击Edit ,将注释部分删除
file:///C:\Users\LP\AppData\Local\Temp\ksohtml\wpsA8F8.tmp.jpg
l 切换工作空间
n File – Switch Workspace – 指定工作空间 – ok
file:///C:\Users\LP\AppData\Local\Temp\ksohtml\wpsA8F9.tmp.jpg
快捷键
l 内容辅助键  Alt+/
n 自动补齐main方法  main 然后 Alt+/
n 自动补齐输出语句  syso 然后 Alt+/
l 格式化Ctrl+Shift+f
n 代码区域右键 -- Source – Format
l 自动导包: Ctrl+Shift+o
n 如果当前类在多个包中都存在,这时候,使用Ctrl+shift+o,进行选择一个包导入即可。
l 注释
n 单行注释
u 加注释: 先选中需要注释的内容,然后 Ctrl+/
u 取消注释:先选中需要取消注释的内容, 然后 Ctrl+/
n 多行注释
u 加注释: 先选中需要注释的内容,然后 Ctrl+Shift+/
u 取消注释:先选中需要取消注释的内容, 然后 Ctrl+Shift+\
断点调试
l 断点: 就是一个标记
l 如何设置断点
n 代码区域左边的空白位置 双击即可
l 在哪里加
n  想看哪个语句的执行结果就在该语句前面加
l 怎么运行断点的程序
n 代码区域右键 -- Debug as -- Java Application
n 显示一个页面,提示是否进入调试页面? 是否记住当前操作?是(Yes)是(勾选复选框)
file:///C:\Users\LP\AppData\Local\Temp\ksohtml\wpsA8FA.tmp.jpg
l 弹出了断点页面
file:///C:\Users\LP\AppData\Local\Temp\ksohtml\wpsA90B.tmp.jpg
n 点哪里
u 点击 工具栏中的Step Over (执行下一行)
u 快捷键F6 看到每一步程序的执行过程
n 看哪里
u 看代码区域: 对照看程序执行步骤
u Debug区域: 对照看程序执行步骤
u varable区域: 观察变量的创建、复制、销毁
n 如何消除断点
u 把设置断点的方式再执行一遍
u 切换到Debug视图,选择 Breakpoints -- Remove All Breakpoints 就是2个XX的图标
项目的删除
l 在项目区域删除
n 在左侧PackageExplorer区域对指定项目右键,点击delete删除
l 在硬盘上删除
n 在左侧PackageExplorer区域对指定项目右键,点击delete删除,同时选中下面的在硬盘上删除(Delete project contents on disk)
file:///C:\Users\LP\AppData\Local\Temp\ksohtml\wpsA90C.tmp.jpg
图1-7 项目删除
项目的导入
l 在左侧的PackageExplorer区域右键,选择 import
l 选择 General -- Existing Projects into Workspace
l 选择后,点击 next
l 在新的窗口中,点击 Browse 找到需要导入的项目(注意,找到项目的名字位置就可以了),选中要导入的项目,点击Copy复选框,点击Finish完成。
l 注意事项
n Eclipse中已经存在的同名项目不能再次导入
file:///C:\Users\LP\AppData\Local\Temp\ksohtml\wpsA90D.tmp.jpg
图1-8 项目导入
第4章 超市库存管理系统案例介绍
模拟真实的库存管理逻辑,完成超市管理系统的日常功能实现见下图
file:///C:\Users\LP\AppData\Local\Temp\ksohtml\wpsA90E.tmp.jpg
案例需求分析
根据案例介绍,我们进行分析,首先需要一个功能菜单,然后输入功能序号后,调用序号对应的功能方法,实现想要的操作。分析步骤如下
l 1.完成超市商品初始化。创建商品,将商品添加到集合
l 2.显示来到超市能做的操作,也就是显示主菜单
l 3.根据接收到的功能选项,执行对应的功能
l 3.1.库存货物查询
l 3.2.添加新货物        
l 3.3.删除货物
l 3.4.修改货物
l 3.5.退出系统,结束main方法的运行
l 4.循环,回到 2.显示主菜单
实现代码步骤
每种库存商品都拥有多项商品信息,为了方便管理每种商品的信息,我们对商品信息进行封装,编写FruitItem.java文件
public class FruitItem {
        int  ID;                        //商品编号
        String  name;                //商品名称
        double  price;                //商品单价
        double  number;                //商品数量
        double  money;                //商品金额
}
上述代码中,对商品信息(编号、名称、单价、数量、金额)进行了封装。这样做的好处在于以后只要找到这个商品,就能够知道该商品的每项信息了。
编写FruitStore.java,完成如下功能:
l 编写main主方法
        public static void main(String[] args) {
                //定义数组,记录每个商品信息
                ArrayList<FruitItem> list = new ArrayList<FruitItem>();
                /*
                 * 1.超市商品初始化
                 */
                init(list);

                while(true){
                        /*
                         * 2.显示主菜单
                         */
                        mainMenu();
                        /*
                         * 3.根据接收到的功能选项,执行对应的功能
                         */
                        chooseFunction(list);
                }
        }
        上述代码中,通过while(true)循环,完成用户调用不同功能。实现重复功能选择操作。

l 1.超市商品初始化。创建商品,将商品添加到集合
        public static void init(ArrayList<FruitItem> list) {
                FruitItem item = new FruitItem();
                item.name = "少林寺酥饼核桃";
                item.ID = 9001;
                item.price = 120;

                FruitItem item2 = new FruitItem();
                item2.name = "尚康杂粮牡丹饼";
                item2.ID = 9002;
                item2.price = 20;

                FruitItem item3 = new FruitItem();
                item3.name = "新疆原产哈密瓜";
                item3.ID = 3;
                item3.price = 9007;

                list.add(item);
                list.add(item2);
                list.add(item3);
        }
        上述代码中,完成商品集合的初始化操作,添加了3件商品。

l 2.显示来到超市能做的操作,也就是显示主菜单
        public static void mainMenu() {
                 System.out.println("=========================欢迎光临itcast超市=========================");
                 System.out.println("1:查询货物  2:添加新货物 3:删除货物 4:修改货物");
                 System.out.println("5:退出系统");
        }
        上述代码,用来完成用户操作界面的显示。

l 3.根据接收到的功能选项,执行对应的功能
        public static void chooseFunction(ArrayList<FruitItem> list) {
                System.out.println("请您输入要操作的功能序号:");
                Scanner sc = new Scanner(System.in);//键盘输入对象
                String choose = sc.next();
                //根据接收到的选择,执行对应的功能
                switch (choose) {
                case "1": //3.1.库存货物查询
                        showFruitList(list);
                        break;
                case "2": //3.2.添加新货物
                        addFruitItem(list);
                        break;
                case "3": //3.3.删除货物
                        delFruitItem(list);
                        break;
                case "4": //3.4.修改货物
                        updateFruitItem(list);
                        break;
                case "5": //3.5.退出系统,退出JVM
                        System.out.println("退出系统");
                        return;
                default:
                        System.out.println("对不起,没有您输入的功能,请重新选择");
                        break;
                }
        }
上述代码中,参数list为库存商品集合。当键盘输入功能序号后,通过switch语句匹配后,调用对应的方法完成对应功能的实现。

l 3.1.库存货物查询
        public static void showFruitList(ArrayList<FruitItem> list) {
                System.out.println("=======================商品库存清单=======================");
                System.out.println("商品编号\t商品名称\t\t商品单价");
                //查询每种库存商品信息
                for (int i = 0; i < list.size(); i++) {
                        FruitItem item = list.get(i);
                        System.out.println(item.ID + "\t" + item.name + "\t" + item.price);
                }
        }
        上述代码中,用来查询所有库存商品信息。

l 3.2.添加新货物        
        public static void addFruitItem(ArrayList<FruitItem> list) {

                //创建新获取对象
                FruitItem newItem = new FruitItem();
                Scanner sc = new Scanner(System.in);//键盘输入对象
                //提示输入信息
                System.out.print("请输入新水果的名称:");
                newItem.name = sc.next();
                System.out.print("请输入新水果的编号:");
                newItem.ID = sc.nextInt();
                System.out.print("请输入新水果单价:");
                newItem.price = sc.nextDouble();

                //向货物集合中添加新的物品项
                list.add(newItem);
        }
上述代码中,通过键盘录入,将录入的商品信息存储到库存商品集合中。

l 3.3.删除货物
        public static void delFruitItem(ArrayList<FruitItem> list) {
                System.out.print("请输入您要删除的水果编号:");
                Scanner sc = new Scanner(System.in);//键盘输入对象
                int fruitID = sc.nextInt();
                //删除集合元素
                for (int i = 0; i < list.size(); i++) {
                        FruitItem thisItem = list.get(i);
                        if(thisItem.ID == fruitID) {
                                list.remove(thisItem);
                                System.out.println("水果信息删除完毕!");
                                return;
                        }
                }
                System.out.println("对不起,没有这个编号的水果!");
        }
上述代码中,通过键盘录入,在库存集合中查找对应的商品编号,如果找到该商品,将该商品删除,否则,提示没有这个编号的商品。

l 3.4.修改货物
        public static void updateFruitItem(ArrayList<FruitItem> list) {

                System.out.println();
                System.out.print("请输入您要修改信息的水果编号:");

                Scanner sc = new Scanner(System.in);//键盘输入对象
                int fruitID = sc.nextInt();

                //更新集合元素
                for (int i = 0; i < list.size(); i++) {

                        FruitItem thisItem = list.get(i);
                        if(thisItem.ID == fruitID) {
                                System.out.print("请输入新的水果ID:");
                                thisItem.ID = sc.nextInt();
                                System.out.print("请输入新的水果名称:");
                                thisItem.name = sc.next();
                                System.out.print("请输入新的水果单价:");
                                thisItem.price = sc.nextDouble();
                                System.out.println("水果信息更新完毕!");
                                return;
                        }
                }
                System.out.println("对不起,没有这个编号的水果!");
        }
上述代码中,通过键盘录入,在库存集合中查找对应的商品编号,如果找到该商品,则键盘录入修改商品信息,否则,提示没有这个编号的商品。
第5章 趣味乐园
如下图所示,完成对应的双色球摇奖功能:
file:///C:\Users\LP\AppData\Local\Temp\ksohtml\wpsA91E.tmp.jpg
l 双色球摇奖
n 随机摇出1-33之间的7个随机数,不能重复
n 提示:
u 存储双色球可使用ArrayList集合完成
u 随机摇出双色球可使用Random类nextInt()方法、ArrayList集合remove()方法完成






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2