A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小鲁哥哥 于 2017-3-12 15:49 编辑



【济南中心】JavaEE基础班新课程day04:随机数和数组

            黑马的教学一直是强调知识性和趣味性并重的。所以在开始今天的学习之前我来给大家猜几个脑筋急转弯吧!

{:8_477:}

             1:什么吃的东西是从屁股里出来而且基本每个人都吃过?

             2:什么人有两个心脏?

             3:三颗心值多少钱??

怎么样,是不是感觉大脑已经预热好了?要开始学习了!(没猜出来的话答案在本帖最后哦~
{:8_503:}

        今天学习的主要内容有:

            有什么呢?

            有随机数和数组。

          一、 随机数


        随机数,顾名思义,就是随机产生的具体值不一定的数字。

        没错,有一个类就是专门干这个的,他的名字你要记住啦:他叫Random

         

       举个例子,如果我要产生一个0-100的随机数怎么写代码呢?                        
[Java] 纯文本查看 复制代码
 [/size][size=3] –      导包
•       import java.util.Random;
–      创建对象
•       Random r = new Random();
–      获取随机数
int number =r.nextInt(100);    //产生的数字包含0不包含100

                     那么请思考,我想产生10个这样的随机数怎么写代码?
                     可以把代码重复10次,我们也可以利用for循环来做,这样更高效。
                     
[Java] 纯文本查看 复制代码
public class RandomDemo {
        public static void main(String[] args) {
                // 创建对象
                Random r = new Random();

                for (int x = 0; x < 10; x++) {
                        // 获取随机数
                        int number = r.nextInt(10);
                        // 输出随机数
                        System.out.println("number:" + number);
                }
                System.out.println("--------------------");

                // 如何获取到一个1-100之间的随机数呢?
                int i = r.nextInt(100) + 1;
                System.out.println("i:" + i);
        }
}
               学会了产生随机数,我们可以做一个小游戏来玩了~这就是猜数字小游戏。要求是这样的,我们随机产生一个随机数,我们只知道他的范围,但是不知道他的具体大小,我们猜一个数,然后如果没猜,会提示我们大了还是小了,然后继续猜直到猜对为止。好!规则清楚了,那你有没有思路呢?
                先要自己思考,我给你一个提示:根据逻辑运算符==,条件判断语句,if  else  还有循环,可以用for也可以用while ,好了自己思考然后动手写写吧!{:8_486:} 答案我放到后面吧,防止你不小心看到了。



二、数组


            接下来就要学习数组了,这是个很重要的知识点,大家好好看哦。

            首先要搞清楚为什么要用到数组呢?它肯定有它的作用,来举个栗子!

              

            假如有一个公司需要统计员工的工资情况,例如计算平均工资、找到最高工资等。假设该公司有80名员工,用前面所学的知识,程序首先需要声明80个变量来分别记住每位员工的工资,然后在进行操作,这样做会显得很麻烦。为了解决这种问题,Java就提供了数组供我们使用。


那么数组到底是什么呢?有什么特点呢?
             通过上面的分析:我们可以得到如下两句话:
             数组是存储多个变量(元素)的东西(容器)
             这多个变量的数据类型要一致
             数组既可以存储基本数据类型,也可以存储引用数据类型。

数组的定义格式:

            格式1:数据类型[] 数组名;
            格式2:数据类型 数组名[];
            一维数组:int[] arr = new int[10];

           二维数组:int[] [] arr = new int[10][10]               

数组的初始化:
           Java中的数组必须先初始化,然后才能使用。
           所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值。
           有动态初始化和静态初始化。
[Java] 纯文本查看 复制代码
数组初始化:
 *                 A:所谓初始化,就是为数组开辟内存空间,并为数组中的每个元素赋予初始值
 *                 B:我们有两种方式对数组进行初始化
 *                         a:动态初始化        只指定长度,由系统给出初始化值
 *                         b:静态初始化        给出初始化值,由系统决定长度
 * 
 * 动态初始化:
 *                 数据类型[] 数组名 = new 数据类型[数组长度];
 */
public class ArrayDemo {
        public static void main(String[] args) {
                //数据类型[] 数组名 = new 数据类型[数组长度];
                int[] arr = new int[3];
                /*
                 * 左边:
                 *                 int:说明数组中的元素的数据类型是int类型
                 *                 []:说明这是一个数组
                 *                 arr:是数组的名称
                 * 右边:
                 *                 new:为数组分配内存空间
                 *                 int:说明数组中的元素的数据类型是int类型
                 *                 []:说明这是一个数组0
                 *                 3:数组的长度,其实就是数组中的元素个数
                 */
        
        }
}

[Java] 纯文本查看 复制代码
/*
 * 静态初始化的格式:
 *                 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};
 * 
 *                 简化格式:
 *                         数据类型[] 数组名 = {元素1,元素2,...};
 * 
 *                 举例:
 *                         int[] arr = new int[]{1,2,3};
 * 
 *                 简化后:
 *                         int[] arr = {1,2,3};
 */
public class ArrayDemo2 {
        public static void main(String[] args) {
                //定义数组
                int[] arr = {1,2,3};
                
                //输出数组名和元素
                System.out.println(arr);
                System.out.println(arr[0]);
                System.out.println(arr[1]);
                System.out.println(arr[2]);
        }
}
我们知道代码怎么写的了,要自己敲一敲,我们把数组
下面我讲两个数组在编程中常见的两个小问题。数组索引越界异常和空指针异常
我们访问数组中的元素是根据它的索引去查找的,如果索引的最大值是3,你用4作为索引去查找是肯定找不到的,对吧。这时就会报错,数组索引越界异常。
[Java] 纯文本查看 复制代码
/*
 * 两个常见小问题:
 *                 A:java.lang.ArrayIndexOutOfBoundsException
 *                         数组越界异常
 *                         产生的原因:就是你访问了不存在的索引元素。
 *                 B:java.lang.NullPointerException
 *                         空指针异常
 *                         产生的原因:数组已经不指向堆内存的数据了,你还使用数组名去访问元素。
 * 为什么我们要记住这样的小问题呢?
 *                 编程不仅仅是把代码写出来,还得在出现问题的时候能够快速的解决问题。
 */
public class ArrayDemo {
        public static void main(String[] args) {
                // 定义数组
                int[] arr = { 1, 2, 3 };
                
                //System.out.println(arr[3]);
                
                //引用类型:类,接口,数组
                //常量:空常量 null,是可以赋值给引用类型的
                //arr = null;
                System.out.println(arr[1]);
        }
}
接下来我们讲个重点知识,数组的遍历。
一位数组的遍历:
[Java] 纯文本查看 复制代码
/*
 * 需求:数组遍历(依次输出数组中的每一个元素)
 * 获取数组中元素的个数:数组名.length
 */
public class ArrayTest {
        public static void main(String[] args) {
                // 定义数组
                int[] arr = { 11, 22, 33, 44, 55 };
                // 原始做法
                System.out.println(arr[0]);
                System.out.println(arr[1]);
                System.out.println(arr[2]);
                System.out.println(arr[3]);
                System.out.println(arr[4]);
                System.out.println("--------------------");

                // 用for循环改进
                for (int x = 0; x < 5; x++) {
                        System.out.println(arr[x]);
                }
                System.out.println("--------------------");
                
                //为了解决我们去数数组中元素个数的问题,数组就提供了一个属性:length
                //用于获取数组的长度
                //格式:数组名.length
                System.out.println("数组共有:"+arr.length+"个");
                System.out.println("--------------------");
                
                for(int x=0; x<arr.length; x++) {
                        System.out.println(arr[x]);
                }
        }
}

二维数组的遍历:
[Java] 纯文本查看 复制代码
int[][] arr = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
for(int y=0; y<arr.length; y++) {
                        for (int x = 0; x < arr[y].length; x++) {
                                System.out.print(arr[y][x] + "  ");
                        }
                        System.out.println();
                }


大家理解一维和二维可以联系数学上额坐标系。
一维就是只有横坐标,一个值确定一个点,二维就是有横坐标和纵坐标,两个值确定一个点。

好了,今天的课就上到这里了

公布
脑筋急转弯的答案吧~1,鸡蛋。     2,孕妇。   3,   2亿(三心二意)


当然还有小游戏的代码:
[Java] 纯文本查看 复制代码
public class RandomTest {
        public static void main(String[] args) {
                // 系统产生一个随机数1-100之间的。
                Random r = new Random();
                int number = r.nextInt(100) + 1;

                while(true){
                        // 键盘录入我们要猜的数据
                        Scanner sc = new Scanner(System.in);
                        System.out.println("请输入你要猜的数字(1-100):");
                        int guessNumber = sc.nextInt();
        
                        // 比较这两个数据(用if语句)
                        if (guessNumber > number) {
                                System.out.println("你猜的数据" + guessNumber + "大了");
                        } else if (guessNumber < number) {
                                System.out.println("你猜的数据" + guessNumber + "小了");
                        } else {
                                System.out.println("恭喜你,猜中了");
                                break;
                        }
                }
        }
}

希望大家好好练习数组的遍历。{:8_488:}加油~



2 个回复

倒序浏览
回复 使用道具 举报
看贴要回
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马