Java一维数组

来自CloudWiki
跳转至: 导航搜索

问题引入

例如,

  • 我们要在Java里保存20位同学的考试成绩,
  • 我们要存5000个随机数,
  • 或者我们要保存保存1万个账号,

我们怎么办呢 ?

什么是数组

  • 可以用数组来解决。
  • 数组是编程语言中最常见的一种数据结构和用于存储多个数据。

4-110.png

  • 数组里面元素存放一个数据,所有的数组元素都具有相同的数据类型。


数组的声明

为了在程序中使用数组,我们首先指明数组的数据类型并且声明定义数组的名称,

Java里面,所有的数组元素,都具有相同的数据类型。

声明数组的格式为:

数据类型[] arrayName;   // 首选的方法 
或 数据类型 arrayName[];  // 效果相同,但不是首选方法

可以是任意数据类型,但是数组中的元素必须具有相同的数据类型

下面就是是声明数组变量的例子:

double[] prices;      //这句话声明了一个double类型的数组prices
double prices[];       // 效果相同,但不是首选方法
int[] num;
String[] size;

数组的初始化

数组创建完成之后,我们必须确定每个数组元素的值,这个过程称为数组的初始化。

初始化分为两种:静态初始化和动态初始化。

静态初始化

初始化时,由程序员显示指定每个数组元素的初始值,由系统决定数组的长度。

语法如下:

数据类型[] arrayRefVar = {value0, value1, ..., valuek};

使用这种初始化方法时,在声明数组的同时即完成初始化:如:

double[] prices={1,2,3};

而不能这样分成两句写:

double [] prices;
prices = {1,2,3}


动态初始化

动态初始化只指定数组的长度,由系统为每个数组元素指定初始值,

语法如下:

arrayName= new 数据类型[arraySize];

告诉计算机,我建立的这个数组 大小是arraySize, 包含arraySize个相同类型的元素。

用new运算符在内存中为其分配相等大小的空间。

4-110.png

例如上面声明的数组prices ,可以通过下列语句创建

 double[] prices;//声明数组
 prices= new double[3];//动态初始化:只指定长度,不指定元素值
 ...
 price[0]=1;
 price[1]=2;
 price[2]=3;

或者,上面的第一句和第二句合并一下也行,在声明的同时,指定长度:

 double [] prices= new double[3];//在声明数组的同时,为它分配空间,即动态初始化。
  ...
 price[0]=1;
 price[1]=2;
 price[2]=3;


例子:

public class TestArray {
   public static void main(String[] args) {
      // 数组大小
      int size = 5;

      //第1种方法:静态初始化
      String [] menu2 = {"同学甲","同学乙","同学丙","好友A","好友丙"};   
 
      //第2种方法:动态初始化
      String [] menu1 = new double[size];
      menu1[0] = "同学甲";
      menu1[1] = "同学乙";
      menu1[2] = "同学丙";
      menu1[3] = "好友A";
      menu1[4] = "好友丙";
      
       
   }
}

练习:用两种方法把商院面馆的菜单储存进数组。("阳春面","油泼面","鸡汤面","火鸡面","安徽板面")

思考:数组动态初始化后如果不给它赋值,会怎样呢 ?

  • 如果数组创建后不进行初始化,基本类型的数组元素会赋予默认值:数据类型的默认值是0,char型的默认值是’\u0000’,boolean型的默认值是false。

访问数组元素

获取数组长度

数组一旦创建,它的数据类型和数组大小都是确定的,可以通过‘数组名.length’获得数组的大小,例如prices.length为5。

System.out.println(prices.length);
System.out.println(num.length);


读取和写入

Java4-8.png


数组中的元素可以通过下标访问,数组中的每个元素都可以使用下面的语法表示:

arrayName[index]


例子:

public class TestArray {
   public static void main(String[] args) {

                String [] menu2 = {"同学甲","同学乙","同学丙","好友A","好友丙"}; 
		System.out.println(menu2[0]);
		System.out.println(menu2[1]);
		System.out.println(menu2[2]);
		System.out.println(menu2[3]);
		System.out.println(menu2[4]);
		
		menu2[0]="阿里甲总";
		menu2[1]="腾讯乙总";
		menu2[2]="百度丙总";
		menu2[3]="京东A总";
		menu2[4]="自主创业身价过亿的低调小王";
   }
}


注意index是数组下标,它是基于0的,也就是说index的取值范围从0开始到arrayRefVar.length-1结束,一旦超出这个范围会触发异常(异常的名字叫java.lang.ArrayIndexOutOfBoundsException)

遍历数组

通过观察,我们发现上述完全可以用循环来解决。

循环读数据

                System.out.println();
		System.out.println("10年后:");
		for(int i=0;i<menu2.length;i++) {
			System.out.println(menu2[i]);
		}

循环写数据

       
                Scanner sc = new Scanner(System.in);
		String s;
		for(int i=0;i<menu2.length;i++) {
			System.out.println("请输入名称:");
			menu2[i] =sc.nextLine();			
		}
		sc.close();


循环比较大小、求和

求最大值:

采用打擂台的方式,假定最大元素为第一个元素,然后将每个元素与最大元素进行比较,如果该元素大于最大元素,则更新最大元素的值。

                double [ ] score= {95,96,97,99,89};
		double max = score[0];
		for(int i=0;i<score.length;i++) {
			if(score[i]>max) {
				max=score[i];
			}
		}
		System.out.println("最高分为:"+max);

思考:数组元素的最小值怎么求 ?

练习:求学生成绩的最大值,最小值,总分,平均值,优秀率(>90分的人)

foreach语句的适用

Java支持一个简便的for循环,简称为foreach循环,即不使用下标变量可以顺序地遍历整个数组,foreach循环的语法为:

for(elementType element :arrayRefArray){
	//处理元素element
}

例子:打印所有数组元素

public class TestArray {
   public static void main(String[] args) {
      double [ ] score= {95,96,97,99,89};
 
      // 打印所有数组元素
     for (double element:score) {
	 System.out.println(element);
   }
}

比较大小:

                max = score[0];
		for (double element:score) {
	           System.out.println(element);
	           if(element>max) {
	        	 max = element;
	           }
	        }
		System.out.println("最高分为:"+max);

注意变量element必须声明为与arrayRefArray中元素具有相同的数据类型。