一、选择题
1. 下列关于数组的说法正确的是:(A)
A. 在Java中数组的长度是可变的
B. 数组中存储的数据的类型是相同的
C. 数组在进行扩容操作的时候源数组的地址不发生改变
D. int[] arr = new int[3]; arr = new int[10];是将数组的大小扩容到了10且数组中的元素依然保留了下来
E. 数组是存储到栈内存中的。
2. 下列各项中关于数组的定义正确的是:(ACD)
A. int[][] arr = new int[2][];
B. int[2][] arr = new int[][3];
C. int[] arr[] = new int[2][2];
D. int arr[][] = new int[3][];
E. int[3][3] arr = new int[][];
3. 已知数组int[ ] x,y[ ]都已经初始化,则下列各项能够正确赋值的是:(ADE)
A. y = x; B. y[0] = x; C. y = x[0]; D. y[0] = x[0]; E. y[0][0] = x[0];
4. 下列数组的声明有哪些是对的?错的应该怎么修改?(AB)
A. int[] a;
B. int a[] = new int[3];
C. int[] a;
a = {1,2,3,4,5};
改:int[] a;
a[0] = 1;
D. int[] a = new int[3]{1,2,3};
改: int[] a = new int[]{1,2,3};
二、编程题
1、定义一个数组arr,读入一个整数n,如果n在数组中存在,则输出n的下标;如果不存在,则输出-1。
import java.util.*; /* * 定义一个数组arr * 读入一个整数n * 如果n在数组中存在,则输出n的下标 * 如果不存在,则输出-1 */ public class Array01 { public static void main(String[] args) { System.out.print("请输入一个整数:"); int arr[] = {1,2,3,4,5,6,7,8,9,0}; Scanner s = new Scanner(System.in); int n = s.nextInt(); int i = 0; while(i<arr.length){ if(arr[i] == n){ System.out.println("下标:" + i); break; } i++; } if(arr[9] != n) System.out.println("-1"); } }
2、已知一个二维数组A表示一个矩阵,求AT。
其中AT表示二维数组A的转置,例如下面的例子:
3*2的二维数组:
public class Arr01 { public static void main(String[] args) { // TODO Auto-generated method stub int[][] a={{1,2,3},{4,5,6}}; int[][] b=new int[a[0].length][a.length]; for(int i=0;i<a.length;i++){ for(int j=0;j<a[0].length;j++){ b[j][i]=a[i][j]; } } //输转换矩阵数组 for(int i=0;i<b.length;i++){ for(int j=0;j<b[0].length;j++){ System.out.print(b[i][j]+" "); } System.out.println(); } } }
3*3的二维数组:
public class Arr { public static void main(String[] args) throws Exception { int data[][] = new int[][] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }; System.out.println("原来的数组:"); print(data); //调用打印方法 System.out.println("置换后数组:"); DaoZhi(data);//调用倒置排序方法 } // 二维数组列行倒置排序法 public static void DaoZhi(int arr[][]) { // TODO Auto-generated method stub for(int i=0; i<arr.length; i++) { for(int j=i; j<arr[i].length; j++) { if(i != j) { int temp = arr[i][j]; arr[i][j] = arr[j][i]; arr[j][i] = temp; } } } print(arr);//调用打印方法 } // 打印方法 public static void print(int arr[][]) { for(int i=0; i<arr.length; i++) { for(int j=0; j<arr[i].length; j++) { System.out.print(arr[i][j] + " "); } System.out.println(""); } } }
3、给定一个数组,将这个数组中的所有元素颠倒
一维数组:
public class Arr01 { public static void main(String[] args) { int A[] = {1, 2, 3, 4, 5}; int Len = A.length-1; for(int i=0, j=Len; i<j; i++, j--){ int iTemp = A[i]; A[i] = A[j]; A[j] = iTemp; } //foreach循环遍历数组 for(int a:A) System.out.print(a); } }
二维数组:
public class AFanzhuan { public static void main(String[] args) { int a[][] = {{1,2,3},{4,5,6}}; int[][] b = new int[2][3]; for(int i=0; i<a.length; i++){ for(int j=0; j<a[i].length; j++){ b[i][j] = a[a.length-1-i][a[i].length-j-1]; System.out.print(b[i][j] + " "); } System.out.println(); } } }
4、杨辉三角
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
…………
杨辉三角的特点:
1) 第i行有i个元素
2) 每一行的每一个元素和最后一个元素都是1
3) 除了1之外,每个元素的值都等于上一行同位置的元素以及前一个元素的和。
要求:输入一个数,输出对应的行数
import java.util.*; public class YangHui { public static void main(String[] args) { System.out.print("input:"); Scanner s = new Scanner(System.in); int n = s.nextInt(); int[][] arr = new int[n][]; for(int i=0; i<n; i++){ arr[i] = new int[i+1]; for(int j=0; j<=i; j++){ if(j == 0 || j == i){ arr[i][j] = 1; } else { //每一个元素是它上一行的元素和斜对角元素之和 arr[i][j] = arr[i -1][j] + arr[i - 1][j - 1]; } System.out.print(arr[i][j] + "\t"); } System.out.println(); } } }
5. 15个猴子围成一圈选大王
依次1-7循环报数,报到7的猴子被淘汰,直到最后一只猴子成为大王。问:哪只猴子会成为大王?
public class Monkey { public static void main(String[] args) { int[] a = new int[15]; int n = 0; int c = 0; for(int i=0; i<a.length; i++){ a[i] = i; } while(true){ for(int i=1; i<=7; i++){ //如果a[n]==99就跳过这个元素 //比如遍历到a[6]==99,那就i--,相当于没有对他进行遍历 if(a[n]==99){ i--; n++; if(n==15){ n = 0; } continue; } //如果i==7,给它标记位99 if(i==7){ a[n] = 99; } // n++; if(n==15){ n = 0; } //遍历数组,寻找里面有多少个99,如果有14个99,就跳出循环 int b = 0; for(int j=0; j<15; j++){ if(a[j]==99) b++; if(b==14) c = 1; } if(c==1) break; } if(c==1) break; } for(int arr:a) System.out.print(arr+" "); } }
6. 螺旋填数。
读入两个整数m,n,输出一个m行n列的矩阵,这个矩阵是1~m*n这些自然数按照右、下、左、上螺旋填入的结果。
例如读入数字4,5,则输出结果为:
1 2 3 4 5
14 15 16 17 6
13 20 19 18 7
12 11 10 9 8
package Day8_06; /*读入两个整数m,n,输出一个m行n列的矩阵,这个矩阵是1~m*n这些自然数按照右、下、左、上螺旋填入的结果。 * 例如读入数字4,5,则输出结果为: * 1 2 3 4 5 * 14 15 16 17 6 * 13 20 19 18 7 * 12 11 10 9 8 */ import java.util.Scanner; public class LuoXuan { public static void main(String[] args) { System.out.println("Input:"); Scanner s = new Scanner(System.in); int m = s.nextInt(); int n = s.nextInt(); int[][] arr = new int[m][n]; int x; //横坐标 int y; //竖坐标 int z = 1; //给数组元素赋的值 int c = 0; while(true){ if(z > m * n) break; // 打印第(c)行 for(x=c,y=c; y<n-c; y++){ arr[x][y] = z; z++; } // 打印第(n-c)列 for(x=c+1,y=n-1-c; x<m-c; x++){ arr[x][y] = z; z++; } // 打印第(m-1-c)行 for(x=m-1-c,y=n-2-c; y>=c; y--){ arr[x][y] = z; z++; } // 打印第(c)列 for(x=m-2-c,y=c; x>c; x--){ arr[x][y] = z; z++; } c++; } for(int i=0; i<m; i++){ for(int j=0; j<n; j++){ System.out.print(arr[i][j] + "\t"); } System.out.println(); } } }