导航:首页 > 编程语言 > java数组

java数组

发布时间:2022-01-31 20:02:09

1. java中的数组

·数组是可以保存一组数据的一种数据结构,它本身也会占用一个内存地址,因此数组是引用类型 ·一个数组中只能保存一种类型的数据,可以保存基本类型,也可以保存Object。一个int,一个String是不能同时保存在一个数组内的(如果是对象型数组,注意存放的每一个对象都必须被实例化)。 ·数组的长度规定好即固定,无论其保存的数据是否填满数组 ·数组一旦定义好就不可以修改长度,如果要修改就必须重新定义一个新数组或者引用其他的数组,因此数组的灵活性较差 ·数组拥有边界检查,尝试获取不在数组范围内的值时,会抛出异常

2. Java中数组的定义与使用方法

Java中数组的定义与使用方法:
1、数组的定义
语法有两种:
type arrayName[];
type[] arrayName;
type 为Java中的任意数据类型,包括基本类型和组合类型,arrayName为数组名,必须是一个合法的标识符,[ ] 指明该变量是一个数组类型变量。
例如:
int demoArray[];
int[] demoArray;
这两种形式没有区别,使用效果完全一样,读者可根据自己的编程习惯选择。
注意:Java在定义数组时并不为数组元素分配内存,因此[ ]中无需指定数组元素的个数,即数组长度。而且对于如上定义的一个数组是不能访问它的任何元素的,开发者必须要为它分配内存空间,这时要用到运算符new,其格式如下:
arrayName=new type[arraySize];
其中,arraySize 为数组的长度,type 为数组的类型。如:
demoArray=new int[3];//为一个整型数组分配3个int 型整数所占据的内存空间。
2、数组的初始化
可以在声明数组的同时进行初始化(静态初始化),也可以在声明以后进行初始化(动态初始化)。例如:
// 静态初始化
// 静态初始化的同时就为数组元素分配空间并赋值
int intArray[] = {1,2,3,4};
String stringArray[] = {"", "", "网络知道"};
// 动态初始化
float floatArray[] = new float[3];
floatArray[0] = 1.0f;
floatArray[1] = 132.63f;
floatArray[2] = 100F;

3、数组的使用:
每个数组都有一个length属性来指明它的长度,例如 intArray.length 指明数组 intArray 的长度。
【示例】写一段代码,要求输入任意5个整数,输出它们的和。
import java.util.*;
public class Demo {
public static void main(String[] args){
int intArray[] = new int[5];
long total = 0;
int len = intArray.length;

// 给数组元素赋值
System.out.print("请输入" + len + "个整数,以空格为分隔:");
Scanner sc = new Scanner(System.in);
for(int i=0; i<len; i++){
intArray[i] = sc.nextInt();
}

// 计算数组元素的和
for(int i=0; i<len; i++){
total += intArray[i];
}

System.out.println("所有数组元素的和为:" + total);
}
}

运行结果:
请输入5个整数,以空格为分隔:10 20 15 25 50
所有数组元素的和为:120

3. java中数组的定义

//指定长度为10
String [] arr = new String[10];
//两种没什么区别,只是上面可读性比较好
String arr[] = new String[10];
//直接初始化数组
String[] arr = {"a","b"};
//先定义一个数组
String [] arr = null;
//赋值数组的第一个值
arr[0] = "a";

4. JAVA数组

这个程序为了易删除,并没有采用数组,而采用了双向链表

链表中的元素是结点Kid,Kid有一个左结点,一个右结点,左结点指向上一个Kid,右结点指向下一个Kid。这些在构造函数中完成的,其中first是第一个结点,last是最后一个结点。

这样就把500个孩子串成一条链,并且这是一个环状的链,你画个图就明白了。

这样删除起来就方便了,如果要删一个结点

这个结点的左结点的右结点=这个结点的结节点

这个结点的右结点的左结点=这个结点的结节点

---------------------------------------------------------------

具体讲讲add的算法,你准备一张纸,在上面画就能理解:

每个孩子的编号id设为count,然后把这个孩子往链表里添

如果目前没有链表,即孩子数量为0,则创建链表,链头是first,链尾是last

1.添加一个孩子,这个孩子是这个链表的链头first,也是链尾last,即first=last=k;

2.由于没有其他结点,这个结点的左结点就是自己,右结点也是自己,即k.left=k.right=k;

如果目前已经有链表,则

1.添加新结点到链尾的下一个,即last.right=k;,

2.新结点的左结点是之前的链尾,即k.left=last;

3.由于是一个环形的链,新结点的右结点链头k.right=first;

4.由于是一个环形的链,链头的左结点是新结点first.left=k;

5.新结点是新链的链尾last=k;

6.链头不变

5. java数组

数组是有序数据的集合,数组中的每个元素具有相同的数组名和下标来唯一地确定数组中的元素。

§5.1一维数组

一、一维数组的定义

type arrayName[];

其中类型(type)可以为Java中任意的数据类型,包括简单类型组合类型,数组名arrayName为一个合法的标识符,[]指明该变量是一个数组类型变量。例如:

int intArray[];

声明了一个整型数组,数组中的每个元素为整型数据。与C、C++不同,Java在数组的定义中并不为数组元素分配内存,因此[]中不用指出数组中元素个数,即数组长度,而且对于如上定义的一个数组是不能访问它的任何元素的。我们必须为它分配内存空间,这时要用到运算符new,其格式如下:

arrayName=new type[arraySize];

其中,arraySize指明数组的长度。如:

intArray=new int[3];

为一个整型数组分配3个int型整数所占据的内存空间。

通常,这两部分可以合在一起,格式如下:

type arrayName=new type[arraySize];

例如:

int intArray=new int[3];

二、一维数组元素的引用

定义了一个数组,并用运算符new为它分配了内存空间后,就可以引用数组中的每一个元素了。数组元素的引用方式为:

arrayName[index]

其中:index为数组下标,它可以为整型常数或表达式。如a[3],b[i](i为整型),c[6*I]等。下标 从0开始,一直到数组的长度减1。对于上面例子中的in-tArray数来说,它有3个元素,分别为:

intArray[0],intArray[1],intArray[2]。注意:没有intArray[3]。

另外,与C、C++中不同,Java对数组元素要进行越界检查以保证安全性。同时,对于每个数组都有一个属性length指明它的长度,例如:intArray.length指明数组intArray的长度。

例5.1

public class ArrayTest{
public static void main(String args[]){
int i;
int a[]=newint[5];
for(i=0;i<5;i++)
a[i]=i;
for(i=a.length-1;i>=0;i--)
System.out.println("a["+i+"]="+a[i]);
}
}

运行结果如下:

C:\>java ArrayTest

a[4]=4
a[3]=3
a[2]=2
a[1]=1
a[0]=0

该程序对数组中的每个元素赋值,然后按逆序输出。

三、一维数组的初始化

对数组元素可以按照上述的例子进行赋值。也可以在定义数组的同时进行初始化。

例如:

int a[]={1,2,3,4,5};

用逗号(,)分隔数组的各个元素,系统自动为数组分配一定空间。

与C中不同,这时Java不要求数组为静态(static)。

四、一维数组程序举例:

例5.2Fibonacci数列

Fibonacci数列的定义为:

F1=F2=1,Fn=Fn-1+Fn-2(n>=3)

public classFibonacci{
public static void main(String args[]){
int i;
int f[]=new int[10];
f[0]=f[1]=1;
for(i=2;i<10;i++)
f[i]=f[i-1]+f[i-2];
for(i=1;i<=10;i++)
System.out.println("F["+i+"]="+f[i-1]);
}
}

运行结果为:

C:\>java Fibonacci

F[1]=1
F[2]=1
F[3]=2
F[4]=3
F[5]=5
F[6]=8
F[7]=13
F[8]=21
F[9]=34
F[10]=55

例5.3冒泡法排序(从小到大)

冒泡法排序对相邻的两个元素进行比较,并把小的元素交到前面。

public class BubbleSort{
public static void main(String args[]){
int i,j;
int intArray[]={30,1,-9,70,25};
int l=intArray.length;
for(i=0;i<l-1;i++)
for(j=i+1;j<l;j++)
if(intArray[i]>intArray[j]){
int t=intArray[i];
intArray[i]=intArray[j];
intArray[j]=t;
}
for(i=0;i<l;i++)
System.out.println(intArray[i]+"");
}
}

运行结果为:

C:\>java BubbleSort
-9
1
25
30
70

§5.2多维数组

与C、C++一样,Java中多维数组被看作数组的数组。例如二维数组为一个特殊的一维数组,其每个元素又是一个一维数组。下面我们主要以二维数为例来进行说明,高维的情况是类似的。

一、二维数组的定义

二维数组的定义方式为:

type arrayName[][];

例如:

int intArray[][];

与一维数组一样,这时对数组元素也没有分配内存空间,同要使用运算符new来分配内存,然后才可以访问每个元素。

对高维数组来说,分配内存空间有下面几种方法:

1直接为每一维分配空间,如:

int a[][]=new int[2][3];

2从最高维开始,分别为每一维分配空间,如:

int a[][]=new int[2][];
a[0]=new int[3];
a[1]=new int[3];

完成1中相同的功能。这一点与C、C++是不同的,在C、C++中必须一次指明每一维的长度。

二、二维数组元素的引用

对二维数组中每个元素,引用方式为:arrayName[index1][index2] 其中index1、index2为下标,可为整型常数或表达式,如a[2][3]等,同样,每一维的下标都从0开始。

三、二维数组的初始化

有两种方式:

1直接对每个元素进行赋值。

2在定义数组的同时进行初始化。

如:int a[][]={{2,3},{1,5},{3,4}};

定义了一个3×2的数组,并对每个元素赋值。

四、二维数组举例:

例5.4矩阵相乘

两个矩阵Am×n、Bn×l相乘得到Cm×l,每个元素Cij=�aik*bk (i=1..m,n=1..n)

public class MatrixMultiply{
public static void main(String args[]){
int i,j,k;
int a[][]=new int[2][3];
int b[][]={{1,5,2,8},{5,9,10,-3},{2,7,-5,-18}};
int c[][]=new int[2][4];
for(i=0;i<2;i++)
for(j=0;j<3;j++)
a[i][j]=(i+1)*(j+2);
for(i=0;i<2;i++){
for(j=0;j<4;j++){
c[i][j]=0;
for(k=0;k<3;k++)
c[i][j]+=a[i][k]*b[k][j];
}
}
System.out.println("\n***MatrixA***");
for(i=0;i<2;i++){
for(j=0;j<3;j++)
System.out.print(a[i][j]+"");
System.out.println();
}
System.out.println("\n***MatrixB***");
for(i=0;i<3;i++){
for(j=0;j<4;j++)
System.out.print(b[i][j]+"");
System.out.println();
}
System.out.println("\n***MatrixC***");
for(i=0;i<2;i++){
for(j=0;j<4;j++)
System.out.print(c[i][j]+"");
System.out.println();
}
}
}

其结果为:

C:\>java MatrixMultiply

for(j=0;j<4;j++)
System.out.print(c[i][j]+"");
System.out.println();
}
}
}

其结果为:

C:\>java MatrixMultiply

***MatrixA***
2 3 4
4 6 8
***MatrixB***
1 5 2 8
5 9 10 -3
2 7 -5 -18
***MatrixC***
25 65 14 -65
50 130 28 -130

如果你学过线性代数,应该可以比较好地理解多维数组。
多维数组和矩阵结合紧密。

a[i][j]就是第i-1行的第j-1列的元素,因为下标是从0开始的。
比如:
一个数组:1 2 3
4 5 6
a[0][0]=1 a[0][1]=2 a[0][2]=3
a[1][0]=3 a[1][1]=5 a[1][2]=6
我推荐你看几本书:
1.Thinking in Java
2.Java 2 核心技术
3.Java2实用教程
4.面向对象程序设计与java语言

6. 关于JAVA数组

运行后信息输出到C:\123.txt这个文件,有不明白就 Email: [email protected]

Test.java

import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.text.DecimalFormat;

public class Test {

/**
* @param args
*/
public static void main(String[] args) {
PrintWriter pw = null;

/**
* 1 表示把输出到c:\123.txt 其余情况输出到控制台
*
* @param i
* @return
*/
int method = 1;
pw = createPW(method);

/**
* 创造一个二维数组,数组的行代表层数,数组的列代表房间号。
*/
float[][] a = create2DimArray(30, 20);
/**
* 用一个嵌套循环,把基础房间价格放在每层的每间房里。
*/
setDefualt(a, 150);
/**
* 用一个巢状循环(不知道什么是巢状循环,用for嵌套代替吧),把每层每间的基础价格显示(打印)出来。
*/
pw.write("初始房间价格列表:");
pw.write("\r\n");
print2DimArray(a, pw);

pw.write("============================================================================分割线================================================================");
pw.write("\r\n");
/**
* 用一个嵌套循环,根据上面的BCDE的条件来调整每层的房间价格。
*
* B.靠沙滩(房间6~11)+$100
*
* C.从侧面能看到海的房间每间(房间1~5,12~16)+$50
*
* D.四个角落的大房间(房间1,6,11,16)每个+$100
*
* E顶层(30层)+$100
*/
modifyPrice(a);

/**
* .用一个嵌套循环,把每层每间的调整过后的房价显示出来。形式是,房间号FRR,和价格 $XXX.XX
*/
pw.write("更新后房间价格列表:");
pw.write("\r\n");
print2DimArray(a, pw);

pw.flush();

/**
* 如果输出到文件流的话,还要关闭对应的输出流,控制台输出就不用关闭了
*/
if (method == 1) {
pw.close();
}

}

/**
* 1 表示把输出到c:\123.txt 其余情况输出到控制台
*
* @param i
* @return
*/
private static PrintWriter createPW(int i) {
PrintWriter pw = null;
switch (i) {
case 0: {
pw = new PrintWriter(System.out);
break;
}
case 1: {
try {
pw = new PrintWriter("c:\\123.txt");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

break;
}
default: {
pw = new PrintWriter(System.out);
break;
}
}

return pw;
}

/**
* 用一个嵌套循环,根据上面的BCDE的条件来调整每层的房间价格。
*
* B.靠沙滩(房间6~11)+$100
*
* C.从侧面能看到海的房间每间(房间1~5,12~16)+$50
*
* D.四个角落的大房间(房间1,6,11,16)每个+$100
*
* E顶层(30层)+$100
*/
private static void modifyPrice(float[][] a) {
for (int i = 0, k = a.length; i < k; i++) {
float[] b = a[i];
for (int m = 0, n = b.length; m < n; m++) {
b[m] = modifyPrice(b[m], i, m);
}
}
}

private static float modifyPrice(float value, int i, int m) {
int a = i + 1;
int b = m + 1;
if (b > 6 && b <= 11) {
value += 100;
} else if ((b > 1 && b <= 5) || b > 12 && b < 16) {
value += 50;
} else if (b == 1 || b == 16) {
value += 150;
} else if (b == 6 || b == 11) {
value += 200;
}

if (a == 30) {
value += 100;
}
return value;
}

/**
* 用一个巢状循环(不知道什么是巢状循环,用for嵌套代替吧),把每层每间的基础价格显示(打印)出来。
*/
private static void print2DimArray(float[][] a, PrintWriter pw) {
if (pw == null) {
print2DimArray(a);
}
String s;
float[] b;
DecimalFormat df = new DecimalFormat(".00");
for (int i = 0, k = a.length; i < k; i++) {
b = a[i];
for (int m = 0, n = b.length; m < n; m++) {
s = "房间号:" + (i < 9 ? " " : " ") + (i + 1)
+ (m < 9 ? "0" : "") + (m + 1) + ",";
s += "价格$" + df.format(b[m]) + " ";
pw.write(s);
}
pw.write("\r\n");
}
}

/**
* 用一个巢状循环(不知道什么是巢状循环,用for嵌套代替吧),把每层每间的基础价格显示(打印)出来。
*/
private static void print2DimArray(float[][] a) {
for (int i = 0, k = a.length; i < k; i++) {
float[] b = a[i];
for (int m = 0, n = b.length; m < n; m++) {
System.out.printf("房间号:" + (i < 9 ? " " : " ") + "%d"
+ (m < 9 ? "0" : "") + "%d,价格:$%#.2f ", i + 1, m + 1,
b[m]);
}
System.out.println("");
}
}

/**
* 用一个嵌套循环,把基础房间价格放在每层的每间房里。
*/
private static void setDefualt(float[][] a, float value) {
for (int i = 0, k = a.length; i < k; i++) {
float[] b = a[i];
for (int m = 0, n = b.length; m < n; m++) {
b[m] = value;
}
}
}

/**
* 创造一个二维数组,数组的行代表层数,数组的列代表房间号。
*/
private static float[][] create2DimArray(int i, int j) {
float[][] a = new float[i][i];
return a;
}

}

7. Java数组

public static void main(String[] args) {
int[] arr=new int[10];
for(int i=0;i<arr.length;i++){
arr[i]=(int)(Math.random()*10);
}
for(int n :arr){
System.out.println(n);
}
int arrMax=0,arrMin=0;
arrMax=arr[0];
arrMin=arr[0];
for(int i=0;i<arr.length;i++){
if(arr[i]>arrMax){arrMax=arr[i];}
if(arr[i]<arrMin){ arrMin=arr[i];}
}
System.out.println("最大值---"+arrMax+"\n"+"最小值---"+arrMin);

for(int i=0;i<arr.length;i++){
for(int j=0;j<arr.length-i-1;j++){

if(arr[j]>arr[j+1]){
int num=arr[j];
arr[j]=arr[j+1];
arr[j+1]=num;
}
}
}
for(int n :arr){
System.out.println(n);
}

} 记得采纳哦

8. java数组(初学者)

当你建立数组 a[] b[] 后 各自分配了一个内存地址, 假设a[] 的是A(这是段0和1组成的代码) A里边存放的是100,200,300
当你在程序中调用a[],程序会先找到A,然后用里边的东西所以例如:a[0]=100
b[]的是B(同上)
B里存放的是 10,11,12,13,14,15,16
b[0]=10
当你b=a时,b的内存地址不再指向B而是指向A了,于是它里边的东西就跟a[]的一样了,故b[0]=100了
比喻:
a,b都是钥匙
a可以打开A房间 里边放了 100...
b可以打开B房间 里边放了10,11...
现在改造了 b=a
就是把b要是改成了跟a一样的钥匙,所以它不能再开B房间,只能开A房间,大小内容跟a一样了

你要是不给我分,我也彻底无语了,我可是认真敲出来的答案

9. JAVA数组解决

两个for循环取二维数组的值,取数值的第一个值,生成一个数组,然后冒泡排序

10. Java数组有哪些用法

数组:是一组相关变量的集合数组是一组相关数据的集合,一个数组实际上就是一连串的变量,数组按照使用可以分为一维数组、二维数组、多维数组

数据的有点不使用数组定义100个整形变量:int i1;int i2;int i3

使用数组定义 int i[100];

数组定义:int i[100];只是一个伪代码,只是表示含义的(1)一维数组

一维数组可以存放上千万个数据,并且这些数据的类型是完全相同的,使用java数组,必须经过两个步骤,声明数组和分配内存给该数组,声明形式一声明一维数组:数据类型 数组名[]=null;非配内存给数组:数组名=new 数据类型[长度];声明形式二声明一维数组:数据类型 [] 数组名=null;

(2)java数据类型分为两大类1.基本数据类型int、long操作的时候本身就是具体的内容引用数据类型:数组、类、接口

引用传递的就是一个内存的使用权,一块内存空间,可能有多个人同时使用

2.事例声明数组

阅读全文

与java数组相关的资料

热点内容
python超简单编程 浏览:257
获取命令方 浏览:976
怎样制作文件夹和图片 浏览:58
调研编译写信息 浏览:860
python冯诺依曼 浏览:417
同时安装多个app有什么影响 浏览:254
奥术杀戮命令宏 浏览:183
用sdes加密明文字母e 浏览:360
单片机原理及应用试题 浏览:424
易语言开启指定文件夹 浏览:40
马思纯参加密室大逃脱 浏览:322
文件夹冬季浇筑温度 浏览:712
京东有返点的aPp叫什么 浏览:603
如何查看u点家庭服务器是几兆 浏览:262
python应用接口怎么接 浏览:67
腐蚀怎么进不去服务器啊 浏览:359
linuxcpiogz 浏览:631
安卓中的布局是什么文件 浏览:397
dex反编译部分代码无法查看 浏览:464
linuxandroid编译 浏览:603