本帖最后由 小鲁哥哥 于 2017-3-12 15:49 编辑
【济南中心】JavaEE基础班新课程day04:随机数和数组
黑马的教学一直是强调知识性和趣味性并重的。所以在开始今天的学习之前我来给大家猜几个脑筋急转弯吧!
{:8_477:}
1:什么吃的东西是从屁股里出来而且基本每个人都吃过?
2:什么人有两个心脏?
3:三颗心值多少钱??
怎么样,是不是感觉大脑已经预热好了?要开始学习了!(没猜出来的话答案在本帖最后哦~)
今天学习的主要内容有:
有什么呢?
有随机数和数组。
一、 随机数
随机数,顾名思义,就是随机产生的具体值不一定的数字。
没错,有一个类就是专门干这个的,他的名字你要记住啦:他叫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:}加油~
|