目录
数组拷贝:
我们定义一个含有{4 , 5 , 6}的数组arr,我们同时定义一个数组arr2,新数组长度= arr.length,我们使用for循环遍历arr使其拷贝到arr2中。
数组反转:
同样定义一个数组arr,用len记录数组的长度:arr.length,无论数组中元素的个数是奇数还是偶数,我们让len/2,得到数组一半的长度,这时定义两个变量i和j,i下标从0开始,j下标从len-1开始,同时引入中间变量temp便于数组首位元素的交换。
详情可看我之前写的一篇数组的逆序博客!
数组扩容:
我们定义一个arr数组{ 1,2,3,4,5};下标0-4,数组长度为5,然后我们定义一个新的数组arr2,长度为arr.length +1,然后将arr数组的元素拷贝给arr2,并直接对arr2[arr2.lenget-1]赋值为我们要添加的元素。然后让arr指向arr2,arr=arr2,arr旧的数组被销毁。我们使用do- -while加判断语句来实现让用户自主选择是否扩容。
代码实现:
import java.util.Scanner;//引入包,用户才能使用输出功能
public class Day03{
public static void main (String[] args){
Scanner myScanner = new Scanner(System.in);
int arr[] = {1,2,3,4,5};
//使用一个变量保存用户扩容的数组内容
do{
int arr2[] = new int [arr.length + 1];
System.out.println("请输入你要添加的元素");
int addNum = myScanner.nextInt();
for(int i = 0 ; i < arr.length ; i++ ){
arr2[i]=arr[i];
}//是旧数组里的数组元素遍历到新数组中
arr2[arr2.length-1] = addNum;
arr=arr2;
System.out.println("===扩容后的数组===");
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+"\t");
}
System.out.println("是否继续添加: y/n");
char key = myScanner.next().charAt(0);
if( key == 'n'){
System.out.println("-.-");
break;
}
}while(true);
}
}
代码效果:
数组排序与查找:
简述java实现冒泡排序和顺序查找_爱德苏的博客-CSDN博客
二维数组的应用:
杨辉三角:
我们打印一个10行的杨辉三角
规律: 我们可以看出该三角型由多个一维数组组成,且一维数组第一个和最后一个元素都=1
其他元素符和规律:a[i][j]=a[i-1][j]+a[i-1][j-1];
代码实现:
//import java.util.Scanner;//引入包,用户才能使用输出功能
public class YangHui{
public static void main (String[] args){
//1
//1 1
//1 2 1
//1 3 3 1
//1 4 6 4 1
//1 5 10 10 1
//我们可以看出该三角型由多个一维数组组成,且一维数组第一个和最后一个元素都=1
//其他元素符号规律:a[i][j]=a[i-1][j]+a[i-1][j-1];
int arr[][] = new int [10][];//定义一个有10行的二维数组,一维数组具体大小不确定
for(int i = 0 ; i < arr.length ;i++ ){//遍历二维数组里的一维数组,arr.length(多少行)
arr[i] = new int [i+1];//给每一行的一维数组开空间
for(int j = 0 ; j <arr[i].length ; j++){
if(j==0 || j==i){//特殊条件,都赋值为1
arr[i][j]=1;
}
else{
arr[i][j]=arr[i-1][j]+arr[i-1][j-1];
}
}
}
//打印杨辉三角
for(int i = 0 ; i < arr.length ; i++){
for(int j = 0 ; j < arr[i].length ; j++){
System.out.print(arr[i][j]+"\t");
}
System.out.println();//换行
}
}
}
代码效果:
有点意思的习题:
习题1:
int [ ] x, y [ ] ;如果代码写成这个样子,则数组x表示一维数组,而数组y表示二维数组。
习题2:
已知有一个升序的数组{1,3,5,7,9 };要求插入元素后,依旧能够升序输出,例如插入 6,则输出数组为 { 1,3,5,6,7,9};或者插入 -1,输出为{ -1,1,3,5,6,7,9};
代码实现:
//import java.util.Scanner;//引入包,用户才能使用输出功能
public class HomeWork01{
public static void main (String[] args){
int arr[]={1,3,5,7,9};
int addNum = -1;//addNum<=arr[i]
int index= -1;//用于判断是否在数组中找到增加数的位置
for(int i = 0 ; i < arr.length ;i++){
if(addNum <= arr[i]){
index=i;
break;//找到一个就跳出循环。
}
}//判断addNum的位置
if(index== -1){//增加数最大,位于数组的最后位置。
index = arr.length;
}
//扩容数组
//将原来数组拷贝到新数组
//而且新数组的index位置不能被拷贝
int arr2[] = new int[arr.length + 1];
for(int i=0 ,j = 0 ; i < arr2.length ; i++){//i指向新数组,j指向原来的数组
if(index != i){
arr2[i] = arr[j];
j++;//j不一定跟i同加
}else{
arr2[i] = addNum;
}
}
arr = arr2;//将arr2赋给新数组,老的数组当垃圾
System.out.println("===插入后的新数组情况===");
for(int i= 0; i< arr.length ; i++){
System.out.print(arr[i]+"\t");
}
}
}
代码效果:
习题3:
随机生成10个0-100的整数保存到数组中,并倒序打印而且输出其平均值,求最大值和最大的下标,然后并判断随机10个数中是否有8,做出回馈。
//生成一个1-100的的随机整数(注意:Math一定要大写!)
//(int)(Math.random()*100 + 1)
代码实现:
//import java.util.Scanner;//引入包,用户才能使用输出功能
public class HomeWork03{
public static void main (String[] args){
//生成一个1-100的的随机整数
//(int)(Math.random()*100 + 1)
int arr[] = new int[10];
int sum = 0;//求和便于计算平均值
int len = arr.length;//保存数组长度
int temp = arr[0];//中间变量
int max = arr[0];//保存最大值
int maxPose = 0;//保存最大值下标
int index = -1;
System.out.print("产生十个1-100的随机数: ");
for(int i= 0 ; i < len ; i++){
arr[i] = (int)(Math.random()*100 + 1);
System.out.print(arr[i] + "\t");
if(arr[i]>max){
max = arr[i];
maxPose = i;
}
if(arr[i]==8){
index = i;
System.out.println("\n存在元素8");
}
}
System.out.println("\n该数组中最大值" + max);
System.out.println("\n该数组中最大的下标元素=" + maxPose);
if(index==-1){
System.out.println("\n该数组中没有8这个元素");
}
//保存十个1-100的整数到arr数组中
//倒序输出,求平均值,求最大值和最大值的下标,并查找是否有8
for(int i = 0,j = len-1 ; i < len/2 ; i++,j--){
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}//逆序数组
//倒序输出
System.out.print("\n打印倒序");
for(int i= 0 ; i < len ; i++){
System.out.print(arr[i] + "\t");
}
//
}
}
代码效果:
运气很不好啊!没有出来8。