面試題目:創建一個長度為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();