【贪玩巴斯】JAVA初学笔记——chapter3 JAVA基本语法,数组中常涉及到的算法 //2021-1-30

数组中常涉及到的算法

 

一、赋值问题

杨辉三角

1.数组元素的赋值问题

https://blog.csdn.net/D16100/article/details/113099988

每日一练中的第六题

 

二、2.求数值型数组中元素的最大值、最小值、平均数、总和等。

2.求数值型数组中元素的最大值、最小值、平均数、总和等。

 

ArrayTest1
/*
 * 算法的考查:求数值型数组中元素的最大值、最小值、平均数、总和等


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

 


 * [10,99]  b-a + 1 + a   random得到的是double型的
 * 公式:(int)(Math.random() * (99 - 10 + 1) + 10)
 *

公式截图:

随机数公式截图最下角

 

 

 


 */
public class ArrayTest1 {


    public static void main(String[] args) {
        

        int[] arr = new int[10];
        
        for(int i = 0;i < arr.length;i++){
            arr[i] = (int)(Math.random() * (99 - 10 + 1) + 10);
        }
        


        //遍历
        for(int i = 0;i < arr.length;i++){
            System.out.print(arr[i] + "\t");
        }
        System.out.println();
        

 


        //求数组元素的最大值
        int maxValue = arr[0];
        for(int i = 1;i < arr.length;i++){
            if(maxValue < arr[i]){
                maxValue = arr[i];
            }
        }
        System.out.println("最大值为:" + maxValue);


        
        //求数组元素的最小值
        int minValue = arr[0];
        for(int i = 1;i < arr.length;i++){
            if(minValue > arr[i]){
                minValue = arr[i];
            }
        }
        System.out.println("最小值为:" + minValue);


        //求数组元素的总和
        int sum = 0;
        for(int i = 0;i < arr.length;i++){
            sum += arr[i];
        }
        System.out.println("总和为:" + sum);

 


        //求数组元素的平均数
        int avgValue = sum / arr.length;
        System.out.println("平均数为:" + avgValue);
    }
}

 

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

 

 

1.数组的复制


  
ArrayExer2

/*


 * 使用简单数组
(1)创建一个名为ArrayExer2的类,在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。
 * 


 * ☆☆☆☆☆思考:array1和array2是什么关系?☆☆☆☆☆
    array1和array2地址值相同,都指向了堆空间的唯一的一个数组实体。


拓展:修改题目,实现array2对array1数组的复制
 */

 

public class ArrayExer2 {
    public static void main(String[] args) {  //alt + /
      

        int[] array1,array2;
        
        array1 = new int[]{2,3,5,7,11,13,17,19};
        


        //显示array1的内容
        for(int i = 0;i < array1.length;i++){
            System.out.print(array1[i] + "\t");
        }
        

    
//赋值array2变量等于array1
        //不能称作数组的复制。
        array2 = array1;

//地址一样 两个都变成同一地址  
//就好比你在桌面创建一个快捷方式,你在快捷方式或者你在哪个地址那里修改,都会造成影响。

有一个PPT截图


        


        


//修改array2中的偶索引元素,使其等于索引值(如array[0]=0,array[2]=2)


        for(int i = 0;i < array2.length;i++){
            if(i % 2 == 0){
                array2[i] = i;
            }
            
        }
        System.out.println();
        //打印出array1
        for(int i = 0;i < array1.length;i++){
            System.out.print(array1[i] + "\t");
        }
    }
}

 

//

 

2.真正的复制

 

真正的复制

/*
 * 使用简单数组
 * 拓展:修改题目,实现array2对array1数组的复制
 */


public class ArrayExer3 {
    public static void main(String[] args) {  //alt + /
        int[] array1,array2;
        
        array1 = new int[]{2,3,5,7,11,13,17,19};
        


        
//显示array1的内容


        for(int i = 0;i < array1.length;i++){
            System.out.print(array1[i] + "\t");
        }
        
        

 

//数组的复制:
        array2 = new int[array1.length];
        for(int i = 0;i < array2.length;i++){
            array2[i] = array1[i];
        }
       

 

插入PPT截图理解:

 

 

//修改array2中的偶索引元素,使其等于索引值(如array[0]=0,array[2]=2)


        for(int i = 0;i < array2.length;i++){
            if(i % 2 == 0){
                array2[i] = i;
            }
            
        }
        System.out.println();
        //打印出array1
        for(int i = 0;i < array1.length;i++){
            System.out.print(array1[i] + "\t");
        }
    }
}

 

 

3.数组的反转和查找

 

ArrayTest2


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

 


public class ArrayTest2 {
    
    public static void main(String[] args) {
        
        

 

      String[] arr = new String[]{"JJ","DD","MM","BB","GG","AA"};
        
        

       
//数组的复制(区别于数组变量的赋值:arr1 = arr)

        String[] arr1 = new String[arr.length];
        for(int i = 0;i < arr1.length;i++){
            arr1[i] = arr[i];
        }
        

 

ArrayTest2    
    
//数组的反转


        //方法一:

            //直接除以2 长度小于一半


//        for(int i = 0;i < arr.length / 2;i++){
//            String temp = arr[i];
//            arr[i] = arr[arr.length - i -1];
//            arr[arr.length - i -1] = temp;
//        }
        
        //方法二:
//        for(int i = 0,j = arr.length - 1;i < j;i++,j--){
//            String temp = arr[i];
//            arr[i] = arr[j];
//            arr[j] = temp;
//        }
        


        
//遍历
        for(int i = 0;i < arr.length;i++){
            System.out.print(arr[i] + "\t");
        }
        
        System.out.println();


       

 

//查找(或搜索)

String[] arr = new String[]{"JJ","DD","MM","BB","GG","AA"};

        
//线性查找:
        String dest = "BB"; // 在3的位置
        dest = "CC"; // 没有找到
        
        boolean isFlag = true;
        
        for(int i = 0;i < arr.length;i++){
            //equals 比较内容是否相同
            if(dest.equals(arr[i])){
                System.out.println("找到了指定的元素,位置为:" + i);
                isFlag = false;
                break;
            }
            
        }
        if(isFlag){
            System.out.println("很遗憾,没有找到的啦!");
            
        }


        
//二分法查找:(熟悉)  更快、 也叫折半查找


//☆☆☆☆☆☆☆☆前提:所要查找的数组必须有序。☆☆☆☆☆☆☆☆

        int[] arr2 = new int[]{-98,-34,2,34,54,66,79,105,210,333};
        
        int dest1 = -34;
        dest1 = 35;
        int head = 0;//初始的首索引
        int end = arr2.length - 1;//初始的末索引
        boolean isFlag1 = true;
        while(head <= end){
            
            int middle = (head + end)/2;
            
            if(dest1 == arr2[middle]){
                System.out.println("找到了指定的元素,位置为:" + middle);
                isFlag1 = false;
                break;
            }else if(arr2[middle] > dest1){
                end = middle - 1;
            }else{//arr2[middle] < dest1
                head = middle + 1;
            }

            
        }
        
        if(isFlag1){
            System.out.println("很遗憾,没有找到的啦!");
        }
        
        
    }
}
 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

贪玩巴斯

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

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

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

打赏作者

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

抵扣说明:

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

余额充值