欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java数组全攻略(二)

程序员文章站 2024-03-20 18:15:52
...

例题分析

1.传入函数内一个值,找到其对应的数组角标

public class Rewriter {
    public static int fun(int num) {
        int[] a =new int[] {1,2,3,4,5};
        for (int i = 0; i < a.length; i++) {
            if (a[i] == num) {
                return i;
            }
        }
        return -1;      //当传入的数值不在数组时,返回 -1
    }
    public static void main(String[] args) {    
        int num =fun(4);
        System.out.println(num);
    }
}
输出 :3

2.利用同一个数组让其内元素反转

public class Rewriter {
    public static void fun() {
        int[] a =new int[] { 1, 2, 3, 4, 5};
        for (int i = 0; i < a.length/2; i++) {
            int temp = a[a.length-1-i];           // 利用中间值重新分配两个数
            a[a.length -1-i] = a[i];
            a[i] = temp;
        }
        System.out.println(Arrays.toString(a));  // 利用Arrays中的toString方法,遍历a数组,让其以字符串形式输出
    }

    public static void main(String[] args) {            
        fun();
    }
}
输出:  [5, 4, 3, 2, 1]

3.冒泡循环

相邻两个数进行对比, 交换两个数的位置

public class Rewriter {
    public static void main(String[] args) {            
        int[] a = new int[] {5,4,3,2,1};
        for (int i = 0; i < a.length - 1; i++) {       
        //相邻两个数进行比较 一共会比较 a.length -1 次
            for (int j = 0; j < a.length - 1 - i; j++) {    
            //内循环比每趟的次数 每趟的次数都会比上一趟 -1    
                if (a[j] > a[j+1]) {
                    int temp = a[j+1];
                    a[j+1] = a[j];
                    a[j] = temp;
                }
            }
        }System.out.println(Arrays.toString(a));
    }
}
输出: [1, 2, 3, 4, 5]

4.选择排序

选择一个数和接下来的每一个数比较 交换位置 以此类推

public class Rewriter {
    public static void main(String[] args) {            
        int[] a = new int[] {5,4,3,2,1};
        for (int i = 0; i < a.length - 1; i++) {                
        //第一次 首选数和后面所有数依次比较 循环4次 第二次 3次
            for (int j = i+1; j < a.length ; j++) {  
            //第一趟比较了4次 第二趟比较了3次             
                if (a[i] > a[j]) {
                    int temp = a[j];
                    a[j] = a[i];
                    a[i] = temp;
                }
            }
        }System.out.println(Arrays.toString(a));
    }
}

5.查找游戏

随机生成一个数[1,100], 用户输入一个数,如果比这个数大 输出大了,让用户重新输出,直到输入正确为止

public class Rewriter {
    public static void main(String[] args) {    
        System.out.println("请输入一个1~100之内的数");
        Scanner scanner = new Scanner(System.in);
        int num = (int) (Math.random()*100+1);      
        while (true) {
            int n = scanner.nextInt();
            if (n > num) {
                System.out.println("你输入的数大了");
            }else if (n < num) {
                System.out.println("你输入的数小了");
            }else {
                System.out.println("正确");
                break;
            }
        }   
    }
}

6.折半查找

在一个有序数组中,输入一个元素值或者角标 可以查找到对应的角标或值

public class Rewriter {
    public static void fun(int[] a,int b) { 
        //传入数组 和 传入需要查询角标的元素值
        int max = a.length - 1;     
        //最大角标
        int min = 0;                
        //最小角标
        int mid = (max + min) / 2;  
        //中间角标
        while (b != a[mid]) {
            if (b > a[mid]) {   
                //当需要查找的角标比中间值大
                min = mid + 1;
            }else if (b < a[mid]) { 
                //当需要查找的角标比中间值小
                max = mid -1;
            }
            mid = (max + min) / 2;  
            //重新定义中间值
            if (max < min) {        
                //当最大角标 小于或等于最小角标说明这个值不存在
                mid = -1;
            }
        }
        System.out.println(mid);
    }

    public static void main(String[] args) {    
        int[] a = new int[] {1,5,10,15,20,25,30,35};
        fun(a, 30);
    }
}