前言:上篇我们讲到了Java语言中的循环语句,今天在将数组之前我们来做一个关于循环语句的一个小练习。
目录
一、练习
如何用for循环语句实现用户在控制台输入一个整数,系统输出一个菱形?
在这个问题中,我们可以将利用for循环嵌套来实现。首先我们可以先利用循环嵌套输出一个等腰三角形。
代码示例
Scanner sc = new Scanner(System.in);
System.out.println("请用户输入行数:");
int line = sc.nextInt();
for (int i = 1; i <= line; i++) {
for (int j = 1; j <= line - i; j++) {
System.out.print(" ");
}
for (int k = 1; k <= 2 * i - 1; k++) {
System.out.print("*");
}
System.out.println();
}
这个就是菱形的上半部分,其次,我们可以再次利用for循环嵌套来输出菱形的下半部分。
代码示例
for (int i = line - 1; i >= 1; i--) {
for (int j = 1; j <= 5 - i; j++) {
System.out.print(" ");
}
for (int k = 1; k <= 2 * i - 1; k++) {
System.out.print("*");
}
System.out.println();
}
最后,我们将两段代码合到一块,就可以完成本次练习。
完整代码
import java.util.Scanner;
//菱形
public class Test04 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请用户输入行数:");
int line = sc.nextInt();
for (int i = 1; i <= line; i++) {
for (int j = 1; j <= line - i; j++) {
System.out.print(" ");
}
for (int k = 1; k <= 2 * i - 1; k++) {
System.out.print("*");
}
System.out.println();
}
for (int i = line - 1; i >= 1; i--) {
for (int j = 1; j <= 5 - i; j++) {
System.out.print(" ");
}
for (int k = 1; k <= 2 * i - 1; k++) {
System.out.print("*");
}
System.out.println();
}
}
}
讲完这个小练习,我们就要开始本篇内容的学习。
二、数组
1、格式
格式一:数据类型[] 变量名
范例:int[] arr
定义了一个int类型的数组,数组名为arr。(推荐)
格式二:数据类型 变量名
范例:int arr[]
定义了一个int类型的变量,变量名是arr数组。
2、初始化方式
数组共有两种初始化方式,动态初始化和和静态初始化。
1.动态初始化
初始化只指定数组长度,由系统为数组分配初始值。
格式:数据类型[] 变量名 = new 数据类型[数据长度]
范例:
int[] arr = new int[3];
2.静态初始化
初始化时指定每个数组元素的始值,由系统决定数组长度。
格式:数据类型[] 变量名 = new 数据类型{数据1,数据2,数据3,......}
范例:
int[] arr = new int[]{1, 2, 3};
简化格式:数据类型[] 变量名 = {数据1,数据2,数据3,......}
范例:
int[] arr = {1, 2, 3};
3、变量访问方式
格式:
int[] arr = new int[3];
arr;
4、内部保存的数据的访问方式
在将数组内部保存的数据的访问方式前,我们先将一个知识点,那就是索引。
索引
索引是数组中数据的编号方式
作用:索引用于访问数组中的数据使用,数组名[索引名]等同于变量名,是一种特殊的变量名。
特征:
- 索引从0开始
- 索引是连续的
- 索引是连续增加的,每次加1
接下来我们再来讲数组内部保存的数据的访问方式
格式:数组名[索引]
代码示例
int[] arr = new int[3];
System.out.println(arr[0]);
5、多个数组指向相同
废话不多说,直接上代码。
public class Demo02 {
public static void main(String[] args) {
int[] arr = new int[2];
arr[0] = 100;
arr[1] = 200;
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
int[] arr2 = arr;
arr2[0] = 111;
arr2[1] = 222;
System.out.println(arr2);
System.out.println(arr2[0]);
System.out.println(arr2[1]);
}
}
在该代码中我们可以看出,再将arr数组的地址吗赋值给arr2后,arr和arr2的地址名相同,但是,在arr2中,我们将数组的元素100和200分别改为了111和222,这使得在最后的输出结果上arr数组输出100和200,arr2数组输出111和222。
6、遍历
获取数组元素数量
格式:变量名.length
代码示例
int[] arr = {11, 22, 33, 44, 55};
for (int x = 0; x < arr.length; x++) {
System.out.println(arr[x]);
}
练习
求数组中的最大值。
代码示例
int[] arr = {12, 23, 60, 24, 34};
int max = arr[0];
for (int x = 1; x < arr.length; x++) {
if (arr[x] > max) {
max = arr[x];
}
}
System.out.println("max:" + max);
7、数组操作中的两个常见小问题
索引越界:访问了数组中不存在的索引对应的元素,造成索引越界问题。
ArrayIndexOutOfBoundsException
空指针异常:访问的数组已经不再指向堆内存的数据,造成空指针异常。
NullPointerException
null:空值,引用数据类型的默认值,表示不指向任何有效对象。
三、Java中的内存分配
Java中的内存分配分为栈内存和堆内存。
1.栈内存
栈内存:存储局部变量
定义在方法中的变量,例如:arr
使用完毕,立即消失。
2.堆内存
堆内存:存储new出来的新内容(实体,对象)数组在初始化时,会为存储空间添加默认值。
数据类型初始值:
- 整数:0
- 浮点数:0.0
- 布尔:false
- 字符:空字符
- 引用数据类型:null
每一个new出来的东西都有一个地址值,使用完毕,会在垃圾回收器空闲时被回收。
四、Random
Random的作用和使用步骤
作用:用于产生一个随机数
使用步骤:
- 导包:import java.util.Random
- 创建对象 :Random r = new Random();
- 获取随机数 :int number = r.nexInt(10);
代码示例
import java.util.Random;
public class Demo01 {
public static void main(String[] args) {
Random r = new Random();
for (int i = 0; i < 10; i++) {
int number = r.nextInt(10);
System.out.println("number:" + number);
}
int x = r.nextInt(10) + 1;
System.out.println(x);
}
}
五、结束语
本篇内容首先回忆了上篇所讲到的相关知识点,其次主要讲解了Java语言中的数组。我相信通过本篇的学习,小伙伴们肯定会对数组这一知识点有了一个初步的了解,并能在代码中熟练运用数组来完成相关练习。好了,本篇的讲解就到这里了。
创作不易,期待你的一键三连!