JAVA数组学习记录

一、基础知识

来源:为了将分散的相同类型的变量集中起来,方便管理

数组:相同类型的变量作为构成元素呈直线状连续排列而成,元素类型为构成元素类型

声明方式:int [] a  或 int a []  a被称为数组变量

数组主体需另外创建如:new int [5]

通过索引访问元素,索引从0开始,如a[0],a[1]

赋值:a[1]=36

System.out.println("a["+0+"]="+a[0]),将输出a[0]=37

"a["  输出为a[

 +0+ 输出为0 

 "]="输出为]=

二、常用代码

1、代码输入输出数据

获取数组个数:a.length

public class Matix {
public static void main (String[] args)//程序入口 {
    double[] b=new double[5];
    b[0]=2;
    b[1]=3;
    b[2]=4;
    b[3]=b[1]*2;
    System.out.println("b["+0+"]="+b[0]);
    System.out.println("b["+1+"]="+b[1]);
    System.out.println("b["+2+"]="+b[2]);
    System.out.println("b["+3+"]="+b[3]);
    System.out.println("b["+4+"]="+b[4]);

}
}


for语句
public class Matix {
public static void main (String[] args) {
    double[] b=new double[5];

    for(int i=0;i<b.length;i++)
        b[i]=i*2;
    for(int i=0;i<b.length;i++)
    System.out.println("b["+i+"]="+b[i]);
}
}


   2、通过键盘读入数值:

import java.util.Scanner;

public class Matix {
public static void main (String[] args) {
    Scanner scan = new Scanner(System.in);
    System.out.print("元素个数:");
     int n = scan.nextInt();
    double[] b =new double[n];

    for(int i=0;i<b.length;i++) {
        System.out.print("b[" + i + "]=" );
        b[i] =scan.nextDouble();
    }
    for(int i=0;i<b.length;i++)
    System.out.println("b["+i+"]="+b[i]);
}
}
  • stdIn是"standard input"的缩写,更明确表示标准输入源
import java.util.Random;
import java.util.Scanner;

public class Matix {
public static void main (String[] args) {
    Random rand=new Random();
    Scanner stdIn = new Scanner(System.in);
    System.out.print("元素个数:");
     int n =stdIn.nextInt();
    int[] a =new int[n];

    for(int i=0;i<a.length;i++)
        a[i] =1+rand.nextInt(10);

    for(int i=0;i<a.length;i++){
    System.out.println("a["+i+"]:");
    for(int j=0;j< a[i];j++)
        System.out.print('*');
    System.out.println();
}
}
    }

第一个for赋值

第二个for使用*排列成的柱形图来显示元素的值并根据循坏次数判断*的数量

数组初始化:

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

或 int[]a;

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

人数不是5,而是用final变量ninzu表示,当人数发生变化时,只修改ninzu的初始值就行

final的特性:不可变性、必须初始化

3、逐个输出元素

 System.out.print("a={");
    for(int i=0;i<a.length;i++) {
        System.out.print(a[i]);
        if(i!=a.length-1) {
            System.out.print(",");
        }
        }
    System.out.print("}");
    }
}

输出a{1,2,3},

遍历:逐个依次访问数组元素

4、计算最大值、最小值、总值、平均值

public class Matix {
public static void main (String[] args) {
    Scanner stdIn = new Scanner(System.in);
    System.out.print("班级人数:");
     int n =stdIn.nextInt();
    int sum=0;
    int[] a =new int[n];
    for(int i=0;i<a.length;i++) {
        System.out.print((i+1)+"号的分数:");
        a[i] = stdIn.nextInt();
        sum+=a[i];
    }
int max=a[0];
    for(int i=0;i<a.length;i++)
        if(a[i]>max) max=a[i];
    int min=a[0];
    for(int i=0;i<a.length;i++)
        if(a[i]<min) min=a[i];
    System.out.println("总分为"+sum+"分。");
    System.out.println("平均分为"+(double)sum/a.length +"分。");
    System.out.println("最高分为"+max+"分。");
    System.out.println("最低分为"+min+"分。");
    }
}

5、线性查找

public class Matix {
    public static void main(String[] args) {
        Random rand = new Random();
        Scanner stdIn = new Scanner(System.in);

        final int n = 12; //元素个数
        int[] a = new int[n];

        for (int j = 0; j < n; j++)
            a[j] = rand.nextInt(10);

        System.out.println("数组a中全部元素的值\n{");
        for (int j = 0; j < n; j++)
            System.out.print(a[j] + " ");
        System.out.println("}");

        System.out.print("要查找的数值:");
        int key = stdIn.nextInt();

        int i;
        for (i = 0; i < n; i++)
            if (a[i] == key)
                break;
        if (i < n)
            System.out.print("该元素是a[" + i + "。");
        else System.out.print("该元素不存在。");
    }
}

查找继续的判断语句为i<n&&a[i]!=key

6、拓展for语句

class Matix{
    public static void main(String[] args){
        double[] a={1.0,2.0,3.0,4.0,5.0};
        for(int i=0;i<a.length;i++)
            System.out.println("a["+i+"]="+a[i]);
             double sum=0;
             for(double i:a)
                 sum+=i;
             System.out.println("全部元素总和为"+sum+"。");

    }
}

其中double(i:a)中i指的是数组中的元素,表示遍历过程中正在查看的元素

6、判断输出元素值

import java.util.Random;
import java.util.Scanner;
class Matix{
    public static void main(String[] args) {
        Random rand = new Random();
        Scanner stdIn = new Scanner(System.in);
        System.out.print("元素个数为:");
        int n = stdIn.nextInt();
        int[] a = new int[n];
        a[0] = rand.nextInt(10);

        for (int i = 1; i < a.length; i++) {
            a[i] = rand.nextInt(10);
            for (int j = 0; j < i; j++) {
                if (a[i] == a[j]) {
                    i--;
                    break;
                }
            }
        }
        for (int i = 0; i < a.length; i++) {
            System.out.println("a[" + i + "]=" + a[i]);
        }
        }
    }

 7、数字不重复

class Matix{
    public static void main(String[] args) {
        Random rand = new Random();
        Scanner stdIn = new Scanner(System.in);
        System.out.print("元素个数为:");
        int n = stdIn.nextInt();
        int[] a = new int[n];
        a[0] = rand.nextInt(10);
for(int i=0;i<n;i++){
    int num;
    boolean isDuplicate;
    do{
        isDuplicate = false;//初始值
        num=rand.nextInt(10);//生成随机数
        for(int j=0;j<n;j++){
            if(a[j]==num)//从0开始遍历元素,若与生成的随机数重复,则赋值为true
{
                isDuplicate=true;
                break;//跳出if语句
            }
        }
    }while(isDuplicate);//当isDuplicate为true时,跳出循环,重新生成随机数
    a[i]=num;
}
        for (int i = 0; i < a.length; i++) {
            System.out.println("a[" + i + "]=" + a[i]);
        }
        }
    }

boolean isDuplicate:标记当前生成的随机数是否与已存在的数字重复。

在该题中与do-while搭配使用

8、数组的赋值

定义a和b两个数组,若使用b=a语句,将数组a赋值给b,即b引用的主体是a,若a发生改变,b也会随之改变。

即使使用赋值运算符对数组赋值,也不会复制全部元素的值,只是改变了引用目标而已

a==b并不是判断“数组a和b中的全部元素值是否相等”,而是确认“数组变量a和b是否引用了相同的数组主体。

使用for语句,将数组a中的每一个值赋给b

class Matix {
    public static void main(String[] args) {
        //Random rand = new Random();
        Scanner stdIn = new Scanner(System.in);
        System.out.print("元素个数为:");
        int n = stdIn.nextInt();
        int[] a = new int[n];
        int[] b = new int[n];
        for (int i = 0; i < n; i++) {
            System.out.print("a[" + i + "]=");
            a[i] = stdIn.nextInt();
        }

   for(int i = 0; i<n;i++)
    b[i]=a[i];
    System.out.println("已经将a中的全部元素复制到b中。");
    for(int i = 0; i<n;i++)
    System.out.println("b["+i+"]="+b[i]);
}
}

9、final数组

final int[] a=new int[5];

变成final(值不可以被改写)的是数组a的引用目标,而各个元素的值可以被改写

即a[0]=10;是可以的,a=null或a=new int[10]是不行的

三、多维数组

1、二维数组

二维数组的声明:int[] [] x;

在声明时创建主体:int[] [] x=new int [2][4] //2行4列二维数组

x[0]、x[1]为构成元素,x[0][0]为元素

1)创建二维数组

class Matix {
    public static void main(String[] args) {
        Random rand = new Random();
        Scanner stdIn = new Scanner(System.in);
        System.out.print("行数:");
        int h = stdIn.nextInt();
        System.out.print("列数:");
        int w = stdIn.nextInt();
        int[][] x = new int[h][w];
        for (int i = 0; i < h; i++)
            for (int j = 0; j < w; j++) {
                x[i][j] = rand.nextInt(100);
                System.out.println("x[" + i + "][" + j + "]=" + x[i][j]);
            }
    }
}

2、三维数组

long[] [] [] y=new long [2] [3] [4]

1)加法运算


class Matix {
    public static void main(String[] args) {
        int[][] a = {{1, 2, 3}, {4, 5, 6}};
        int[][] b = {{1, 2, 3}, {4, 5, 6}};
        int[][] c = {{0, 0, 0}, {0, 0, 0}};

        for (int i = 0; i < 2; i++)
            for (int j = 0; j < 3; j++)
                c[i][j] = a[i][j] + b[i][j];
        System.out.println("矩阵a");
        for (int i = 0; i < 2; i++) {
            for (int j = 0; j < 3; j++)
                System.out.printf("%3d", a[i][j]);
            System.out.println();
        }
        System.out.println("矩阵b");
        for (int i = 0; i < 2; i++) {
            for (int j = 0; j < 3; j++)
                System.out.printf("%3d", b[i][j]);//宽度3,右对齐
            System.out.println();
        }
        System.out.println("矩阵c");
        for (int i = 0; i < 2; i++) {
            for (int j = 0; j < 3; j++)
                System.out.printf("%3d", c[i][j]);
            System.out.println();
        }
    }
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值