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