数组例题中学习 随机赋值怎么能避免重复,打印杨辉三角,二分法查找,冒泡法

目录

问题一:定义一个int型的一维数组,包含10个元素,分别赋一些随机整数,然后求出所有元素的最大值,最小值,和值, 要求:所有随机数都是两位数. 

 问题二: 数组的复制和数组地址值的赋值

问题三: 面试题目: 创建一个长度为6的int型数组,要求取值为1-30,同时元素值各不相同。随机赋值怎么能避免重复

 问题四: 使用二维数组打印一个10行杨辉三角。

 数组内外层元素的初始化值

 算法的考查:数组的复制、反转、查找(线性查找、二分法查找)

冒泡法 


问题一:定义一个int型的一维数组,包含10个元素,分别赋一些随机整数,然后求出所有元素的最大值,最小值,和值, 要求:所有随机数都是两位数. 

package com.haiyu.exer;
/*
 * 定义一个int型的一维数组,包含10个元素,分别赋一些随机整数,然后求出所有元素的最大值
	最小值,和值,
	要求:所有随机数都是两位数.

[0,1)*90 →>[0,90) + 10>[10,100) >[10,99]
(int)(Math.random()*90+ 10)

 */
public class ArrayExer3 {
public static void main(String[] args) {
	int[] arr = new int[10];
	for(int i = 0;i<arr.length;i++) {
		arr[i] = (int)(Math.random()*90+10);
		System.out.print(arr[i] + " ");
		}
	System.out.println();
		//求最大值
		int max = 0;
		for(int i = 0;i< arr.length;i++) {
			if(max <= arr[i]) {
				max = arr[i];
			}
		}
		
		//求最小值
		int min = 100;
		for(int i = 0;i< arr.length;i++) {
			if(min >= arr[i]) {
				min = arr[i];
			}
		}
		
		//求和值
		int he = 0;
		for(int i = 0;i < arr.length;i++) {
			he += arr[i];
		}
		
		
		System.out.println("最大值:"+ max);
		System.out.println("最小值:"+ min);
		System.out.println("和值:"+ he);
	}

}

 问题二: 数组的复制和数组地址值的赋值

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


 */
public class ArrayExer4 {
public static void main(String[] args) {
	int[] array1,array2;
	array1 = new int[] {2,3,5,7,11,13,17,19};
	for(int i = 0;i<array1.length;i++) {
		System.out.print(array1[i]+ " ");//2 3 5 7 11 13 17 19 
	}
	array2 =array1;//这里是将array1的地址赋给了array2,表示都指向了堆中的数组实体。这里的array2相当于一个快捷方式一样的存在
	
	for(int i = 0;i< array2.length;i++) {
		if(i%2 == 0) {
			array2[i] = i; 
		}
	}
	System.out.println();
	for(int i = 0;i<array1.length;i++) {
	System.out.print(array1[i]+ " ");//0 3 2 7 4 13 6 19 
	}
	
	
	
	
	/*
	 * 实现array2对array1数组的复制
	 * 这里把array2 = array1;这个东西改一下
			改成
			array2[] = new int[array1.length];//只要new了就是开辟了一个新的数组空间
			for(int i = 0;i< array2.length;i++) {
			array2[i] = array1[i];
	}
	 */ 
	
}
}

问题三: 面试题目: 创建一个长度为6的int型数组,要求取值为1-30,同时元素值各不相同。随机赋值怎么能避免重复

package com.haiyu.exer;
/*
 * 面试题目:创建一个长度为6的int型数组,要求取值为1-30,同时元素值各不相同

 */
public class MianShi1 {
	public static void main(String[] args) {
	
		int[] arr = new int[6];
	
		for(int i = 0;i < arr.length;i++) {
			arr[i] = (int)(Math.random()*30)+1;
		
			for(int j = 0;j < i ;j++) {
				if(arr[i] == arr[j]) {
					i--;
					break;//退出循环体,下一步:i++
				}
			}
		}
		//遍历数组定义的变量仅仅代表数组中的第几个元素所以q可以是i、j等任意字母
		for( int q = 0;q< arr.length;q++) {
			System.out.println(arr[q]);
		}
	}
}

 问题四: 使用二维数组打印一个10行杨辉三角。

/*
 * 使用二维数组打印一个10行杨辉三角。
[提示]
1.第一行有1个元素,第n行有n个元素
2.每一行的第一个元素和最后一个元素都是1
3.从第三行开始,对于非第一个元素和最后一个元素的元素。即:
yanghui[i][j] = yanghui[i-1][j-1] + yanghui[i-1][j];

 */
package com.haiyu.exer;
public class YangHuiText {
public static void main(String[] args) {
	//1、初始化一个二维数组
	int[][] yanghui = new int[10][];
	//2、给二位数组初始化
	for(int i = 0;i < yanghui.length;i++) {
		yanghui[i] = new int[1+i];
	//2.1、给每行的元素赋值
		for(int j = 0;j < yanghui[i].length;j++) {
			if(j == 0||j == i) {
				yanghui[i][j] = 1;
			}else {
				yanghui[i][j] = yanghui[i-1][j-1] + yanghui[i-1][j];
			}
		}
	}
	//3、遍历数组
	for(int i = 0;i <yanghui.length;i++) {
		for(int j = 0;j < yanghui[i].length;j++) {
			System.out.print(yanghui[i][j] + "  ");
		}
		System.out.println();
	}
}
}

 数组内外层元素的初始化值

package com.haiyu.java;
/*
 * int【】【】中: 第一个【】是外层,第二个【】是内层
 * 
 * 
 * ⑤数组元素的默认初始化值
 * 	初始化方式一:int[][] arr = new int[4][3];
 * 		外层元素的初始化值为:地址值
 * 		内层元素的初始化值为:与一维数组的初始化值一样
 * 
 * 	初始化方式二:int[][] arr = new int[4][];
 * 		外层元素的初始化值为:null
 * 		内层元素的初始化值为:不能调用会报错
 * ⑥数组的内存解析
 */
public class ArrayText3 {
	public static void main(String[] args) {
		
		int[][] arr = new int[4][3];
		System.out.println(arr);//[[I@1c4af82c   地址值:[[表示二维数组@后面跟地址
		System.out.println(arr[0]);//[I@1c4af82c  地址值:[表示一维数组@后面跟地址
		System.out.println(arr[0][0]);//0
		}
}

 算法的考查:数组的复制、反转、查找(线性查找、二分法查找)

package com.haiyu.java;
/*
 * 算法的考查:数组的复制、反转、查找(线性查找、二分法查找)

 */
public class ArrayText4 {
public static void main(String[] args) {
	String[] arr = new String[] {"bb","mm","jj","gg","dd","mm"};
	
	//数组的复制
	String[] arr1 = new String[arr.length];
	for(int i = 0;i< arr1.length;i++) {
		arr1[i] = arr[i];
	}
	for(int i = 0;i< arr1.length;i++) {
		System.out.print(arr1[i]+ " ");
	}
System.out.println();
	
	//数组的反转
	String[] arr2 = new String[arr.length];
	
	for(int i = 0;i<arr2.length/2;i++) {
		
		String temp = arr[i];
		arr2[i] = arr [arr.length-1-i];
		arr2[arr.length-1-i] = temp;
	}
	
	for(int i = 0;i< arr2.length;i++) {
		System.out.print(arr2[i]+  " ");
		 
	}
	System.out.println();
	
	//数组的查找
	//线性查找
	String mubiao = "qq";
	Boolean flag = true;
	for(int i = 0;i< arr.length;i++ ) {
		if(mubiao.equals(arr[i])) {
			System.out.println("找到了,目标位置为:"+ i);
			flag = false;
			break;
		}
	}
	if(flag) {
		System.out.println("抱歉,没有找到!");
	}
	//二分法查找
	//前提:有序
	int[] arr3 = new int[] {-93,-64,-1,3,14,34,56,452};
	int mubiao1 = 452;
	boolean flag1 = true;
	int head = 0;//初始化首索引
	int end = arr3.length-1;//初始化末索引
	
	while(head <= end) {
		int middle = (end + head)/2;//一开始我写成了减号 ,这里要注意!!!
		
	if(arr3[middle] == mubiao1) {
		System.out.println("找到了,目标位置为:"+ middle);
		flag1 = false;
		break;
	}else if(arr3[middle] < mubiao1) {
		head = middle+ 1;
		
	}else if (arr3[middle] > mubiao1) {
		end = middle-1;
	}
	
	}
	
	if(flag1) {
		System.out.println("抱歉没找到");
	}
	
	
	
}
}

冒泡法 

public class Bibabo {
public static void main(String[] args) {
	int[] arr = new int[] {-2,-56,2,56,-32,56654,532,-2156};
	
	//冒泡排序
	for(int i = 0;i < arr.length;i++) {
		for(int j = 0;j < arr.length-1-i;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] + " ");
	}
	
	
	
}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

java塑造中...

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

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

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

打赏作者

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

抵扣说明:

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

余额充值