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、显示输出:
String[] stringArray = new String[3]; // 各元素的值默认为null
for (int i = 0; i < stringArray.length; i++) { // 对各元素进行初始化,但没有赋值。
stringArray[i] = new String();
System.out.println(stringArray[i]);
}
答案:空 (有别于null)
7、面试题目:创建一个长度为6的int型数组,要求取值为1-30,同时元素值各不相同
class ArrayExer {
public static void main(String[] args) {
//方式一:
// int[] arr = new int[6];
// for (int i = 0; i < arr.length; i++) {// [0,1) [0,30) [1,31)
// arr[i] = (int) (Math.random() * 30) + 1;
//
// boolean flag = false;
// while (true) {
// for (int j = 0; j < i; j++) {
// if (arr[i] == arr[j]) {
// flag = true;
// break;
// }
// }
// if (flag) {
// arr[i] = (int) (Math.random() * 30) + 1;
// flag = false;
// continue;
// }
// break;
// }
// }
//
// for (int i = 0; i < arr.length; i++) {
// System.out.println(arr[i]);
// }
//方式二:
int[] arr = new int[6];
for (int i = 0; i < arr.length; i++) {// [0,1) [0,30) [1,31)
arr[i] = (int) (Math.random() * 30) + 1;
for (int j = 0; j < i; j++) {
if (arr[i] == arr[j]) {
i--;
break;
}
}
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
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
方式一:
class RectangleTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("输入一个数字");
int len = scanner.nextInt();
int[][] arr = new int[len][len];
int s = len * len;
/*
* k = 1:向右 k = 2:向下 k = 3:向左 k = 4:向上
*/
int k = 1;
int i = 0, j = 0;
for (int m = 1; m <= s; m++) {
if (k == 1) {
if (j < len && arr[i][j] == 0) {
arr[i][j++] = m;
} else {
k = 2;
i++;
j--;
m--;
}
} else if (k == 2) {
if (i < len && arr[i][j] == 0) {
arr[i++][j] = m;
} else {
k = 3;
i--;
j--;
m--;
}
} else if (k == 3) {
if (j >= 0 && arr[i][j] == 0) {
arr[i][j--] = m;
} else {
k = 4;
i--;
j++;
m--;
}
} else if (k == 4) {
if (i >= 0 && arr[i][j] == 0) {
arr[i--][j] = m;
} else {
k = 1;
i++;
j++;
m--;
}
}
}
// 遍历
for (int m = 0; m < arr.length; m++) {
for (int n = 0; n < arr[m].length; n++) {
System.out.print(arr[m][n] + "\t");
}
System.out.println();
}
}
}
方式二:
class RectangleTest1 {
public static void main(String[] args) {
int n = 7;
int[][] arr = new int[n][n];
int count = 0; // 要显示的数据
int maxX = n - 1; // x轴的最大下标
int maxY = n - 1; // Y轴的最大下标
int minX = 0; // x轴的最小下标
int minY = 0; // Y轴的最小下标
while (minX <= maxX) {
for (int x = minX; x <= maxX; x++) {
arr[minY][x] = ++count;
}
minY++;
for (int y = minY; y <= maxY; y++) {
arr[y][maxX] = ++count;
}
maxX--;
for (int x = maxX; x >= minX; x--) {
arr[maxY][x] = ++count;
}
maxY--;
for (int y = maxY; y >= minY; y--) {
arr[y][minX] = ++count;
}
minX++;
}
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {
String space = (arr[i][j] + "").length() == 1 ? "0" : "";
System.out.print(space + arr[i][j] + " ");
}
System.out.println();
}
}
}
9、下面数组定义正确的有:
A.String strs[] = { ‘a’ ‘b’ ‘c’};
B.String[] strs = {“a”, “b”, “c”};
C.String[] strs = new String{“a” ”b” ”c”};
D.String strs[] = new String[]{“a”, “b”, “c”};
E.String[] strs = new String[3]{“a”, “b”, “c”};
答案:
B_D
10、写出结果
class Demo{
public static void main(String[] args){
String foo="blue";
boolean[] bar=new boolean[2];
if(bar[0]){
foo="green";
}
System.out.println(foo);
}
}
[输出]:blue
11、练习Arrays工具类的使用:
1、从键盘输入本组学员的成绩,放到数组中
2、用for循环显示所有学员的成绩
3、排序:从低到高
4、查找是否有正好60分的,如果有返回位置
5、复制成绩最低三名构成新数组
6、用工具类打印成绩最低三名成绩
/*
练习:
1、从键盘输入本组学员的成绩,放到数组中
2、用foreach显示所有学员的成绩
3、排序:从低到高
4、查找是否有正好60分的,如果有返回位置
5、复制成绩最低三名构成新数组
6、用工具类打印成绩最低三名成绩
*/
import java.util.Scanner;
import java.util.Arrays;
class TestArraysExer{
public static void main(String[] args){
//1、声明一个数组并创建一个数组
int[] scores = new int[5];
//2、从键盘输入成绩
Scanner input = new Scanner(System.in);
for(int i=0; i<scores.length; i++){
//成绩存在数组的元素中
//为元素赋值
System.out.print("请输入第" + (i+1) + "个学员的成绩:");
scores[i] = input.nextInt();
}
//3、显示成绩
//用foreach显示所有学员的成绩
System.out.println("本组学员的成绩如下:");
for(int s = 0; s < scores.length;s++){
System.out.println(scores[s]);
}
//4、排序:从低到高
Arrays.sort(scores);
System.out.println("排序后的结果:" + Arrays.toString(scores));
//5、查找60分
int index = Arrays.binarySearch(scores, 60);
if(index<0){
System.out.println("没有正好60分的");
}else{
System.out.println("60分的索引位置:" + index);
}
//6、复制成绩最低三名构成新数组
//int[] newArray = Arrays.copyOfRange(scores, 0, 3);
int[] newArray = Arrays.copyOf(scores, 3);
//7、用工具类打印成绩最低三名成绩
System.out.println("成绩最低的三名同学是:" + Arrays.toString(newArray));
}
}
12、一维数组a[],用java代码将数组元素顺序颠倒
public static void main(String[] args) {
int[] a = new int[] { (int) (Math.random() * 1000),
(int) (Math.random() * 1000), (int) (Math.random() * 1000),
(int) (Math.random() * 1000), (int) (Math.random() * 1000) };
System.out.println(a);
System.out.println(Arrays.toString(a));
swap(a);
System.out.println(Arrays.toString(a));
}
public static void swap(int a[]) {
int len = a.length;
for (int i = 0; i < len / 2; i++) {
int tmp = a[i];
a[i] = a[len - 1 - i];
a[len - 1 - i] = tmp;
}
}