Java面试题:数组

面试题目:创建一个长度为6的int型数组,要求取值为1-30,同时元素值各不相同
//方式一:

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]);
    }

从键盘输入一个整数(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

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();
    }

打印数组:
01 02 03 04 05 06 07
24 25 26 27 28 29 08
23 40 41 42 43 30 09
22 39 48 49 44 31 10
21 38 47 46 45 32 11
20 37 36 35 34 33 12
19 18 17 16 15 14 13

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();
}

创建一个char类型的26个元素的数组,分别 放置’A’-'Z‘。
使用for循环访问所有元素并打印出来。
提示:char类型数据运算 ‘A’+1 -> ‘B’,‘0’+1 -> '1‘

//1.声明并开辟长度
char[] chs = new char[26];
//2.手动赋值
for(int i=0;i<chs.length;i++){
	chs[i] = (char)('A'+i);
}
//3.打印
for(int i=0;i<chs.length;i++){
	System.out.println(chs[i]);
}

有一个数列:白眉鹰王、金毛狮王、紫衫龙王、青仪斧王
猜数游戏:从键盘中任意输入一个名称,判断数列中是否包含此名称 【查找】

Scanner input = new Scanner(System.in);
//1.声明并初始化
String[] names = {"白眉鹰王","青易斧王","金毛狮王","紫衫龙王"};
//2.查找
System.out.println("请输入你要查找的名:");
String search = input.next();
/*----------------核心的查找------------
	查找:线性查找、二分查找
	线性查找:依次将数组中的元素提取出来和要查找进行匹配
	二分查找:要求待查找的数组已经排好序,查找效率较高
*/
boolean flag = false;
for(int i=0;i<names.length;i++){
	if(names[i].equals(search)){//找到了
		System.out.println("找到了,下标是:"+i);
		flag = true;
		break;
	}
}
if(!flag){
	System.out.println("没找到");
}

冒泡排序算法

int[] arr = {2,3,4,1,5};
//排序
/*
	i	j		
	0	0		arr[0] vs arr[1]
		1		arr[1] vs arr[2]
		2		arr[2] vs arr[3]
		3		arr[3] vs arr[4]
*/
for(int i=0;i<arr.length-1;i++){//外层循环。 i:控制轮数
	//循环操作:每一轮发生的事情
	for(int j=0;j<arr.length-1-i;j++){//内层循环。j:控制比较的次数
		//循环操作:每一次发生的事情(比较)
		if(arr[j]<arr[j+1]){
			//交换两个相邻元素
			int temp = arr[j];
			arr[j]  = arr[j+1];
			arr[j+1] = temp;
		}
	}
}
//打印
for(int i=0;i<arr.length;i++){
	System.out.print(arr[i]+"\t");
}
System.out.println();

(1)创建一个名为TestArray的类,在main()方法中声明array1和array2两个变量,他们是int[]类型的数组。
(2)使用大括号{},把array1初始化为8个素数:2,3,5,7,11,13,17,19。
(3)显示array1的内容。
(4)赋值array2变量等于array1,修改array2中的偶索引元素,使其等于索引值(如array[0]=0,array[2]=2)。打印出array1。

数组的赋值方式一:赋的是地址

//基本类型
int a = 10;
int b=a;
b=9999;
System.out.println("a="+a+",b="+b);
int[] array1 = {2,3,5,7,11,13,17,19};
int[] array2 = array1;//数组的赋值
//打印修改前的array1和array2
System.out.println("---------修改前的array1-------------");
for(int i=0;i<array1.length;i++){
	System.out.print(array1[i]+"\t");
}
System.out.println("\n---------修改前的array2-------------");
for(int i=0;i<array2.length;i++){
	System.out.print(array2[i]+"\t");
}
System.out.println();
//修改array2
for(int i=0;i<array2.length;i++){
	if(i%2==0){
		array2[i] = i;
	}
}
//打印修改后的array1和array2
System.out.println("---------修改后的array1-------------");
for(int i=0;i<array1.length;i++){
	System.out.print(array1[i]+"\t");
}
System.out.println("\n---------修改后的array2-------------");
for(int i=0;i<array2.length;i++){
	System.out.print(array2[i]+"\t");
}
System.out.println();

数组的赋值方式二:赋的仅仅是内容

int[] array1 = {2,3,5,7,11,13,17,19};
//赋值
int[] array2 = new int[array1.length];
for(int i=0;i<array2.length;i++){
	array2[i] = array1[i];
}
//打印修改前的array1和array2
System.out.println("---------修改前的array1-------------");
for(int i=0;i<array1.length;i++){
	System.out.print(array1[i]+"\t");
}
System.out.println("\n---------修改前的array2-------------");
for(int i=0;i<array2.length;i++){
	System.out.print(array2[i]+"\t");
}
System.out.println();
//修改array2
for(int i=0;i<array2.length;i++){
	if(i%2==0){
		array2[i] = i;
	}
}
//打印修改后的array1和array2
System.out.println("---------修改后的array1-------------");
for(int i=0;i<array1.length;i++){
	System.out.print(array1[i]+"\t");
}
System.out.println("\n---------修改后的array2-------------");
for(int i=0;i<array2.length;i++){
	System.out.print(array2[i]+"\t");
}
System.out.println();

反转:随机生成五个数,并将其反转打印
1 3 5 2 4 1 length/2-1
4 2 5 3 1
12345678 3 length/2-1
87654321
交换两个数
arr[0]——arr[length-1] length-1-i
arr[1]——arr[length-2] length-1

arr[length/2-1]

方式一:找规律

//1.声明并开辟空间
int[] arr = new int[5];
//2.赋值
for(int i=0;i<arr.length;i++){
	arr[i] = (int)(Math.random()*100+1);
}
System.out.println("反转前");
for(int i=0;i<arr.length;i++){
	System.out.print(arr[i]+"\t");
}
System.out.println();
//3.使用
for(int i=0;i<arr.length/2;i++){
	//交换两个数   i vs arr.length-1-i
	int temp = arr[i];
	arr[i] = arr[arr.length-1-i];
	arr[arr.length-1-i] = temp;
}
System.out.println("反转后");
for(int i=0;i<arr.length;i++){
	System.out.print(arr[i]+"\t");
}
System.out.println();

方式二:数组的赋值

//1.声明并开辟空间
int[] arr = new int[5];
//2.赋值
for(int i=0;i<arr.length;i++){
	arr[i] = (int)(Math.random()*100+1);
}
System.out.println("反转前");
for(int i=0;i<arr.length;i++){
	System.out.print(arr[i]+"\t");
}
System.out.println();
//3.使用
//①创建一个新数组,长度=arr.length
int[] newArr = new int[arr.length];
//②逆序赋值
/*
i
0	arr.length-1
1	arr.length-2
*/
for(int i=0,j=arr.length-1;i<arr.length;i++,j--){
	newArr[j]=arr[i];
}
//③将新数组的地址赋值给arr
arr=newArr;

System.out.println("反转后");
for(int i=0;i<arr.length;i++){
	System.out.print(arr[i]+"\t");
}
System.out.println();

数组的高级使用:增加和插入
添加

Scanner input = new Scanner(System.in);
//声明并初始化
int[] arr = {2,3,1,4,6};
//打印
System.out.println("原始数组的元素如下");
for(int i=0;i<arr.length;i++){
	System.out.print(arr[i]+"\t");
}
System.out.println();
do{
	//-----------------增加---------------------
	System.out.print("请输入要添加的元素:");
	int add = input.nextInt();
	//----------------具体的添加业务----------
	//①新建一个数组,长度=arr.length+1
	int[] newArr = new int[arr.length+1];

	//②依次为新数组的元素赋值
	for(int i=0;i<arr.length;i++){
		newArr[i] = arr[i];
	}
	//③将add赋值到新数组的空位上
	newArr[newArr.length-1] = add;
	//④将newArr的地址赋值给arr
	arr = newArr;
	System.out.println("添加成功!");
	System.out.println("是否继续添加?Y/N");
	char key = input.next().toUpperCase().charAt(0);//将字符串转换成大写,然后再提取第一个字符
	if(key=='N')
		break;
}while(true);
//打印
System.out.println("添加后的元素如下");
for(int i=0;i<arr.length;i++){
	System.out.print(arr[i]+"\t");
}
System.out.println();

插入

Scanner input = new Scanner(System.in);
//声明并初始化
int[] arr = {2,3,1,4,6};
//打印
System.out.println("原始数组的元素如下");
for(int i=0;i<arr.length;i++){
	System.out.print(arr[i]+"\t");
}
System.out.println();
do{
//----------------------插入--------------------
System.out.print("请输入要插入的元素:");
int add = input.nextInt();
System.out.print("请输入要插入的位置:");
int index = input.nextInt();
//----------------------具体的插入业务-----------
//①创建新数组,长度=arr.length+1
int[] newArr = new int[arr.length+1];
//②循环赋值
for(int i=0;i<arr.length;i++){
	newArr[i] = arr[i];
}
//③循环后移
for(int i=newArr.length-1;i>index;i--){
	newArr[i]=newArr[i-1];
}
//④将新元素赋值到index位置上
newArr[index] = add;
//⑤将newArr的地址赋值给arr
arr = newArr;
System.out.println("插入成功!");
System.out.println("是否继续添加?Y/N");
	char key = input.next().toUpperCase().charAt(0);//将字符串转换成大写,然后再提取第一个字符
	if(key=='N')
		break;
}while(true);
System.out.println("插入后的元素如下:");
for(int i=0;i<arr.length;i++){
	System.out.print(arr[i]+"\t");
}
System.out.println();
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值