目录
问题一:定义一个int型的一维数组,包含10个元素,分别赋一些随机整数,然后求出所有元素的最大值,最小值,和值, 要求:所有随机数都是两位数.
问题三: 面试题目: 创建一个长度为6的int型数组,要求取值为1-30,同时元素值各不相同。随机赋值怎么能避免重复
问题一:定义一个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] + " ");
}
}
}