⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 java05_01.htm

📁 JAVA的课件
💻 HTM
字号:
<html>

<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>Java程序设计</title>
</head>

<body background="Bg.gif">

<p align="center"><font size="5"><b>§5.1 数组</b></font></p>    
    
<p align="left">&nbsp; &nbsp; 数组是Java中一种重要的数据结构。和一般的语言不同,Java中的数组也是对象,需要动态地生成。除此之外,它的使用和C中的数组差不多。</p>   
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;    
数组是同类型的数据的有序集合,它的每一个元素都具有同一个类型,先后顺序也是固定的。它的数据类型既可以是简单类型,也可以是类。在生成一个数组的时候是通过数组名进行的,而使用数组中存储的值时只能以数组元素为单位进行。我们将一个数组中所拥有的元素数目称为该数组的长度。</p>   
<p align="left">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;     
数组通常分为一维数组、二维数组和多维数组,我们这里只介绍前面两种。</p>    
<p align="left">一、一维数组的定义与使用</p>    
<p align="left">1.一维数组的定义</p>    
<p align="center"><b>数据类型&nbsp; 数组名[]</b>&nbsp; 或者: <b> 数据类型[]&nbsp;    
数组名</b></p>   
<p align="left">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;     
这里的数据类型就是元素所拥有的类型,数组名是用户自己定义的合法的标识符,[]表示这是一个数组。注意[]必须是空的,不允许在其中指定数组的长度。数组一旦被定义,它的数据类型和数组名就不可更改。</p>    
<p align="left">2.创建一个数组</p>    
<p align="left">&nbsp;&nbsp;&nbsp;   
创建一个数组有三种方法:初始化和用new来生成。</p>  
<ul>  
  <li>  
    <p align="left"> int a[]={0,0,0,0,0};</li>   
  <li>   
    <p align="left">int a[]=new int[5];</li>   
  <li>   
    <p align="left">利用数组的clone()方法,如:<br>  
    int[] b=(int [])a.clone()</li>  
</ul>  
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
前两种方法都创建了一个名为 a    
的整型数组,长度都是5(也就是拥有5个整型元素)。第一种方法显示地将每个元素都置为0(当然也可以赋别的值);第二种方法没有给元素赋值,但系统会自动为每个元素赋初始值0,所以效果是一样的。第三种方法是创建了一个和a长度一样的数组b,它的每个元素和a中的对应相等,但它和a不是同一个数组,它实质上是将a复制了一份给b。还有一种方法也可以“创建”数组:<br>  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
int[] b=a;<br>  
但这种方法实质上是增加了一个对a的引用(有点类似于C中的指针),b和a目前是同一个数组的两个不同名字。</p>  
<p align="left">&nbsp;&nbsp;&nbsp;    
创建了数组后,如果有需要,可以随时用new来调整数组的长度(但数据类型和名称不能改),但是数组中原来的元素值不再保留。</p>   
<p align="left">&nbsp;&nbsp;&nbsp; 上面的例子中元素是int型,如果是用其它类型,则new后的数据类型说明符也要改成相应的类型,如下面这个样子:<br>   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; double a[]    
=new double[10];</p>   
<p align="left">3.使用数组</p>   
<p align="left">&nbsp;&nbsp;&nbsp; 要访问一个数组元素,需要用:<br>   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数组名[下标]<br>  
这种方式,其中的下标是大于等于0小于数组长度的整型数。<b>数组元素就是一个普通的变量,它可以出现在任何同类型的普通变量能够出现的地方,执行普通变量能够进行的操作。</b></p>  
<p align="left">&nbsp;&nbsp;&nbsp; 我们先来看下面这个例子:</p>   
<p align="left">class useArray{<br>    
&nbsp;&nbsp; public static void main(String argv[]){<br>    
&nbsp;&nbsp;&nbsp; int i, a[]={0,0,0,0,0}; //初始化,创建一个有5个元素的整型数组a<br>   
&nbsp;&nbsp;&nbsp; int[]&nbsp;    
b;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    
//定义一个整型数组b<br>   
&nbsp;&nbsp;&nbsp; a=new int [10];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    
//重新调整a的长度,现在有10个元素<br>   
&nbsp;&nbsp;&nbsp; for(i=0;i&lt;10;i++)<br>   
&nbsp;&nbsp;&nbsp;&nbsp; { a[i]=i;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    
//使用a中的元素<br>   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.print(" "+a[i]);<br>    
&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;<br>   
&nbsp;&nbsp;&nbsp; a[10]=0;&nbsp;&nbsp; //错误,下标越界<br>   
&nbsp;&nbsp;&nbsp; b=a;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //正确,b引用了a,现在a和b实际上是同一个数组&nbsp;<br>   
&nbsp;&nbsp;&nbsp; a[9]=100;&nbsp; //改变了a中的元素值就改变了b中的元素值<br>  
&nbsp;&nbsp;&nbsp; for(i=0;i&lt;10;i++)<br>   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.print(" &quot;+b[i]); //这里实际上输出的就是a中的元素<br>   
&nbsp;&nbsp; }<br>   
}</p>   
<p align="left">&nbsp;&nbsp;&nbsp;    
这个例子很简单,但它清楚地说明:对于长度为N的数组,它的元素下标是从0到N-1。对于上例,如果企图使用:a[10]=0;就会出现下标越界的错误。</p>   
<p align="left">4.一个完整的例子</p>   
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
在这个例子中,我们将用到数组对象的一个属性length,它返回当前这个数组的长度,但这个属性是只读的。另外我们将数组作为参数传递给一个方法。由于数组也是一个对象,所以在传递参数时是引用,对形式参数的任何改动都会影响到实际参数。</p>  
<p align="left">//下面这个例子是以选择排序法对整型数组进行排序<br>  
class selectSort{<br>   
&nbsp; public static void main(String argv[]){&nbsp;<br>  
&nbsp;&nbsp; final int N=10;<br>   
&nbsp;&nbsp; int i,a[]=new int[N];<br>   
<br>   
&nbsp;&nbsp; initialize(a);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
//为数组元素赋一些随机值<br>  
&nbsp;&nbsp; System.out.print("The origin array is:");<br>   
&nbsp;&nbsp; for (i=0;i&lt;a.length;i++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //输出未排序的数组<br>  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.print(" "+a[i]);<br>   
&nbsp;&nbsp; Sort(a);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
//进行选择排序<br>  
&nbsp;&nbsp; System.out.print("\nThe sorted array is:");&nbsp;<br>  
&nbsp;&nbsp; for (i=0;i&lt;a.length;i++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //输出排序后的数组<br>  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.print(" "+a[i]);<br>   
&nbsp;}<br>  
<br>  
&nbsp;static void initialize(int a[]){ //为数组a赋初值<br>  
&nbsp; int i;<br>   
&nbsp; for (i=0;i&lt;a.length;i++)<br>   
&nbsp;&nbsp; a[i]=(int)(Math.random()*1000);<br>  
&nbsp;}&nbsp;<br>  
<br>  
&nbsp;static void Sort(int a[]){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //对数组a进行选择排序<br>  
&nbsp;&nbsp; int i,j,min,t;<br>   
&nbsp;&nbsp; for(i=0;i&lt;a.length-1;i++)&nbsp;<br>  
&nbsp;&nbsp; { min=i;<br>   
&nbsp;&nbsp;&nbsp;&nbsp; for(j=i+1;j&lt;a.length;j++)<br>  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (a[min]>a[j]) min=j;<br>   
&nbsp;&nbsp;&nbsp;&nbsp; if (min!=i)&nbsp;<br>  
&nbsp;&nbsp;&nbsp;&nbsp; { t=a[i];<br>   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a[i]=a[min];<br>  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a[min]=t;&nbsp;<br>  
&nbsp;&nbsp;&nbsp;&nbsp; }<br>  
&nbsp;&nbsp; }<br>  
&nbsp; }<br>  
}</p>   
<p align="left">&nbsp;二、二维数组的定义和使用</p>  
<p align="left">&nbsp;&nbsp;&nbsp;   
如果数组的元素也是数组,那么这种结构称为多维数组。最简单而又最常用的多维数组是二维数组。二维数组可以看成是由若干个一维数组组成的。&nbsp;&nbsp;</p>  
<p align="left">1.二维数组的定义:</p>  
<p align="center"><b>数据类型&nbsp; 数组名[][]</b>&nbsp; 或者:<b> 数据类型[][]&nbsp;   
数组名</b> 或者:<b>数据类型[]&nbsp; 数组名[]</b></p>  
<p align="left">&nbsp;&nbsp;&nbsp;   
最后一种定义方法直接表明了二维数组的定义,但这种方法很少用,常用的还是前面两种。和一般语言中的二维数组不同,Java中的二维数组允许每行中的元素个数不同,换言之,就是构成二维数组的每个一维数组的长度可以不相同。</p>  
<p align="left">2.创建二维数组</p>  
<p align="left">&nbsp;&nbsp;&nbsp;   
二维数组必须要创建后才能使用,它也有多种创建方法</p>  
<p align="left">① 初始化</p>  
<p align="left">&nbsp;&nbsp; int b[][]={{1,2},{3,4,5},{6,7,8,9}};</p>  
<p align="left">&nbsp;&nbsp;&nbsp; 这里的二维数组b由3个一维数组构成,每个一维数组的名字依次是:b[0]、b[1]、b[2],它们的长度分别是2,3,4,可以想像成下面这个图:</p>  
<p align="left"><img border="0" src="picture/java05_01_01.gif" width="138" height="85"></p>  
<p align="left">② 利用new一次性创建</p>  
<p align="left">&nbsp;&nbsp; int b[][]=new int[3][4];</p>  
<p align="left">&nbsp;&nbsp; 这里创建了一个3行4列的二维数组b,它仍然由3个一维数组组成,每一个一维数组的元素数目都是4,每个元素的值都是0,可以想像成下面这个图:<br>  
</p>  
<table border="1" width="41%">  
  <tr>  
    <td width="20%" bordercolor="#FFFFFF"><b>b[0]</b></td>  
    <td width="20%">0</td>  
    <td width="20%">0</td>  
    <td width="20%">0</td>  
    <td width="20%">0</td>  
  </tr>  
  <tr>  
    <td width="20%" bordercolor="#FFFFFF"><b>b[1]</b></td>  
    <td width="20%">0</td>  
    <td width="20%">0</td>  
    <td width="20%">0</td>  
    <td width="20%">0</td>  
  </tr>  
  <tr>  
    <td width="20%" bordercolor="#FFFFFF"><b>b[2]</b></td>  
    <td width="20%">0</td>  
    <td width="20%">0</td>  
    <td width="20%">0</td>  
    <td width="20%">0</td>  
  </tr>  
</table>  
<p align="left">&nbsp;&nbsp;   
这种方法最简单,也很常用,缺点是每一行的元素数目必须一样多,有时会造成浪费。</p>  
<p align="left">③ 利用new分批创建,这需要写一段程序:</p>  
<p align="left">&nbsp;&nbsp; int b[][];<br>  
&nbsp;&nbsp; ......<br>  
&nbsp;&nbsp; b=new int[3][];&nbsp;&nbsp; //先将b创建成由3个一维数组组成&nbsp;<br>  
&nbsp;&nbsp; b[0]=new int [1];&nbsp; //再分别创建每个一维数组<br>  
&nbsp;&nbsp; b[1]=new int [2];<br>  
&nbsp;&nbsp; b[2]=new int [3];</p>  
<p align="left">&nbsp;&nbsp; 执行上面这段程序之后,b成了下面这个样子:<br>  
<img border="0" src="picture/java05_01_02.gif" width="121" height="85"></p>  
<p align="left">④ 利用数组的clone()方法,如:</p>  
<p align="left">int b[][]={{1,2},{3,4,5},{6,7,8,9}};<br>   
int a[][]=(int [][])b.clone();</p>  
<p align="left">&nbsp;&nbsp; 这样a就拥有了和b一模一样的结构。</p>  
<p align="left">⑤ 也可以采用引用的方法来“创建”:</p>  
<p align="left">int b[][]={{1,2},{3,4,5},{6,7,8,9}};<br>   
int a[][]=b;</p>  
<p align="left">&nbsp;&nbsp;   
如同在一维数组的定义中所提到的,这种方法只是增加了b的一个引用,a和b是同一个数组的两个名字。</p>  
<p align="left">3. 二维数组的使用</p>  
<p align="left">&nbsp;&nbsp;&nbsp; 严格来说,Java中的二维数组的元素应该是一维数组,不过由于传统语言都是将存储数据的单元当作是二维数组的元素,我们这里也可以这样理解,而且也不会造成混乱。基于这样的理解,要访问二维数组中的元素要写成下面这个样子:</p> 
<p align="center">数组名[行号][列号]</p> 
<p align="left">&nbsp;&nbsp;&nbsp;  
我们来写个简单的例子,看如何遍历一个二维数组,输出其中的元素。</p> 
<p align="left">class TwoDime{<br>  
&nbsp;public static void main(String argv[]){&nbsp;<br> 
&nbsp;&nbsp; int b[][]={{1,2},{3,4,5},{6,7,8,9}}; //这里用三种不同的方法定义二维数组<br> 
&nbsp;&nbsp; int[][] a=b;&nbsp; //a是b的一个引用<br> 
&nbsp;&nbsp; int[] c[];&nbsp;<br> 
&nbsp;&nbsp; int i,j;<br>  
&nbsp;&nbsp; //先输出数组a<br> 
&nbsp;&nbsp; for(i=0;i&lt;a.length;i++)&nbsp; //这了的a.length返回数组a有几个一维数组,也即行数<br> 
&nbsp;&nbsp;&nbsp; { for(j=0;j&lt;a[i].length;j++)&nbsp; //a[i].length返回当前这个一维数组的长度<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.print(" "+a[i][j]);<br>  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println() ;<br>  
&nbsp;&nbsp;&nbsp; }&nbsp;<br> 
&nbsp; c=new int[3][];&nbsp;&nbsp;&nbsp; //下面创建数组c<br> 
&nbsp; for (i=0;i&lt;3;i++)<br>  
&nbsp;&nbsp;&nbsp;&nbsp; c[i]=new int[i+1];<br>  
&nbsp; for(i=0;i&lt;c.length;i++)<br> 
&nbsp;&nbsp; { for(j=0;j&lt;c[i].length;j++)<br>  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.print(" "+c[i][j]);<br>  
&nbsp;&nbsp;&nbsp;&nbsp; System.out.println() ;<br>  
&nbsp;&nbsp; }&nbsp;<br> 
&nbsp;}<br> 
}</p> 
<p align="left">&nbsp;&nbsp;&nbsp; 在上面的例子中,a.length和a[i].length都是很重要的属性,因为Java中的二维数组是动态的,而且每行中的元素数目可能并不相同,不能像C语言那样写成固定的数值来控制循环。</p> 
<p align="left">四、课堂练习</p>
<p align="left">请写一个类,用于输出杨辉三角。具体要求:<br>
1、拥有一个二维数组,是private类型的成员变量,用于存储杨辉三角<br>
2、一个构造方法,它有一个形式参数,指定本杨辉三角的行数<br>
3、一个输出方法,将杨辉三角显示在屏幕上<br>
杨辉三角如下所示:<br>
&nbsp;1<br>
&nbsp;1&nbsp; 1<br>
&nbsp;1&nbsp; 2&nbsp;&nbsp; 1<br>
&nbsp;1&nbsp; 3&nbsp;&nbsp; 3&nbsp;&nbsp; 1<br>
&nbsp;1&nbsp; 4&nbsp;&nbsp; 6&nbsp;&nbsp; 4&nbsp;&nbsp; 1</p>
<p align="left"><a href="index.htm">回目录</a>   <a href="java04_13.htm">上一课</a>  
<a href="java05_02.htm">下一课</a></p> 
 
</body> 
 
</html> 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -