面试题目:创建一个长度为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();