java 语言程序设计-李尊朝 第5章 数组

5.1 一维数组

 

          经常需要处理具有相同性质的一批数据。为此,在Java中还引入了数组,即用一个变量表示一组相同性质的数据。

    5.1 一维数组

1.一维数组声明的格式为:

     类型标识符 数组名[ ]

    或

      类型标识符[ ] 数组名

     类型标识符指定每个元素的数据类型

2.一维数组的初始化

   1.用new初始化数组

    (1)先声明数组再初始化

          数组名= new 类型标识符【元素个数】

         int score[];

         score=new int[10];

         数组名.length

要计算100个学生的平均成绩,可以使用以下的程序段:

float sum;

int i;

int score[ ];

score = new int[100];

/* 输入数组各元素的值 */

sum=0;

for ( i=0; i<100; i++)

sum=sum+score[i];

sum=sum/100;

   (2) 声明的同时进行初始化

        类型标识符 数组名[ ] = new 类型标识符[元素个数]

        或

        类型标识符[ ] 数组名= new 类型标识符[元素个数]

   2. 赋初值初始化数组

       类型标识符 数组名[ ]= {初值表}

       初值表是用逗号隔开的初始值。

image

    5.2 多维数组

二维数组的声明

1. 二维数组的声明

二维数组的声明方式与一维数组类似,只是要给出两对方括号。二维数组声明形式如下:

             类型标识符 数组名[ ][ ]

             或

             类型标识符[ ][ ] 数组名

例如,要表示每个数据为整型数的行列式,可以声明 如下二维数组:

             int a[ ][ ];

2.赋初值初始化数组

  1. 用new初始化二维数组   

  2.赋初值初始化数组

     其格式如下:

     类型标识符 数组名[ ][ ]={ {初值表},{初值表},…,{初值表} }

     int grade[ ] [ ]= { {65,34, 78}, { 81, 56, 92}, { 56, 87,90}, {92, 69, 75}};

   该数组a的12个元素分配存储空间,形式如表所示:

image

5.3数组的基本操作

1.数组的引用

对数组的应用通常是对其元素的引用。

      int age[]=new int[3];

      age[0]=25;

      age[2]=2+age[0] ;

2. 数组的复制

      int a[]=new int[6];

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

      for(int i=0;i<6;i++) a[i]=b[i];

      或 a=b;

package example5_1;

public class Example {

    public static void main(String[] args)
    {
        int c[][],d[][], e[][],i, j;
        c=new int[3][3];
        d=new int[3][3];
        e=new int[3][3];
        for(i=0;i<3; i++)
        for (j=0; j<3; j++)
        {
           d[i][j]=i+j;
           c[i][j]=d[i][j];
        }
        e=d;
    }
}

  解析: 复制的两个数组具有相同的维数,且各维元素的个数相等。事实上,通过逐个元素赋值的方法可以在不同维数、不同大小的数组之间实现复

           制,直接数组赋值只能在维数相等的两个数组之间进行。

3.数组的输出

数组的输出通常是逐个元素结合循环语句实现的。

int a[]=new int[6];

for(int i=0;i<6;i++)

{

a[i]=i;

System.out.println(a[i]);

}

例 5-2 一维数组的复制

package example5_2;

public class ArrayC {

    public static void main(String[] args) {
        int a[], b[], i, j;
        a = new int[3];
        b = new int[5];
        System.out.println("a.length=" + a.length);
        for (i = 0; i < a.length; i++) {
            a[i] = i;
            System.out.print(a[i] + "     ");
        }
        System.out.println();
        System.out.println("Before array assignment");
        System.out.println("b.length=" + b.length);
        for (j = 0; j < b.length; j++) {
            b[j] = j * 10;
            System.out.print(b[j] + "     ");
        }
        System.out.println();
        b = a;
        System.out.println("After array assignment");
        System.out.println("b.length=" + b.length);
        for (j = 0; j < b.length; j++) {
            System.out.print(b[j] + "     ");
        }
        System.out.println();
    }
}

例5-3 二维数组的复制

package example5_3;

public class ArrayC2 {

    public static void main(String[] args) {
        int c[][], d[][], i, j;
        c = new int[2][2];
        d = new int[3][3];
        System.out.println(" Array d");
        for (i = 0; i < d.length; i++) {
            for (j = 0; j < d[i].length; j++) {
                d[i][j] = i + j;
                System.out.print(d[i][j] + "    ");
            }
            System.out.println();
        }
        c = d;
        System.out.println(" Array  c");
        for (i = 0; i < c.length; i++) {
            for (j = 0; j < c[i].length; j++)
                System.out.print(c[i][j] + "    ");
            System.out.println();
        }
    }
}

程序运行结果如下:

a.length=3

0 1 2

Before array assignment

b.length=5

0 10 20 30 40

After array assignment

b.length=3

0 1 2  

5.4 数组应用举例

例5-4 排序:选择排序

排序是将一组数按照递增或递减的顺序排列。排序的方法很多,其中最基本的是选择法。此处介绍选择法排序,其基本思想如下:

①对于给定的n个数,从中选出最小(大)的数,与第1个数交换位置,便将最小(大)的数置于第1个位置。

②对于除第1个数外的剩下的n-1个数,重复步骤1,将次小(大)的数置于第2个位置。

③对于剩下的n-2,n-3,…,n-n+2个数用同样的方法,分别将第3个最小(大)数置于第3位置,第4个最小(大)数置于第4位置,…,第n-1个最小(大)数置于第n-1位置。

package example5_4;

import java.io.*;

public class ArraySort {

	public static void main(String[] args) throws IOException {
		BufferedReader keyin = new BufferedReader(new InputStreamReader(
				System.in));
		int a[], i, j, k, temp;
		String c;
		System.out.println("Input the number of array elements!");
		c = keyin.readLine();
		temp = Integer.parseInt(c);
		a = new int[temp];
		System.out.println("Input   " + temp + "  numbers. One per line!");
		for (i = 0; i < a.length; i++) {
			c = keyin.readLine();
			a[i] = Integer.parseInt(c);
		}
		System.out.println("After sorting!");
		for (i = 0; i < a.length - 1; i++) {
			k = i;
			for (j = i + 1; j < a.length; j++)
				if (a[j] < a[k])
					k = j;
			temp = a[i];
			a[i] = a[k];
			a[k] = temp;
		}
		for (i = 0; i < a.length; i++)
			System.out.println(a[i]);
	}
}
例:5-4矩阵运算
矩阵的加、乘运算
package example5_5;

public class ArrayC3 {

	 public static void main(String[] args)
	    {
	   int c[][]={{1,2,3},{4,5,6},{7,8,9}};
	   int d[][]={{2,2,2},{1,1,1},{3,3,3}};
	   int i, j, k;
	   int e[][]=new int[3][3];
	   System.out.println(" Array c");
	   for(i=0;i<c.length; i++)
	    {
	     for (j=0; j<c[i].length; j++)
	      System.out.print(c[i][j]+"    "); 
	    System.out.println();
	  }
	System.out.println(" Array d");
	for(i=0;i<d.length; i++)
	 {
	    for (j=0; j<d[i].length; j++)
	      System.out.print(d[i][j]+"    "); 
	    System.out.println();
	 }
	System.out.println(" Array c+d");
	for(i=0;i<e.length; i++)
	 {
	   for (j=0; j<e[i].length; j++)
	    {
	       e[i][j]=c[i][j]+d[i][j];
	      System.out.print(e[i][j]+"    "); 
	    }
	   System.out.println();
	 }
	System.out.println(" Array c*d");
	for(i=0;i<3; i++)
	  {
	     for (j=0; j<3; j++)
	      {
	         e[i][j]=0;
	         for (k=0;k<3; k++)
	           e[i][j]=e[i][j]+c[i][k]*d[k][j];
	         System.out.print(e[i][j]+"    "); 
	     }
	   System.out.println();
	 }

程序运行结果如下:

)_3A%)}N_(]{N]M32A4R6CH

5-5 数组参数

在java的过程中,允许参数是数组。在使用数组参数时,应该注意以下事项:

1.在形式参数表中,数组名后的括号不能省略,括号个数和数组的维数相等。不需给出数组元素的个数。

2.在实际参数表中,数组名后不需括号。

3.数组名做实际参数时,传递的是地址,而不是值,即形式参数和实际参数具有相同的存储单元。

           例5-6 计算数组元素的平均值

package example5_6;

public class ArrayC4 {

	public static void main(String[] args) {
		int c[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
		int j;
		System.out.println(" Array c");
		for (j = 0; j < c.length; j++)
			System.out.print(c[j] + "    ");
		System.out.println();
		System.out.println(" Array average");
		System.out.println(arrayAverage(c));
	}

	static float arrayAverage(int d[]) {
		float average = 0;
		for (int i = 0; i < d.length; i++)
			average = average + d[i];
		average = average / d.length;
		return average;
	}
}

程序运行结果如下:

Array c

1 2 3 4 5 6 7 8 9

Array average

5.0

例5-7 展示数组参数传递地址的特性。

package example5_7;

public class ArrayC6 {

	public static void main(String[] args)
	   {
	     int c[][]={{1,2,3,4,5},{6,7,8,9,10}};
	     int i, j;
	     System.out.println(" Array c before calling arrayMultiply");
	     for (i=0; i<c.length; i++)
	      { 
	        for(j=0; j<c[i].length; j++)
	           System.out.print(c[i][j]+"    "); 
	        System.out.println();
	      }
	     arrayMultiply(c);
	     System.out.println(" Array c after calling arrayMultiply");
	     for (i=0; i<c.length; i++)
	      { 
	        for(j=0; j<c[i].length; j++)
	             System.out.print(c[i][j]+"    "); 
	         System.out.println();}
	       }
	   static void arrayMultiply(int d[][])
	     {
	       int k,l;
	       for (k=0; k<d.length; k++)
	          for(l=0; l<d[k].length; l++)
	             d[k][l]=2*d[k][l];
	       System.out.println(" In arrayMultiply");
	       for (k=0; k<d.length; k++)
	        { 
	          for(l=0; l<d[k].length; l++)
	           System.out.print(d[k][l]+"    "); 
	       System.out.println();
	        }
		  }
}

程序的运行结果如下:

Array c before calling arrayMultiply

1 2 3 4 5

6 7 8 9 10

In arrayMultiply

2 4 6 8 10

12 14 16 18 20

Array c after calling arrayMultiply

2 4 6 8 10

12 14 16 18 20

例5-8 展示数组元素参数传递值的特性。

package example5_8;

public class ArrayC7 {

	 public static void main(String[] args)
	    {
	   int c[]={1,10,100,1000};
	   int j;
	   System.out.println(" Array c before calling elementMultiply");
	   for (j=0; j<c.length; j++)
	     System.out.print(c[j]+"    "); 
	   System.out.println();
	   elementMultiply(c[2]);
	   System.out.println(" Array c after calling elementMultiply");
	  for (j=0; j<c.length; j++)
	       System.out.print(c[j]+"    "); 
	  System.out.println();
	 }
	static void elementMultiply(int d)
	{ 
	d=2*d;
	System.out.println("d="+d); 
	   }
}

该程序的运行结果如下:

Array c before calling elementMultiply

1 10 100 1000

d=200

Array c after calling elementMultiply

1 10 100 1000

5.6 字符串

       1.字符数组与字符串

字符数组指数组的元素是字符类型的数据。要表示字符串“China”,可以使用如下的字符数组:

char[ ] country={'C','h','i','n','a'};

要表示长度为50的字符串,虽然可以使用如下的字符数组:

char[ ] title= new char[50];

      2.字符串

为了使用方便Java提供了String类型。

1. 字符串变量的声明和初始化:

String 变量名;

变量名=new String();

String 字符串变量 = new String();

例如:

           String s=new String();  

          2.字符串赋值

可以为字符串变量赋一个字符串常量,也可以将一个字符串变量或表达式的值赋给字符串变量。

s=“Chinese people”;

s2=s1;

s3="a lot of"+s2;

结果s2的值为“Chinese people”,s3的值为“a lot of Chinese people”。其中运算符“+”的作用是将前后的两个字符串连接起来

           3. 字符串的输出

字符串可以通过println()或print()语句输出。

例如,以下的语句序列为字符串变量s赋值并输出其值:

s="All the world";

System.out.println(s);

输出结果为:

All the world

例 5-9 字符串应用

package example5_9;

public class StringUse {

	public static void main(String[] args)
	   { 
	    String s1, s2;
		s1=new String("Students should ");  
		s2=new String();
		s2="study hard.";
		System.out.print(s1);
		System.out.println(s2);
		s2="learn english, too";
		System.out.print(s1);
		System.out.println(s2);
		s2=s1+s2;
		System.out.println(s2);
		}
}

该程序的运行结果如下:

Students should study hard.

Students should learn english, too

Students should learn english, too

  3.字符串的操作

         1.访问字符串对象

                 1.length()                                                  返回字符串的长度

                 2.char charAt(int index)                         返回字符串中第index个字符

                 3.indexOf(int ch)                                     返回字符串中字符ch第1次出现的位置

                 4.indexOf(String str,int index)             返回值是在该字符串中,从第index个位置开始,子字符串str第1次出现的位置

                 5.substring(int index1,int index2)       返回值是在该字符串中,从第index1个位置开始,到第index2-1个位置结束的子字符串

        2.字符串比较

                 两个字符串的比较实际上是字符串中对应字符编码的比较

                1.equals(Object obj)

                2.equalsIgnoreCase(String str):不考虑大小写

                3.compareTo(String str)

        3.与其他数据类型的转换

 

        4.字符串数组

package example5_10;

public class StringArray {

	public static void main(String[] args)
	{
	int i;
	for (i=0; i<args.length; i++)
	   System.out.println(args[i]);
	}
}
posted @ 2013-04-01 13:44  elite_2012  阅读(257)  评论(0编辑  收藏  举报