第5章数组
一、选择题
1.给出下面程序代码:
byte[] a1, a2[];
byte a3[][];
byte[][] a4;
下列数组操作语句中哪一个是不正确的?(  A  )
A.a2 = a1 B.a2 = a3
C.a2 = a4 D.a3 = a4
【解析】只有维数相同的数组才能相互赋值。
2.关于数组,下列说法中不正确的是(  C  )。
A.数组是最简单的复合数据类型,是一系列数据的集合
B.数组元素可以是基本数据类型、对象或其他数组
C.定义数组时必须分配内存
D.一个数组中所有元素都必须具有相同的数据类型
【解析】数组元素可以是基本数据类型、对象或其他数组。
3.设有下列数组定义语句:
int a[] = {1, 2, 3};
则对此语句的叙述错误的是(  C  )。
A.定义了一个名为a的一维数组B.a数组有3个元素
C.a数组元素的下标为1~3 D.数组中每个元素的类型都是整数
【解析】数组元素的下标是从0开始的。
4.执行语句:int[] x = new int[20];后,下面哪个说法是正确的?( C  )A.x[19]为空B.x[19]未定义
C.x[19]为0 D.x[0]为空
【解析】此语句定义了x数组后,x[0]~x[19]的值全部为0。
5.下面代码运行后的输出结果为(  A  )。
public class X6{
public static void main(String[] args) {
AB aa = new AB();
AB bb;
bb = aa;
System.out.println(bb.equals(aa));
}
}
class AB{ int x = 100; }
A.true B.false
C.编译错误D.100
【解析】同一个类的两个对象可以相互赋值,赋值后两个对象具有相同的存储空间,因此是相同的。
6.已知有定义:String s="I love",下面哪个表达式正确?( A  )
A.s += "you"; B.char c = s[1];
C.int len = s.length; D.String s = s.toLowerCase();
【解析】字符串对象可以执行“+=”运算,但不能用s[1]这种方式取其中的字符,也不能用length求它的长度,可以用length()求其长度,因此B、C不正确,不能再次定义s字符串,因此D不正确。
二、填空题
1. Object类是所有类的直接或间接父类,它在  java.lang  包中。
2.System类是一个功能强大、非常有用的特殊的类,它提供了标准输入/输出、运行时系统信息等重要工具。这个类不能实例化,即不能创建System类的对象,所以它所有的属性和方法都是  static  类型,引用时以类名System为前缀即可。
5.在数组定义语句中,如果[]在数据类型和变量名之间时,[]之后定义的所有变量都是数组类型,当[]在变量名之后时,只有[]之前的变量是数组类型,之后没有[]的则不是数组类型。
三、写出下列程序的运行结果
1.public class X6_3_1 {
public static void main(String[] args) {
int a[]={12,39,26,41,55,63,72,40,83,95};
int i1=0,i2=0;
for(int i=0;i<a.length;i++)
if(a[i]%2 == 1) i1++;
else i2++;
System.out.println(i1+" "+i2);
}
【运行结果】
6      4
2.public class X6_3_2 {
public static void main(String[] args) {
int a[]={36,25,48,14,55,40,32,66};
int b1,b2;
b1=b2=a[0];
for(int i=1;i<a.length;i++)
if ( a[i] >b1 ){
if ( b1 >b2 ) b2=b1;
b1=a[i];
}
System.out.println(b1+"\t"+b2);
}
}
【运行结果】
66      55
3.public class X6_3_3 {
public static void main(String[] args) {
int a[]={36,25,48,14,55,40,32,66 };
int b1,b2;
b1=b2=a[0];
for (int i=1;i<a.length;i++)
if ( a[i]<b1 )  {
if ( b1<b2 )  b2=b1;
b1=a[i];
}
System.out.println(b1+"\t"+b2);
}
}
【运行结果】
14      25
4.public class X6_3_4 {
public static void main(String[] args) {
String str = "abcdabcabfgacd";
char[] a =CharArray();
int i1 =0, i2=0, i;
for(i=0;i<a.length;i++) {
if(a[i] == 'a' )  i1++;
if(a[i] == 'b' )  i2++;
}
System.out.println(i1+"\t"+i2);
}
}
【运行结果】
4      3
5.public class X6_3_5 {
public static void main(String[] args) {
String str ="abcdabcabdaeff";
char[] a = CharArray();
int b[] = new int[5],i;
for(i=0;i<a.length;i++) {
switch (a[i]) {
case 'a': b[0] ++; break;
case 'b': b[1] ++; break;
case 'c': b[2] ++; break;
case 'd': b[3] ++; break;
default : b[4] ++;
}
}
for(i =0; i<5; i++)
System.out.print(b[i]+"\t");
System.out.println();
}
}
【运行结果】
4      3      2      2      3
6.public class X6_3_6 {
public static void main(String[] args) {
int a[] = {76,83,54,62,40,75,90,92,77,84};
int b[] = {60,70,90,101};
int c[]=new int[4],i;
for (i=0; i<a.length; i++) {
int j =0;
while (a[i] >= b[j] ) j ++;
c[j] ++;
}
for (i=0; i<4; i++)
System.out.print(c[i]+"\t");
System.out.println();
}
}
【运行结果】
2      1      5      2
7.public class X6_3_7 {
public static void main(String[] args) {
int a[][] = {{1,2,7,8},{5,6,11,12},{9,10,3,4}};
int m = a[0][0];
int ii = 0, jj = 0;
for (int i=0;i<a.length;i++)
for(int j=0;j<a[i].length;j++)
java定义一维数组并赋值if ( a[i][j]>m ){
m =a[i][j];
ii =i;
jj =j;
}
System.out.println(ii+"\t"+jj+"\t"+a[ii][jj]);
}
}
【运行结果】
1      3      12
四、编程题
1、写一个方法要求输入一个整型数组,将数组中的0去掉后返回一个新数组。
例如输入数组
int[] arr={1,13,45,5,0,0,16,6,0,25,4,17,6,7,0,15};
要求将以上数组中的0项去掉,将不为0的值存入一个新数组,生成新的数组作为返回值: int[] newArr={1,13,45,5,16,6,25,4,17,6,7,15};
参考代码:
public class ArrayTest2 {
public static void main(String[] args) {
int[] arr={1,13,45,5,0,0,16,6,0,25,4,17,6,7,0,15};
int[] newarr=rejectzero(arr);
for(int i=0;i<newarr.length;i++)
System.out.print(newarr[i]+" ");
}
private static int[] rejectzero(int[] arr) {
int newarr[];
int count=0;
for(int i=0;i<arr.length;i++)
if(arr[i]!=0) count++;
newarr=new int[count];
int m=0;
for(int j=0;j<arr.length;j++){
if(arr[j]!=0){
newarr[m]=arr[j];
m++;
}
}
return newarr;
}
}
2. 任意定义一个3×3的矩阵,寻其中最大值,并告知最大值的位置(第几行第几列)。参考代码
public class MaxNum {
public static void main(String[] args) {
int a[][]={{1,5,7},{4,11,24},{7,12,9}};
findmax(a);
}
private static void findmax(int[][] a) {
int x,y,max;
x=1;y=1;
max=a[0][0];
for(int i=0;i<a.length;i++){
for(int j=0;j<a[i].length;j++){
if(a[i][j]>max){
max=a[i][j];
x=i+1;
y=j+1;
}
}
}
System.out.println("矩阵中的最大值为:"+max);
System.out.println("它在数组的第"+x+"行,第"+y+"列");
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。