一、基础知识
来源:为了将分散的相同类型的变量集中起来,方便管理
数组:相同类型的变量作为构成元素呈直线状连续排列而成,元素类型为构成元素类型
声明方式: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();
}
}
}

533

被折叠的 条评论
为什么被折叠?



