Logo

郎哥编程

一维数组

2019-12-11 1036

前面讨论过一维数组的概念,一维数组只有一个下标。

声明一维数组

在java语言中,声明一维数组的语法为:

类型说明符  数组名[];

其中类型说明符可以是Java语言中任何有效的数据类型,如int、float、char等。数组名是数组的名称,数组名的命名需符合变量命名规则。

例如:

int  a[];
 //定义了一个数组,名称为a,数组中的元素类型是int
float   score[];
//定义了一个数组,名称为float,数组中的元素类型是float

一维数组的初始化

声明了一个数组,只是得到了一个存放数组的地址变量,并没有为数组元素分配内存空间,因而不能直接使用,必须经过初始化,为数组分配内存空间才能使用。

数组的初始化有两种方法,一种是静态初始化,另一种是动态初始化。

1、静态初始化

在声明数组时,直接给数组的每个元素赋上一个初始值。静态初始化一般在数组元素比较少时使用。

静态初始化的语法为:

数组类型  数组名[]={值1, 值2,……, 值2};

例如:

int  a[] = {26,67,89,106,210};
float  score[] = {87.5,67.2,96.8,92.6,75.9};
char   chArray[] = {‘a’,’m’,’o’,’p’,’q’};

对于数组a,可以看出数组中有5个元素,分别是a[0]、a[1]、a[2]、a[3]、a[4]、a[5],即数组下标从0开始,这5个元素的数值依次为a[0]=26、a[1]=67、a[2]=89、a[3]=106、a[4]=210。其在内存中结构如下图所示:

image.png            

                               

a数组在内存中的存储结构

错误的初始化:

int  a[];
a[] = {26,67,89,106,210};

数组的初始化只能在声明中完成,不能声明完成后,再进行初始化。

2、动态初始化

有时,数组并不需要在声明时就赋初值,而是在使用时才进行赋值。另外,有些数组比较大,元素非常多,用静态初始化不方便,这样就需要使用动态初始化。数组的动态初始化使用new操作符。

动态初始化的方式有两种。

(1)先声明数组,再用new分配内存

例如:

int  a[];
a = new  int[4];

Java的new运算操作符,用来在内存中申请存储空间,并将申请到存储空间的首地址赋值给被申请的变量。语句a = new  int[4]为数组a分配了4个元素,这4个元素分别是a[0]、a[1]、a[2]、a[3],它们的值都为0。

(2)在定义数组的同时用new分配内存

例如:

int  a[] = new  int[4];
int  size = 100;
//也可以用变量给出数组的大小
float  score[] = new float[size];

一维数组元素的访问

使用数组的最基本操作是数组元素的访问,对数组的使用最终都通过对元素的使用而实现。数组的元素通过数组下标进行访问。前面已经讲过,在Java语言中,数组下标是从0开始的,所以包含n个元素的数组下标的范围是0到n-1。例如:前面定义的数组a,其下标范围为0到4。要访问a数组的元素,可通过a[0]、a[1]、a[2]、a[3]、a[4]访问a数组的各个元素,此时,方括号中的数字是数组的下标,表示访问数组的第几个元素。

在Java语言中,数组也是一种对象,对象将在后面的学习单元讲述。数组被初始化后就确定了它的长度,对于每个已经分配了存储空间的数组,Java用一个数据成员length来存储这个数组的长度值。

例如:

int  a[] = {26,67,89,106,210};
int  i;
for( i = 0; i < a.length; i++ )
{
   System.out.printf("第 %d 数组元素的值为: %d;\n",a[i]);   
}

在遍历数组的for循环中,循环条件为a.length,a.length就是数组长度的值,在a数组中,a.length的值为5。

下面通过一个完整的示例,演示如何声明一个数组,并通过nextFloat方法为数组动态赋值。

案例1:创建一个一维数组,用来记录5件商品的单价。商品单价由用户输入,最后遍历数组输出商品的单价和5件商品的总价。

在eclipse下新建项目PbaseUnit12,创建包unit,在unit包下创建Java类ArraySample1。代码如下:

/** 
* @Title: ArraySample1.java 
* @Package unit 
* @Description: Java基础知识课程案例
* @author 编程训练营 
* @date 
* @version V1.0 
*/ 
 
package unit;
 
import java.util.Scanner;
 
/**
 * @ClassName: ArraySample1
 * @Description: 数组结构(一维数组)案例1
 * @author 编程训练营
 * @date
 *
 */
 
public class ArraySample1 {
 
    /**
     * @Title: main
     * @Description: Java程序入口main方法
     * @param @param args 参数
     *
     * @return void 返回类型
     * @throws
     */
 
    public static void main(String[] args) {
       /**
        * 声明并初始化存储商品价格的数组
        * 该数组有5个元素,数据类型是float
        */
       float price[] = new float[5];
       // 声明存储商品总价的变量,并初始化为0.0
       float total = 0.0f;
       // count为循环次数
       int count = 5;
       // i为循环变量
       int i;
       Scanner sc = new Scanner(System.in);
       // 循环接收用户输入的5个商品价格
       for (i = 0; i < count; i++) {
           System.out.printf("请输入 %d 个商品的价格: ", i + 1);
           // 用户输入的第i件商品价格赋值给price数组的第i个元素
           price[i] = sc.nextFloat();
           total += price[i];
       }
       System.out.println("*****商品小计******");
       // 循环输出商品的价格:
       for (i = 0; i < count; i++) {
           System.out.printf("第 %d 件商品价格为: %.2f;\n", i + 1, price[i]);
       }
       System.out.printf("商品价格合计为: %.2f", total);
    }
 
}

程序结构分析

程序功能主要是演示数组声明、初始化、动态赋值、输出数组元素的使用方法。

程序声明包含5个元素的数组price,用来存储用户输入的5件商品价格,并通过循环获取用户输入的商品价格,同时计算商品总价,商品总价存储到声明的变量total中。然后,循环输出每件商品的价格,最后输出商品总价。

程序执行结果如下图所示:

image.png

可以把一维数组看作超市商品货柜中一列存放同类商品的格子,商家如果要把商品放到格子中,需要提前向超市申请格子的使用权,超市同意使用后,商家才能把商品放到格子中,然后根据格子的编号存取商品。再回到编程中来,程序要使用一维数组,必须要向计算机操作系统申请数组的使用权以及使用空间大小,操作系统分配给数组存储空间后,程序方可使用。因此,数组在使用中必须先声明并初始化后才能使用,声明和初始化数组的目的是为其留出所需要的存储空间,用来存储数组元素。


代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论