#定义一个长度为[16][16]的整型二维数组并输入或指定所有位置的元素值,分别实现二维数组中所有行和所有列中所有元素的累加和并打印。
二、代码实现
代码如下(示例):
package com.lagu.homwork2;
import com.lagou.task10.StaticOuter;
import java.util.Random;
import java.util.Scanner;//借用扫描器
/**
* 定义一个长度为[16][16]的整型二维数组并输入或指定所有位置的元素值,分别实现二维数组中所有行和所有列中所有元素的累加和并打印。
* 再分别实现二维数组中左上角到右下角和右上角到左下角所有元素的累加和并打印(对角线上的元素)。
*/
public class PrintArrayArrayTest {
public static void main(String[] args) {
//1. 先定义一个扫描器
Scanner sc = new Scanner(System.in);
//2.定义一个int型的二维数组
System.out.print("请输入数组的行数:");
int row = sc.nextInt();
System.out.print("请输入数组的列数:");
int column = sc.nextInt();
int[][] arr = new int[row][column];
//2.2 根据需求判断选择那是输入方式
while(true){
System.out.println("请选择“手动输入”还是“自动生成”一个整型二维数组: ");
String str = sc.next();
if ("手动输入".equals(str)) {
//2.3输入二维数组的值
for (int i = 0; i < arr.length; i++) {
System.out.println("请输入第" + (i + 1) + "行的" + arr[i].length + "个元素");
for (int j = 0; j < arr[i].length; j++) {
arr[i][j] = sc.nextInt(); //读取arr[i][j]的值
}
}
break; //退出循环
} else if ("自动生成".equals(str)) {
//2.4电脑随机产生二维数组
Random ra = new Random();
for(int i = 0; i < arr.length; i++){
for(int j = 0 ; j < arr[i].length; j++){
arr[i][j]= ra.nextInt(10); //a[i][j] 取 0 ~ 9之间的随机值
}
}
break;
} else {
System.out.println("输入有误!"); //输入判断,有误继续循环提示输入
}
}
//3 打印输入的二维数组
System.out.println("初始数组为:");
for(int i = 0; i < arr.length; i++){
for(int j = 0 ; j < arr[i].length; j++){
System.out.print(arr[i][j]+ " "); //打印a[i][j]
}
System.out.println("");//换行
}
System.out.println("------------------------------------------------");
//3.实现所有行的相加并打印
System.out.println("行相加:");
//3.1 定义一个int型的一维数组[16]来存放个行之和
int[] sum1 = new int[row];
//3.2 打印每行元素相加
for(int i = 0; i < arr.length; i++){
System.out.print("第" + (i+1) + "行之和:");
for(int j = 0 ; j < arr[i].length; j++){
if(j< arr[i].length - 1) {
System.out.print(arr[i][j] + " + ");
}else{
System.out.print(arr[i][j]);
}
sum1[i] += arr[i][j];
}
System.out.println(" = " + sum1[i]);
}
System.out.println("------------------------------------------------");
//4.实现所有列的相加并打印
//4.1 将数组arr[i][j] 转换换成数组arr1[j][i]
int[][] arr1 = new int[column][row]; //新定义一个数组是为了代码的可扩展性 比如:3行4列也可以实现所有列中所有元素的累加和并打印
//4.2 定义一个int型的一维数组[16]来存放每个"列"(行)之和
int[] sum2 = new int[column];
System.out.println("列相加:");
for(int i = 0; i < arr1.length; i++){
System.out.print("第" + (i+1) + "行之和:");
for(int j = 0 ; j < arr1[i].length; j++){
arr1[i][j] = arr[j][i]; //将每列的值赋值给每行
if(j< arr1[i].length - 1) {
System.out.print(arr1[i][j] + " + ");
}else{
System.out.print(arr1[i][j]);
}
sum2[i] += arr1[i][j];
}
System.out.println(" = " + sum2[i]);
}
System.out.println("------------------------------------------------");
//5. 实现左上角到右下角对角线上的元素累加并打印
System.out.println("打印左上角到右下角对角线上的元素:");
int sum3 = 0; //定义sum3来记录打印左上角到右下角对角线上的元素之和
for(int i = 0; i < arr.length; i++){
for(int j = 0 ; j < arr[i].length; j++){
if(i == j){
sum3 += arr[i][j];
System.out.print(arr[i][j]); //如果是对角线上的元素则显示
}else {
System.out.print(" "); //如果不是对角线上的元素则打印空格
}
}
System.out.println(""); //换行
}
System.out.println("左上角到右下角对角线上的元素之和 = " + sum3);
System.out.println("------------------------------------------------");
//5. 实现右上角到左下角对角线上的元素累加并打印
System.out.println("右上角到左下角对角线上的元素: ");
int sum4 = 0; //定义sum4来记录打印右上角到左下角对角线上的元素之和
for(int i = 0; i < arr.length; i++){
for(int j = 0 ; j < arr[i].length; j++){
if(arr.length == (i + j)){ //右上角到左下角对角线上的元素特征是arr.length == (i + j)
sum4 += arr[i][j];
System.out.print(arr[i][j]);//如果是则打印出来
}else {
System.out.print(" ");//否则打印空格
}
}
System.out.println(""); //换行
}
System.out.println("右上角到左下角对角线上的元素之和 = " + sum4);
}
}
2.代码实现
代码如下(示例):
请输入数组的行数:7
请输入数组的列数:8
请选择“手动输入”还是“自动生成”一个整型二维数组:
自动生成
初始数组为:
8 1 2 2 0 6 6 3
5 9 6 4 8 0 0 4
3 8 5 9 4 0 5 5
7 4 2 8 8 9 1 7
3 9 6 3 3 5 8 4
8 5 9 9 0 9 3 7
3 1 0 6 5 7 3 0
------------------------------------------------
行相加:
第1行之和:8 + 1 + 2 + 2 + 0 + 6 + 6 + 3 = 28
第2行之和:5 + 9 + 6 + 4 + 8 + 0 + 0 + 4 = 36
第3行之和:3 + 8 + 5 + 9 + 4 + 0 + 5 + 5 = 39
第4行之和:7 + 4 + 2 + 8 + 8 + 9 + 1 + 7 = 46
第5行之和:3 + 9 + 6 + 3 + 3 + 5 + 8 + 4 = 41
第6行之和:8 + 5 + 9 + 9 + 0 + 9 + 3 + 7 = 50
第7行之和:3 + 1 + 0 + 6 + 5 + 7 + 3 + 0 = 25
------------------------------------------------
列相加:
第1行之和:8 + 5 + 3 + 7 + 3 + 8 + 3 = 37
第2行之和:1 + 9 + 8 + 4 + 9 + 5 + 1 = 37
第3行之和:2 + 6 + 5 + 2 + 6 + 9 + 0 = 30
第4行之和:2 + 4 + 9 + 8 + 3 + 9 + 6 = 41
第5行之和:0 + 8 + 4 + 8 + 3 + 0 + 5 = 28
第6行之和:6 + 0 + 0 + 9 + 5 + 9 + 7 = 36
第7行之和:6 + 0 + 5 + 1 + 8 + 3 + 3 = 26
第8行之和:3 + 4 + 5 + 7 + 4 + 7 + 0 = 30
------------------------------------------------
打印左上角到右下角对角线上的元素:
8
9
5
8
3
9
3
左上角到右下角对角线上的元素之和 = 45
------------------------------------------------
右上角到左下角对角线上的元素:
3
0
0
8
3
9
1
右上角到左下角对角线上的元素之和 = 24