Java基础练习七(二维数组)

编程入门 行业动态 更新时间:2024-10-12 12:29:45

Java基础练习七(二维<a href=https://www.elefans.com/category/jswz/34/1771288.html style=数组)"/>

Java基础练习七(二维数组)

1. 翻转数组

设存在以下数组,请正常方法输出:

char[][] chunxiao = {{ '春' , '眠' , '不' , '觉' , '晓' } ,{ '处' , '处' , '闻' , '啼' , '鸟' } ,{ '夜' , '来' , '风' , '雨' , '声' } ,{ '花' , '落' , '知' , '多' , '少' }
};
public class Work0901 {public static void main(String[] args) {char[][] chunxiao = {{ '春' , '眠' , '不' , '觉' , '晓' } ,{ '处' , '处' , '闻' , '啼' , '鸟' } ,{ '夜' , '来' , '风' , '雨' , '声' } ,{ '花' , '落' , '知' , '多' , '少' }};for (int i = 0; i < chunxiao.length; i++) {for (int j = 0; j < chunxiao[i].length; j++) {System.out.printf(String.valueOf(chunxiao[i][j]) + '\t');}System.out.println();}}
}

尝试设计一组循环语句,将以上形式的输出结果翻转为以下形式(旋转 90 度)

public class Work0901 {public static void main(String[] args) {char[][] chunxiao = {{ '春' , '眠' , '不' , '觉' , '晓' } ,{ '处' , '处' , '闻' , '啼' , '鸟' } ,{ '夜' , '来' , '风' , '雨' , '声' } ,{ '花' , '落' , '知' , '多' , '少' }};for (int i = 0; i < chunxiao[0].length; i++) {for (int j = chunxiao.length - 1; j >= 0; j--) {System.out.printf(String.valueOf(chunxiao[j][i]) + '\t');}System.out.println();}}
}

思考: 如果是一首词该如何旋转输出:
十年生死两茫茫,不思量,自难忘。
千里孤坟,无处话凄凉。
纵使相逢应不识,尘满面,鬓如霜。
夜来幽梦忽还乡,小轩窗,正梳妆。
相顾无言,惟有泪千行。
料得年年肠断处,明月夜,短松冈。

public class Work090103 {public static void main(String[] args) {char[][] poetry = {{'十', '年', '生', '死', '两', '茫', '茫', ',', '不', '思', '量', ',', '自', '难', '忘', '。'},{'千', '里', '孤', '坟', ',', '无', '处', '话', '凄', '凉', '。'},{'纵', '使', '相', '逢', '应', '不', '识', ',', '尘', '满', '面', ',', '鬓', '如', '霜', '。'},{'夜', '来', '幽', '梦', '忽', '还', '乡', ',', '小', '轩', '窗', ',', '正', '梳', '妆', '。'},{'相', '顾', '无', '言', ',', '惟', '有', '泪', '千', '行', '。'},{'料', '得', '年', '年', '肠', '断', '处', ',', '明', '月', '夜', ',', '短', '松', '冈', '。'}};// 获取最长的一句词String longestPoetry = Arrays.stream(poetry)  // 将字符数组转换为流.map(String::new)  // 将字符数组转换为字符串.max((s1, s2) -> s1.length() - s2.length())  // 比较字符串长度.orElse("");  // 如果数组为空,则返回空字符串System.out.println("最长的句子是:" + longestPoetry.length());char[][] newPoeter = new char[poetry.length][longestPoetry.length()];for (int i = 0; i < poetry.length; i++) {System.arraycopy(poetry[i],0,newPoeter[i],0,poetry[i].length);if (poetry[i].length < newPoeter[i].length) {Arrays.fill(newPoeter[i], poetry[i].length, newPoeter[i].length, ' ');}}
//        for (char[] i: newPoeter) {
//            System.out.println(Arrays.toString(i));
//        }for (int i = 0; i < newPoeter[0].length; i++) {for (int j = newPoeter.length - 1; j >= 0; j--) {System.out.printf(String.valueOf(newPoeter[j][i]) + '\t');}System.out.println();}}
}

2. 数组排序

设存在以下数组:

// 设 names 数组中存放学生姓名
String[] names = { "安琪拉" , "王昭君" , "蔡文姬" , "妲己" , "张良" };// 设 courses 数组中依次存放三门课程的名称
String[] courses = { "C++" , "Java" , "Python" };
// 设 scores 数组中依次存储的是 names 数组中各个学生的 C++ 、Java 、Python 课程的成绩
int[][] scores = {{ 90 , 89 , 75 } ,{ 59 , 40 , 100 } ,{ 100 , 99 , 80 } ,{ 80 , 61 , 61 } ,{ 60 , 100 , 99 } 
};

采用以下程序可以输出每个学生的姓名以及该学生各门课程的成绩:

for( int i = 0 ; i < scores.length ; i++ ){System.out.print( names[ i ] + " => " ); // 输出学生姓名for( int j = 0 ; j < scores[ i ] .length ; j++ ){System.out.print( courses[ j ] + ":");// 输出课程名称System.out.print( scores[ i ][ j ] ); // 输出课程成绩if( j < scores[ i ] .length - 1 ) {System.out.print( " , " );}}System.out.println();
}

设计程序按照各个学生的 Java 成绩进行排序 ( 降序 )

ublic class Work090201 {public static void main(String[] args) {// 设 names 数组中存放学生姓名String[] names = { "安琪拉" , "王昭君" , "蔡文姬" , "妲己" , "张良" };// 设 courses 数组中依次存放三门课程的名称String[] courses = { "C++" , "Java" , "Python" };// 设 scores 数组中依次存储的是 names 数组中各个学生的 C++ 、Java 、Python 课程的成绩int[][] scores = {{ 90 , 89 , 75 } ,{ 59 , 40 , 100 } ,{ 100 , 99 , 80 } ,{ 80 , 61 , 61 } ,{ 60 , 100 , 99 }};// 选择排序,按照Java成绩for (int i = 0; i < scores.length - 1; i++) {int max = i;for (int j = i + 1; j < scores.length; j++) {if (scores[j][1] > scores[max][1]) {max = j;}}int[] temp = scores[i];scores[i] = scores[max];scores[max] = temp;}for (int[] i: scores) {System.out.println(Arrays.toString(i));}}
}

设计程序,根据学生总成绩进行排序(降序排列),并输出学生姓名、每门课程的名称和该学生的成绩、该学生的总成绩

public class Work090202 {public static void main(String[] args) {// 设 names 数组中存放学生姓名String[] names = { "安琪拉" , "王昭君" , "蔡文姬" , "妲己" , "张良" };// 设 courses 数组中依次存放三门课程的名称String[] courses = { "C++" , "Java" , "Python" };// 设 scores 数组中依次存储的是 names 数组中各个学生的 C++ 、Java 、Python 课程的成绩int[][] scores = {{ 90 , 89 , 75 } ,{ 59 , 40 , 100 } ,{ 100 , 99 , 80 } ,{ 80 , 61 , 61 } ,{ 60 , 100 , 99 }};int[][] sum = new int[scores.length][2];for (int i = 0; i < scores.length; i++){sum[i][0] = Arrays.stream(scores[i]).sum();sum[i][1] = i;}// 插入排序,按照总成绩for (int i = 1; i < sum.length; i++) {int index = i - 1;int[] num = sum[i];while (index >= 0 && sum[index][0] < num[0]) {sum[index + 1] = sum[index];index--;}sum[index+1] = num;}for (int[] i: sum) {System.out.println(names[i[1]]+'\t' + courses[0]+scores[i[1]][0] +'\t'+ courses[1]+scores[i[1]][1] +'\t'+ courses[2]+scores[i[1]][2] +'\t'+ i[0]);}}
}

3. 杨辉三角

编写一个程序,生成一个给定行数的杨辉三角

import java.util.Arrays;
import java.util.Scanner;public class Work0903 {public static void main(String[] args) {Scanner input = new Scanner(System.in);int n = input.nextInt();int[][] triangle = new int[n][];for (int i = 0; i < n; i++) {if (i == 0) {triangle[i] = new int[]{1};} else if (i == 1) {triangle[i] = new int[]{1, 1};} else {triangle[i] = new int[i + 1];for (int j = 1; j < i; j++) {triangle[i][j] = triangle[i - 1][j - 1] + triangle[i - 1][j];}triangle[i][0] = 1;triangle[i][i] = 1;}}for (int[] i:triangle) {System.out.println(Arrays.toString(i));}}
}

4. 复制数组【拓展】

有如下数组 nums ,请通过删除掉其中的 33 ,得到一个新的数组 newNums

int[] nums = {2, 11, 33, 44, 55, 66, 277}
//newNums = {2, 11, 44,55, 66, 277}
  • for 循环
public class Work0904 {public static void main(String[] args) {// 有如下数组 nums ,请通过删除掉其中的 33 ,得到一个新的数组 newNumsint[] nums = {2, 11, 33, 44, 55, 66, 277};int[] newNums = new int[nums.length - 1];int count = 0;for (int i = 0; i < nums.length; i++) {if (nums[i] != 33) {newNums[count] = nums[i];count++;}}System.out.println(Arrays.toString(newNums));}
}
  • System 类中的 arraycopy 方法实现
public class Work0904 {public static void main(String[] args) {// 有如下数组 nums ,请通过删除掉其中的 33 ,得到一个新的数组 newNumsint[] nums = {2, 11, 33, 44, 55, 66, 277};int[] newNums2 = new int[nums.length - 1];System.arraycopy(nums,0,newNums2,0,2);System.arraycopy(nums,3,newNums2,2,4);System.out.println(Arrays.toString(newNums2));}
}

System.arraycopy()方法接受五个参数:

  • 源数组:要复制的数组。
  • 源数组起始位置:要复制的起始索引。
  • 目标数组:要将元素复制到的数组。
  • 目标数组起始位置:要复制到的起始索引。
  • 要复制的元素个数:要复制的元素数量。

更多推荐

Java基础练习七(二维数组)

本文发布于:2024-03-15 00:02:41,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1737657.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数组   基础   Java

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!