1、java能动态分配数组吗?
答:可以。 int i = 12;int[] myInt = new int[i];
2、我怎么知道数组的长度?
答: '.length' 属性获取
3、数组有没有length()这个方法? String有没有length()这个方法
答:数组没有length()这个方法,有length的属性。 String有length()这个方法
4、Java中的任何数据类型都可以使用System.out.pritln方法显示
对基本数据类型而言,输出的往往是变量的值; 对于像数组这一类复杂的数据类型,输出的是其堆空间中存储位置的hashCode值
5、操作二维数组的注意点
操作二维数组不应使用常数来控制维数。 具体方法是array.length表示行数,array[row].length来表示row行的列数。 这样当数组行数和列数不相等时,代码可以自动调整为正确的值。
6、显示输出:
1 String[] stringArray = new String[3]; // 各元素的值默认为null 2 for (int i = 0; i < stringArray.length; i++) { // 对各元素进行初始化,但没有赋值。 3 stringArray[i] = new String(); 4 System.out.println(stringArray[i]); 5 }
答案:空 (有别于null)
7、面试题目:创建一个长度为6的int型数组,要求取值为1-30,同时元素值各不相同
1 class ArrayExer { 2 public static void main(String[] args) { 3 //方式一: 4 // int[] arr = new int[6]; 5 // for (int i = 0; i < arr.length; i++) {// [0,1) [0,30) [1,31) 6 // arr[i] = (int) (Math.random() * 30) + 1; 7 // 8 // boolean flag = false; 9 // while (true) { 10 // for (int j = 0; j < i; j++) { 11 // if (arr[i] == arr[j]) { 12 // flag = true; 13 // break; 14 // } 15 // } 16 // if (flag) { 17 // arr[i] = (int) (Math.random() * 30) + 1; 18 // flag = false; 19 // continue; 20 // } 21 // break; 22 // } 23 // } 24 // 25 // for (int i = 0; i < arr.length; i++) { 26 // System.out.println(arr[i]); 27 // } 28 //方式二: 29 int[] arr = new int[6]; 30 for (int i = 0; i < arr.length; i++) {// [0,1) [0,30) [1,31) 31 arr[i] = (int) (Math.random() * 30) + 1; 32 33 for (int j = 0; j < i; j++) { 34 if (arr[i] == arr[j]) { 35 i--; 36 break; 37 } 38 } 39 } 40 41 for (int i = 0; i < arr.length; i++) { 42 System.out.println(arr[i]); 43 } 44 } 45 }
8、回形数格式方阵的实现
从键盘输入一个整数(1~20)
则以该数字为矩阵的大小,把1,2,3…n*n 的数字按照顺时针螺旋的形式填入其中。例如: 输入数字2,则程序输出:1 2 4 3
输入数字3,则程序输出:
1 2 3 8 9 4 7 6 5
输入数字4, 则程序输出:
1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7
方式一:
1 class RectangleTest { 2 public static void main(String[] args) { 3 Scanner scanner = new Scanner(System.in); 4 System.out.println("输入一个数字"); 5 int len = scanner.nextInt(); 6 int[][] arr = new int[len][len]; 7 8 int s = len * len; 9 /* 10 * k = 1:向右 k = 2:向下 k = 3:向左 k = 4:向上 11 */ 12 int k = 1; 13 int i = 0, j = 0; 14 for (int m = 1; m <= s; m++) { 15 if (k == 1) { 16 if (j < len && arr[i][j] == 0) { 17 arr[i][j++] = m; 18 } else { 19 k = 2; 20 i++; 21 j--; 22 m--; 23 } 24 } else if (k == 2) { 25 if (i < len && arr[i][j] == 0) { 26 arr[i++][j] = m; 27 } else { 28 k = 3; 29 i--; 30 j--; 31 m--; 32 } 33 } else if (k == 3) { 34 if (j >= 0 && arr[i][j] == 0) { 35 arr[i][j--] = m; 36 } else { 37 k = 4; 38 i--; 39 j++; 40 m--; 41 } 42 } else if (k == 4) { 43 if (i >= 0 && arr[i][j] == 0) { 44 arr[i--][j] = m; 45 } else { 46 k = 1; 47 i++; 48 j++; 49 m--; 50 } 51 } 52 } 53 54 // 遍历 55 for (int m = 0; m < arr.length; m++) { 56 for (int n = 0; n < arr[m].length; n++) { 57 System.out.print(arr[m][n] + "\t"); 58 } 59 System.out.println(); 60 } 61 } 62 }
方式二:
1 class RectangleTest1 { 2 3 public static void main(String[] args) { 4 int n = 7; 5 int[][] arr = new int[n][n]; 6 7 int count = 0; // 要显示的数据 8 int maxX = n - 1; // x轴的最大下标 9 int maxY = n - 1; // Y轴的最大下标 10 int minX = 0; // x轴的最小下标 11 int minY = 0; // Y轴的最小下标 12 while (minX <= maxX) { 13 for (int x = minX; x <= maxX; x++) { 14 arr[minY][x] = ++count; 15 } 16 minY++; 17 for (int y = minY; y <= maxY; y++) { 18 arr[y][maxX] = ++count; 19 } 20 maxX--; 21 for (int x = maxX; x >= minX; x--) { 22 arr[maxY][x] = ++count; 23 } 24 maxY--; 25 for (int y = maxY; y >= minY; y--) { 26 arr[y][minX] = ++count; 27 } 28 minX++; 29 } 30 31 for (int i = 0; i < arr.length; i++) { 32 for (int j = 0; j < arr.length; j++) { 33 String space = (arr[i][j] + "").length() == 1 ? "0" : ""; 34 System.out.print(space + arr[i][j] + " "); 35 } 36 System.out.println(); 37 } 38 } 39 }
9、下面数组定义正确的有:
1 A.String strs[] = { ‘a’ ‘b’ ‘c’}; 2 B.String[] strs = {“a”, “b”, “c”}; 3 C.String[] strs = new String{“a” ”b” ”c”}; 4 D.String strs[] = new String[]{“a”, “b”, “c”}; 5 E.String[] strs = new String[3]{“a”, “b”, “c”};
答案:
B_D
10、写出结果
1 class Demo{ 2 public static void main(String[] args){ 3 String foo="blue"; 4 boolean[] bar=new boolean[2]; 5 if(bar[0]){ 6 foo="green"; 7 } 8 System.out.println(foo); 9 } 10 }
[输出]:blue
11、练习Arrays工具类的使用:
1、从键盘输入本组学员的成绩,放到数组中
2、用for循环显示所有学员的成绩
3、排序:从低到高
4、查找是否有正好60分的,如果有返回位置
5、复制成绩最低三名构成新数组
6、用工具类打印成绩最低三名成绩
1 /* 2 练习: 3 1、从键盘输入本组学员的成绩,放到数组中 4 2、用foreach显示所有学员的成绩 5 3、排序:从低到高 6 4、查找是否有正好60分的,如果有返回位置 7 5、复制成绩最低三名构成新数组 8 6、用工具类打印成绩最低三名成绩 9 */ 10 import java.util.Scanner; 11 import java.util.Arrays; 12 13 class TestArraysExer{ 14 public static void main(String[] args){ 15 //1、声明一个数组并创建一个数组 16 int[] scores = new int[5]; 17 18 //2、从键盘输入成绩 19 Scanner input = new Scanner(System.in); 20 for(int i=0; i<scores.length; i++){ 21 //成绩存在数组的元素中 22 //为元素赋值 23 System.out.print("请输入第" + (i+1) + "个学员的成绩:"); 24 scores[i] = input.nextInt(); 25 } 26 27 //3、显示成绩 28 //用foreach显示所有学员的成绩 29 System.out.println("本组学员的成绩如下:"); 30 for(int s = 0; s < scores.length;s++){ 31 System.out.println(scores[s]); 32 } 33 //4、排序:从低到高 34 Arrays.sort(scores); 35 36 System.out.println("排序后的结果:" + Arrays.toString(scores)); 37 38 //5、查找60分 39 int index = Arrays.binarySearch(scores, 60); 40 if(index<0){ 41 System.out.println("没有正好60分的"); 42 }else{ 43 System.out.println("60分的索引位置:" + index); 44 } 45 46 //6、复制成绩最低三名构成新数组 47 //int[] newArray = Arrays.copyOfRange(scores, 0, 3); 48 int[] newArray = Arrays.copyOf(scores, 3); 49 50 //7、用工具类打印成绩最低三名成绩 51 System.out.println("成绩最低的三名同学是:" + Arrays.toString(newArray)); 52 } 53 }
12、一维数组a[],用java代码将数组元素顺序颠倒
1 public static void main(String[] args) { 2 int[] a = new int[] { (int) (Math.random() * 1000), 3 (int) (Math.random() * 1000), (int) (Math.random() * 1000), 4 (int) (Math.random() * 1000), (int) (Math.random() * 1000) }; 5 6 System.out.println(a); 7 System.out.println(Arrays.toString(a)); 8 swap(a); 9 System.out.println(Arrays.toString(a)); 10 } 11 12 public static void swap(int a[]) { 13 int len = a.length; 14 for (int i = 0; i < len / 2; i++) { 15 int tmp = a[i]; 16 a[i] = a[len - 1 - i]; 17 a[len - 1 - i] = tmp; 18 } 19 }