多维数组案例及作业

案例:

 多维数组的定义和赋值

// 存储 3 个班各 5 名同学成绩
// 前面是一维数组的容量/长度
// 后面是二维数组的容量/长度
// double[][] scores = new double[3][5];

// 二维数组的长度可以不定义
double[][] scores = new double[3][];
socres[0] = new double[2];
socres[1] = new double[3];
socres[2] = new double[4];

// 给第1个班的第一名同学赋值
scores[0][0] = 20;

// 一维数组三种定义方式
int[] arr = new int[5];
int[] arr = {10, 20, 30, 40, 50};
int[] arr = new int[]{10, 20, 30, 40, 50};

// 二维数组三种定义方式
int[][] arr = new int[3][5];
int[][] arr = {{1, 2, 3},{1, 2, 3, 4, 5},{10, 20, 30, 40}};
int[][] arr = new int[][]{{1, 2, 3},{1, 2, 3, 4},{1, 2, 4, 7, 8, 9}};

多维数组的赋值

double[][] scores = new double[3][5];

scores[0][0] = 90;
scores[0][1] = 80;
scores[0][2] = 70;
scores[0][3] = 60;
scores[0][4] = 50;

scores[1][0] = 90;
scores[1][1] = 190;
scores[1][2] = 290;
scores[1][3] = 390;
scores[1][4] = 490;

scores[2][0] = 10;
scores[2][1] = 20;
scores[2][2] = 30;
scores[2][3] = 40;
scores[2][4] = 50;

 循环录入赋值

double[][] scores = new double[3][5];

for (int i = 0; i < scores.length; i++) {
    for (int j = 0; j < scores[i].length; j++) {
        scores[i][j] = input.nextDouble();
    }
}

计算三个班的总成绩和每个班的总成绩

int total = 0;
double[][] scores = new double[3][5];

for (int i = 0; i < scores.length; i++) {
    int sum = 0;
    for (int j = 0; j < scores[i].length; j++) {
        sum += scores[i][j];
    }
    total += sum;
    System.out.printf("第%d个班的总成绩为:%.1f", i+1, sum);
}

System.out.println("三个班的总成绩是:" + total);

冒泡排序

int[] arr = {9, 7, 8, 6, 2};
for (int i = 0; i < arr.length - 1; i++) {
    for (int j = 0; j < arr.length - i - 1; j++) {
        if (arr[j] > arr[j+1]) {
            int temp = arr[j] + arr[j+1];
            arr[j] = temp - arr[j];
            arr[j+1] = temp - arr[j+1];
        }
    }
}

System.out.println("排序后的结果为:" + Arrays.toString(arr));

// 升序排序判断时用 >
// 降序排序判断时用 <

// 挨着的两个元素值去比较,如果后边的比前边的小,交换位置,这是升序。
// 挨着的连个元素值去比较,如果后边的比前边的大,交换位置,这是降序。

选择排序

int[] arr = {9, 7, 8, 6, 2, 10};

for (int i = 0; i < arr.length - 1; i++) {
    for (int j = i + 1; j < arr.length; j++) {
        if (arr[j] < arr[i]) {
            int temp = arr[j];
            arr[j] = arr[i];
            arr[i] = temp;
        }
    }
}

System.out.println("排序后的数组为:" + Arrays,toString(arr));

// 类似于打擂法
// 如果后面的比前一个小,交换位置,这是升序。
// 如果后边的比前一个大,交换位置,这是降序。

 插入排序

int[] arr = {9, 7, 8, 6, 2, 10};

for (int i = 1; i < arr.length; i++) {
    for (int j = i; j > 0; j--) {
        if (arr[j] < arr[j-1]) {
            int temp = arr[j];
            arr[j] = arr[j-1];
            arr[j-1] = temp;
        }
    }
}

System.out.println("排序好的数组为:" + Arrays.toString(arr));

// 相当于小时候站队,一堆人一个一个的过来站队,然后从第二个开始过来的人就跟前面站好对的最后一个人
// 一个一个的去比较,如果比前一个小,那么就交换位置,升序依次类推。
// 相当于小时候站队,一堆人一个一个的过来站队,然后从第二个开始过来的人就跟前面站好对的最后一个人
// 一个一个的去比较,如果比前一个大,那么就交换位置,降序依次类推。

向一个数组中插入一个新的元素值

降序
int[] old = {99, 85, 82, 63, 60};

Scanner input = new Scanner(System.in);
System.out.print("请输入一个整数:");
int num = inout.nextInt();

int[] new = Arrays.copyOf(old,old.length + 1);

int index = new.length - 1;
for (int i = 0; i < new.length; i++) {
    if (num > new[i]) {
        index = i;
        break;
    }
}

for (int i = new.length - 1; i > index; i--) {
    new[i] = new[i-1];
}

new[index] = num;

System.out.println("插入完新成绩的数列为:" + Arrays.toString(new));

储存问题: 

// 放到虚拟机栈(简称栈:stack)  方法压栈   先进后出

int score = 10;

// 数据(元素值)放到堆(heap)里边       

// int[] arr 放在栈里(存的是地址值(哈希值))

// new int[5] 放在堆里

int[] scores = new int[5];

// 拿着栈里 scores 的地址去找堆中他相对应的位置,然后赋值

scores[0] = 90;

引用数据类型把地址存在栈里(没有直接存放数据,存放的是地址)

基本数据类型把变量直接存在栈里

--------------------------------------------------------------------------------------------------------------------------------

作业: 

作业1:

一个公司三个小组,求每个组的总金额及公司的总金额。

int[][] money = {{11, 12},{21, 22, 23},{31, 32, 33, 34}};
int total = 0;
for (int i = 0; i < money.length; i++) {
    int sum = 0;
    for (int j = 0; j < money[i].length; j++) {
        sum += money[i][j];
    }
    total += sum;
    System.out.printf("第%d个小组的总金额:%d\n", i+1, sum);
}

System.out.printf("公司总金额为:%d", total);

作业2:

求数组中元素值第二大的元素。

Scanner input = new Scanner(System.in);
int[] arr = new int[5];
for (int i = 0; i < arr.length; i++) {
    System.out.printf("这是第%d个数字:", i+1);
    arr[i] = input.nextInt();
}

// 冒泡排序
for (int i = 1; i < arr.length - 1; i++) {
    for (int j = 0; j < arr.length - i -1; j++) {
        if (arr[j] > arr[j+1]) {
            int temp = arr[j];
            arr[j] = arr[j+1];
            arr[j+1] = temp;
        }
    }
}

System.out.printf("数组 arr 中元素值第二大的元素是:%d", arr[arr.length - 2]);

作业3:

1-100以内,十位数上是奇数的元素值加起来。

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

int sum = 0;
for (int j = 0; j < arr.length; j++) {
    if (arr[j] > 9 && arr[j] / 10 % 2 != 0) {
        sum += arr[j];
    }
}

System.out.println("所有十位数值为奇数的元素相加的和为" + sum);

作业4:

向一个数组中插入一个元素,并保持降序排列。

Scanner input = new Scanner(System.in);
int[] old = {99, 85, 82, 63, 60};
int[] new = Arrays.copyOf(old.old.length + 1);

int index = new.length - 1;
System.out.println("请输入一个整数:");
int num = input.nextInt();

for (int i = 0; i < new.length; i++) {
    if (num > new[i]) {
        index = i;
        break;
    }
}

for (int i = new.length - 1; i > index; i--) {
    new[i] = new[i-1];
}

new[index] = num;
System.out.println(Arrays.toString(new));

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值