Java学习——数组练习摘要

本文介绍了Java中的数组反转、冒泡排序算法实现,以及杨辉三角的概念和值拷贝与地址拷贝的区别,展示了基础编程中的重要概念和操作。
摘要由CSDN通过智能技术生成

目录

一、数组反转

二、冒泡排序

三、杨辉三角

四、值拷贝与地址拷贝 


一、数组反转

例如,输入:2 3 4 5 6

           输出:6 5 4 3 2

代码:

import java.util.Scanner;
public class fanzhuan {
    public static void main(String[] args) {
        //数组中的数值反转
        int sum[] = new int[5];
        Scanner myScanner = new Scanner(System.in);
        System.out.println("请输入5个数");
        for(int i = 0; i < sum.length; i++) {
            sum[i] = myScanner.nextInt();
        }
    //把 sum[0] 和 sum[4] 进行交换
    //. 把 sum[1] 和 sum[3] 进行交换
    //.  交换次数为sum.length / 2次
    //. 每次交换时,对应的下标 是 sum[i] 和 sum[sum.length - 1 -i]
        int temp = 0;//交换时需要第三个瓶子
        int len = sum.length;
        for(int i = 0; i < len / 2; i++) {//因为是5/2本来取2,不用减1
            temp = sum[len - 1 - i ];//5//
            sum[len - 1 - i] = sum[i];//1
            sum[i] = temp;//5
        }
            System.out.println("===翻转后数组===");
            for(int l = 0; l < sum.length; l++) {
                System.out.print(sum[l] + "\t");
        }
    }
}

         首先,创建一个有n个空间大的数组,因为是输入来读取数字,scanner就出现了(类似于scanf)。

1、利用for循环把每一个输入的数字依次放入数组中

2、创建一个变量,来存放交换的值。第二个for是用来循环交换次数的,数组内是5个数,所以交换2次就可。

3、交换部分(!!):我们知道,len就等于整个数组的长度(长度为5),当做交换的时候,由于下标从0开始,第五个数下标也就是4,所以要把最后一个数的下标改成4(len-1) 。                     
   temp = sum[len - 1 - i ];//len == 5//                               sum[len - 1 - i] = sum[i];//1//

        (1.)i = 0,temp = sum[4],sum[4] = sum[0]

        (2.)i  = 1,temp = sum[3],sum[3] = sum[1]      在中间的则不用动交换

 结果 

二、冒泡排序

public class BubbleSort {
    public static void main(String[] args) {
        //做一个冒泡排序
        int sum[] = {11,23,2,42,90};
        //            0,1,2,3,4
        //大的在后面
        //共四轮排序
        for(int i = 0; i < sum.length - 1; i++) {
            //前面的数>后面的数,就交换
            for(int j = 0; j < sum.length - 1 - i; j++) {
                if(sum[j] > sum[j+1]) {
                    int temp = 0;
                    temp = sum[j+1];
                    sum[j+1] = sum[j];
                    sum[j] = temp;
                }
            }
        }
        for(int i = 0; i < sum.length; i++) {

            System.out.print(" " + sum[i]);
        }
    }
}

第一个for循环中,i 只要小于 sum.length - 1,

第二个for循环中,要两两作比较

        i = 0,比较四次

        i = 1,比较三次

        i = 2,比较两次

        i = 3,比较一次

结果

三、杨辉三角

public class YangHui {
    public static void main(String[] args) {
        /*
        1
        1 1
        1 2 1
        1 3 3 1
        1.第一行有 1 个元素, 第 n 行有 n 个元素
        2. 每一行的第一个元素和最后一个元素都是 1
        3. 从第三行开始, 对于非第一个元素和最后一个元素的元素的值. arr[i][j]
        arr[i][j] = arr[i-1][j] + arr[i-1][j-1]; //必须找到这个规律
         */
        int arr[][] = new int[6][];
        for(int i =0; i < arr.length; i++) {
            //一维数组开辟空间
            arr[i] = new int[i + 1];
            for(int j = 0; j < arr[i].length; j++) {
                if(j == 0 || j == arr[i].length - 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] +" ");
            }
            System.out.println();
        }
    }
}

结果

四、值拷贝与地址拷贝 

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

 //数组赋值 值拷贝与地址拷贝/引用传递
        //值拷贝
        int i = 10;//这种传递类似于c语言中的顺序结构,依次执行每一行代码
        int i1 = i;
        i1 = 12;
        System.out.println("i="+i);
        System.out.println("i1="+i1);
        //地址拷贝/引用传递
        int sum[] = {1,2,3};
        int sums[] = sum;
        sums[0] = 4;
        for(int t = 0; t < sum.length; t++) {
            //数组默认情况下是引用传递,赋的值是地址,方式是引用传递
            //数组是一个地址,sums的变化会影响到sum的值;
            System.out.println("sum="+" "+sum[t]);
        }
    }
}

值拷贝不会影响原变量的值

地址拷贝应该原数组的值

结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值