java自学——数组

阅读: 评论:0

java自学——数组

java自学——数组

java自学——数组

  • 一维数组
    • 数组的定义或者创建
      • 方法一:
      • 方法二
      • 第三种
      • 第四种
  • 二维数组
    • 创建
    • 赋值
  • 数组的遍历
      • 第一种:通过for循环实现
      • 第二种:通过forearch
      • 可变参数
      • 注意的问题
      • 例题
    • 多维数组
      • 例题
    • 最大值和最小值的算法

一维数组

  • 概念:是一种数据结构,他是一个容器,用来盛放相同数据类型的数据。不同类型的数组可以方式不同类型的数据
  • 特点:数组属于引用数据类型,使用的时候需要开辟内存空间。数组一定要有长度,可使用数组名.length来获取数组长度
  • 数组的容量是稳定的,也就是说在定义数组的时候必须执行数组的大小
  • 数组的类型是确定的,也就是在定义数组的时候必须声明数组的类型,一种类型的数组只能存放一种数据

数组的定义或者创建

方法一:

  • 使用默认的初始值来初始化数组中的每一个元素
  • 语法:
数组的数据类型[] 数组名  = new 数组的数据类型[数组的长度];
//也可以写成:
数组的数据类型 数组名[] = new 数组的数据类型[数组的长度];
  • 未初始化的情况下,返回的是默认值
  • 动态赋值/初始化方法:类型[]数组名={…………}
  • 代码示例:
package class_baisc_basic;public class class_main_item {public static void main(String[] args) {// TODO Auto-generated method stubint[] ages = new int[30];//通过索引/下标访问数组中的元素,从0开始,最大的索引为len(数组)-1//取值:数组名[索引];赋值:数组名[索引]=值System.out.println(ages[0]);//没有初始化的话,返回的是默认值ages[0]=15;//赋值//循环赋值:for(i=0,i<30,i++){ages[i]=i+1;System.out.println(ages[i])}System.out.println(ages[0]);//取值}
}

方法二

  • 先声明,然后在赋予默认的初始值
  • 语法:
数元素类型[] 数组名;
数组名 = new 数组的数据类型[数组的长度];
//例如:
int[] scores;
scores = new int[3];

第三种

  • 先声明,然后再使用指定的值进行初始化
  • 语法:
数组数据类型[] 数组名 = new 数组元素类型{元素1,元素2};
//例如:
int[] score = new int[]{100,99,98}

第四种

  • 第三种类型的简化版本——使用数组的changing值来给数组赋值
  • 静态初始化:声明/定义一个数组的同时,对他内部的元素进行从初始化
  • 语法:``
数组数据类型[] 数组名 = {每个元素的值,英文逗号分割}
//例如:
//静态定义数组:数组类型  名称[] = {值,值,值}char sexs[] = {'男','女','c','d'};System.out.println(sexs[3]);

二维数组

  • 内部元素仍然是一堆数组的数组,就是二维数组,可以理解为嵌套数组
  • 数组内部的元素不是单个数据,而是一维数组

创建

//语法一:
数据类型[][] 数组名 = new 数据类型[二维数组的长度][]//语法二:
数据类型[][] 数组名 = {{值1,值2},{值1,值2},{值1,值2},{值1,值2}}

赋值

  • 对数据赋值的方式
    • 创建数组的时候赋值
    • 通过操作索引进行赋值
public class s_item_array {//引用数据类型的分类:数组,类,接口和枚举public static void main(String[] args) {//二维数组//静态数组初始化String[][] arr = {{"yezi","18"},{"mama","18"},{"zizi","18"}};System.out.println(arr[0]);System.out.println(arr[0][1]);//动态数组初始化String[][] k = new String [3][];//动态参数数组中,第二个数组的元素如果不设置//,只能使用以下方法赋值k[0] = new String[] {"11","22","33"} ;k[1] = new String[] {"44","55","66"} ;//设置之后,可以使用嵌套赋值String[][] n = new String [1][];k[0][1] = "77";System.out.println(n[0]);System.out.println(k[0][1]);}}
********************代码执行结果*****************
[Ljava.lang.String;@58ceff1
18
null
77

数组的遍历

  • 通过下标来访问数组中的元素
  • 下标从0开始,到数组的长度-1
  • 遍历:通过循环来实现,遍历的方式有多种

第一种:通过for循环实现

  • 代码示例:
package class_0907;public class class_shuzu {public static void main(String[] args) {// TODO Auto-generated method stubint[] scores = {100,98,96,67,32,56,99};System.out.println("数组的长度:"+scores.length);//for循环遍历int len = scores.length;for(int i=0;i<len;i++){int score = scores[i];System.out.println(score);}}
}

第二种:通过forearch

  • forearch,虽然这样念,但是关键词还是for
  • 使用时,需要两个元素,一个是要遍历的元素类型(数组类型),另外一个是变量赋值
  • 这种格式不能控制下标,只能顺序输出
  • 此种方式实在jdk1.5之后,新增的特性
//forearch,虽然这样念,但是关键词还是for
public class class_shuzu {public static void main(String[] args) {// TODO Auto-generated method stubint[] scores = {100,98,96,67,32,56,99};int len = scores.length;System.out.println("数组的长度:"+len);//需要两个元素,一个是要遍历的元素类型(数组类型),另外一个是变量赋值//括号中的意思:将scores数组中的值取出后,一个一个的赋值给xfor(int x:scores){System.out.println(x);}}
}

可变参数

  • jdk1.5后存在
  • 可变参数只能是参数列表中的最后一个值
  • 可变参数作为数组使用
  • 使用方式:方法名(参数类型 …参数名)
  • 意义:可变参数传入的是数组的数值,可以自定义输出的数组信息
  • 可变参数中传入的信息,不一定是数组中的值
  • 代码示例:
public class class_shuzu {public static void main(String[] args) { // TODO Auto-generated method stubint[] y = {100,98,96,67,32,56,99};//可变参数传入的是数组的值,自定义输出的数据print_two(y,100,98,67);}//前面数数组,后面是可变参数public static void print_two(int[] y,int ...x){int len_y = y.length;System.out.println("y数组的长度:"+len_y);for(int i=0;i<len_y;i++){int score = y[i];System.out.println(score);}int len_x = x.length;System.out.println("x数组的长度:"+len_x);for(int i=0;i<len_x;i++){System.out.println(x[i]);	}}
}

注意的问题

  • 遍历数组的时候需要注意两个问题:
  • 第一:空指针异常:NullPointerException
  • 第二:数组越界异常:ArrayIndexOutOfBoundsException
  • 解释:
  • 空指针异常:当一变量为null,也就是说没有赋值的情况下,调用了该变量的属性或者方法
  • 数组越界异常:遍历数组的时候,遍历完整个数组时,判断条件没有使用完,再次取值时没有取到值
  • 代码示例:
public class class_shuzu {public static void main(String[] args) {// TODO Auto-generated method stubint[] y = {100,98,96,67,32,56,99};print_three(y);//空指针异常int[] x = null;print_three(x);}public static void print_three(int[] y){//数组越界异常int len_y = y.length;System.out.println("y数组的长度:"+len_y);//数组的长度为len_y,最大的下标为len_y-1,等于len_y时就越界for(int i=0;i<=len_y;i++){int score = y[i];System.out.println(score);}		}
}

例题

1.从键盘中任意输入一个数,判断数列中是否包含此数

package class_0908;
import java.util.Scanner;public class class_liti {public static void main(String[] args) {// TODO Auto-generated method stubScanner input = new Scanner(System.in);System.out.println("请输入一个数值:");int num = Int();int[] data_l = {1,2,3,4,5,6,7,8,9};boolean tag =false;for(int i =0;i<data_l.length;i++){if(num==data_l[i]){tag = true;break;}}if(tag==true){System.out.println("答对了");}else {System.out.println("答错了");}}
}
  • 结合random来进行?
package class_0908;
import java.util.Scanner;
import java.util.Random;//导入随机数模块public class class_liti {public static void main(String[] args) {// TODO Auto-generated method stubScanner input = new Scanner(System.in);System.out.println("请输入一个数值:");int num = Int();Random r = new Random();//创建一个可以生成随机数的工具int[] data_l = new int[5];int len = data_l.length;for(int i=0;i<len;i++){data_l[i] = r.nextInt(30);//随机生成30以内的数值}boolean tag =false;for(int i =0;i<data_l.length;i++){if(num==data_l[i]){tag = true;break;}}if(tag==true){System.out.println("答对了");}else {System.out.println("答错了");}}
}

2.打印正三角形,如下图:
A
B B B
C C C C C
D D D D D D D
E E E E E E E E E
F F F F F F F F F F F
G G G G G G G G G G G G G

package class_0908;public class class_print {public static void main(String[] args) {// TODO Auto-generated method stubchar str_l[] = {'A','B','C','D','E','F','G'};int len = str_l.length;for(int i = 1;i<=len;i++){//三角形的左半部分输入空格//i的取值范围:1-7//第一个for循环,i=1时,j:1,2,3,4,5,6//i=2,j:2,3,4,5,6,以此类推,是空格的打印数for(int j = i;j<len;j++){System.out.print(" ");}//字母的打印数//i=1,j:1//i=2, j:1,2,3,以此类推//程序由上至下执行,先打印空格,再打印字母for(int j =1;j<=i*2-1;j++){System.out.print(str_l[i-1]);}System.out.println();}}
}

多维数组

  • java中没有真正的多维数组,多维数组的表示方式是数组中的元素还是数值

例题

参加程序员大赛,有三个班级的学员参加,记录每个学员的成绩并记录平均分

package class_0908;public class class_many_list {public static void main(String[] args) {// TODO Auto-generated method stub//多维数组的定义方式如下:int[][] data_l ={{100,90,89},{90,89,78},{60,70,80}};int classl = data_l.length;//多维数组取值,通过for循环,一般是嵌套几层就用几个for循环for(int i=0;i<classl;i++){int sum = 0;int stulen = data_l[i].length;for(int j =0;j<stulen;j++){int score = data_l[i][j];//嵌套数组的取值方式,下标取值sum+=score;}int avg = sum/stulen;System.out.println("第"+(i+1)+"班的平均成绩是:"+avg);}}}

最大值和最小值的算法

  • 思路:使用for循环读取数组中的数据,然后设置一个最大值的变量为数组中的第一个值,使用最大值和列表中的数值作对比,最大值大于列表数值,就不交换,小于就交换
  • 最小值也类似于此种方式
package class_0908;public class class_max_min {public static void main(String[] args) {// TODO Auto-generated method stubint[] data_num = {100,101,200,99};int max = data(data_num);System.out.println("数组的最大值为:"+max);int min = data_1(data_num);System.out.println("数组的最小值为:"+min);}public static int data(int[] data_list){int max = data_list[0];int len_data = data_list.length;for(int i=0;i<len_data;i++){//判断,第一个数与for循环读取的数值比大小,小的话才交换if (max<data_list[i]) {//两个数交换//先求和,然后用总和减去另外一个数,即可达到交换的目的data_list[i] = data_list[i]+max;max = data_list[i]-max;data_list[i] = data_list[i]-max;}}return  max;}public static int data_1(int[] data_list){int max = data_list[0];int len_data = data_list.length;for(int i=0;i<len_data;i++){//判断,第一个数与for循环读取的数值比大小,大的话才交换if (max>data_list[i]) {//两个数交换//先求和,然后用总和减去另外一个数,即可达到交换的目的data_list[i] = data_list[i]+max;max = data_list[i]-max;data_list[i] = data_list[i]-max;}}return  max;}}

本文发布于:2024-01-31 14:43:45,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170668342529266.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数组   java
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23