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

1.翻转数组

设存在以下数组:
char[][] chunxiao = {
                { '春' , '眠' , '不' , '觉' , '晓' } ,
                { '处' , '处' , '闻' , '啼' , '鸟' } ,
                { '夜' , '来' , '风' , '雨' , '声' } ,
                { '花' , '落' , '知' , '多' , '少' }
        } ;

(1) 将其输出成如下形式:

在这里插入图片描述

package swp.kaifamiao.codes.Java.d0809;

import java.util.Arrays;

/**
 * {class description}
 *
 * @author SWP
 * @version 1.0.0
 */
public class Text01 {
    public static void main(String[] args) {
        //初始化一个二维数组
        char[][] chunxiao = {
                { '春' , '眠' , '不' , '觉' , '晓' } ,
                { '处' , '处' , '闻' , '啼' , '鸟' } ,
                { '夜' , '来' , '风' , '雨' , '声' } ,
                { '花' , '落' , '知' , '多' , '少' }
        } ;
        //定义一个字符串用来存放遍历后的值
        String output = "";
        //两个for循环遍历输出二维数组所有的值,
        for (int i = 0; i < chunxiao.length; i++){
            for (int j = 0; j < chunxiao[i].length; j++){
                output += chunxiao[i][j];
            }
            //每循环完一轮j,进行换行,然后进入下一个i的循环
            output += "\n";
        }
        //输出遍历后的字符串
        System.out.println(output);
    }
}

在这里插入图片描述

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

在这里插入图片描述

package swp.kaifamiao.codes.Java.d0809;

/**
 * {class description}
 *
 * @author SWP
 * @version 1.0.0
 */
public class Text02 {
    public static void main(String[] args) {
        //初始化一个二维数组
        char[][] chunxiao = {
                { '春' , '眠' , '不' , '觉' , '晓' } ,
                { '处' , '处' , '闻' , '啼' , '鸟' } ,
                { '夜' , '来' , '风' , '雨' , '声' } ,
                { '花' , '落' , '知' , '多' , '少' }
        } ;
        //定义一个字符串用来存放遍历后的值
        String output = "";
        for (int i = 0; i <= chunxiao.length; i++){
            for (int j = chunxiao.length-1; j >= 0; j--){
                output += chunxiao[j][i];
            }
            //每循环完一轮j,进行换行,然后进入下一个i的循环
            output += "\n";
        }
        System.out.println(output);
    }
}

在这里插入图片描述

思考:如果是一首词该如何旋转输出?

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

package swp.kaifamiao.codes.Java.d0809;

/**
 * {class description}
 *
 * @author SWP
 * @version 1.0.0
 */
public class Demo01 {
    public static void main(String[] args) {
        char[][] poem = {
                {'十', '年', '生', '死', '两', '茫', '茫', '\u002C', '不', '思', '量', '\u002C', '自', '难', '忘'},
                {'千', '里', '孤', '坟', '\u002C', '无', '处', '话', '凄', '凉', '\u3002'},
                {'纵', '使', '相', '逢', '应', '不', '识', '\u002C', '尘', '满', '面', '\u002C', '鬓', '如', '霜'},
                {'夜', '来', '幽', '梦', '忽', '还', '乡', '\u002C', '小', '轩', '窗', '\u002C', '正', '梳', '妆'},
                {'相', '顾', '无', '言', ',', '惟', '有', '泪', '千', '行', '\u3002'},
                {'料', '得', '年', '年', '肠', '断', '处', '\u002C', '明', '月', '夜', '\u002C', '短', '松', '冈'}
        };
        //定义一个poem的最长的句子的长度为max,假定为poem[0]的长度
        int max = poem[0].length;
        //遍历出最长的句子的长度为max
        for (int i = 1; i < poem.length; i++){
            if (poem[i].length > max){
                max = poem[i].length;
            }
        }

        //外层循环的长度要小于等于最长句子的长度max
        for (int j = 0; j < max; j++){
            for (int i = poem.length - 1; i >= 0; i--) {
                //
                if ( j >= poem[i].length){
                    //填充空格、输出空格
                    System.out.print(" " + "\t");
                }else {
                    System.out.print(poem[i][j] + "\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();
}

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

package swp.kaifamiao.codes.Java.d0809;

import java.util.Arrays;

/**
 * {class description}
 *
 * @author SWP
 * @version 1.0.0
 */
public class Text03 {
    public static void main(String[] args) {
        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));
        }
    }
}

在这里插入图片描述

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

package swp.kaifamiao.codes.Java.d0809;

import com.sun.tools.javac.Main;

import java.util.Arrays;

/**
 * {class description}
 *
 * @author SWP
 * @version 1.0.0
 */
public class Text04 {
    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[] sumscores = new int[scores.length];

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

        //对总分数数组进行排序(冒泡)
        //外循环
        for (int i = 0; i < sumscores.length - 1; i++){
            //内循环
            for (int j = 0; j <sumscores.length -1 - i; j++){
                if (sumscores[j] < sumscores[j+1]){
                    //换总分的排名(倒序)
                    int temp = sumscores[j];
                    sumscores[j] = sumscores[j+1];
                    sumscores[j+1] = temp;
                    // 换各科的排名(倒序)
                    int[] tempScore = scores[j];
                    scores[j] = scores[j + 1];
                    scores[j + 1] = tempScore;
                    //换名字
                    String tempName = names[j];
                    names[j] = names[j + 1];
                    names[j + 1] = tempName;
                }
            }
        }

        System.out.println(Arrays.toString(sumscores));

        // 遍历输出
        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();
        }
    }
}

在这里插入图片描述


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

package swp.kaifamiao.codes.Java.d0809;

/**
 * {class description}
 *
 * @author SWP
 * @version 1.0.0
 */
/*
        杨辉三角
           1          0
           1 1        1
           1 2 1      2
           1 3 3 1
           1 4 6 4 1
           1 5 10 10 5 1

           1. 每行元素个数是 下标 + 1
           2. 每行第一个和最后一个是 1, 其余元素的值为其上一行的元素 + 上一行元素的前一个元素
         */
import java.util.Arrays;
import java.util.Scanner;

public class Text05 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入n:");
        int n = input.nextInt();

        int[][] nums = new int[n][];

        for (int i = 0; i < nums.length; i++) {
            nums[i] = new int[i + 1];
            // 每一个元素都是 1
            Arrays.fill(nums[i], 1);
            // j = 1 每行的第一个元素跳过, j < nums[i].length - 1 跳过最后一个  i > 1 跳过前两行
            for (int j = 1; i > 1 && j < nums[i].length - 1; j++) {
                nums[i][j] = nums[i - 1][j] + nums[i - 1][j - 1];
            }
        }


        for (int i = 0; i < nums.length; i++) {
            System.out.println(Arrays.toString(nums[i]));
        }
    }

}

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值