Java基础之数组练习

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

在这里插入图片描述

在这里插入图片描述

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BugMiaowu2021

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值