【java作业2】统计字符串中连续相同最大个数 & 连续相同数组元素

简介: 一、统计字符串中连续相同最大个数问题描述编写方法实现统计一个字符串中连续相同的字符中最长的字符及其长度;然后编写程序测试该方法;

一、统计字符串中连续相同最大个数

问题描述

编写方法实现统计一个字符串中连续相同的字符中最长的字符及其长度;然后编写程序测试该方法;

public static String countMaxContinusChar(String s);返回String,含最长字符一个及该字符长度

测试程序输入样例:

输入:tzannnnnlmbXXXXXXXbm

输出:X7

运行效果

7603ad250c394dd9b719936ae1b89f76.png

代码

import java.util.Scanner;
public class zy2 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        char a = '0';  // 最长字符
        int a_len = 0;  // 最长连续字符的长度
        char b = '0';  // 当前统计的字符
        int b_len = 1;  // 字符长度
        String s = in.next();  // 待统计的字符串
        b = s.charAt(0);
        for (int i = 0; i < s.length(); i++) {
            if (i == 0 || s.charAt(i) == s.charAt(i - 1)) {
                b_len++;
            } else {
                if (b_len > a_len) {
                    a_len = b_len;
                    a = b;
                }
                b_len = 1;
                b = s.charAt(i);
            }
        }
        if (b_len > a_len) {
            a_len = b_len;
            a = b;
        }
        System.out.printf("%c%d", a, a_len);
    }
}

二、连续相同数组元素

问题描述

编写程序:提示输入一个方阵的行数,然后随机的在方阵中填入0或1,打印这个矩阵,然后找出整行或整列或对角线都是0或1的行、列和对角线。(课堂作业)


样列:


输入(矩阵的长度):4


输出:


0111


0000


0100


1111


第2行全为0


第4行全为1


主对角线没有相同数字


副对角线没有相同数字

运行效果

4150951881ac4cba8bc6cb9ef70907f4.png

代码

import java.util.Scanner;
import java.util.Random;
public class zy3 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int x = in.nextInt();  // 矩阵的长度
        Random r = new Random();
        // 1. 生成矩阵
        int[][] a = new int[x][x];
        for (int i = 0; i < x; i++) {
            for (int j = 0; j < x; j++) {
                int t = r.nextInt();
                t = t > 0 ? t : -t;
                a[i][j] = t % 2;
            }
        }
        // 2. 查找行列及对角线
        // 2. a. 按行,及按列查找
        int[] h_ones = new int[x];  // 行中 1 的个数
        int[] l_ones = new int[x];
        for (int i = 0; i < x; i++) {
            for (int j = 0; j < x; j++) {
                h_ones[i] += a[i][j] == 1 ? 1 : 0;  // 行
                l_ones[i] += a[j][i] == 1 ? 1 : 0;  // 列
            }
        }
        // 2. b. 按对角线查找
        int zj_ones = 0;  // 主对角线上 1 的个数
        int fj_ones = 0;
        for (int i = 0; i < x; i++) {
            zj_ones += a[i][1] == 1 ? 1 : 0;        // 主对角线
            fj_ones += a[i][x-1-i] == 1 ? 1 : 0;    // 次对角线
        }
        // 3. 输出生成的随机矩阵
        for (int i = 0; i < x; i++) {
            for (int j = 0; j < x; j++) {
                System.out.printf("%d ", a[i][j]);
            }
            System.out.println();
        }
        // 4. 输出查找结果
        for (int i = 0; i < x; i++) {
            // 4. a. 行
            if (h_ones[i] == x) {
                System.out.printf("第%d行全是1\n", i + 1);
            } else if (h_ones[i] == 0) {
                System.out.printf("第%d行全是0\n", i + 1);
            }
            // 4. b. 列
            if (l_ones[i] == x) {
                System.out.printf("第%d列全是1\n", i + 1);
            } else if (l_ones[i] == 0) {
                System.out.printf("第%d列全是0\n", i + 1);
            }
        }
        // 4. c. 对角线
        System.out.println(zj_ones == x ? "主对角线全是1" : (zj_ones == 0 ? "主对角线全是0" : "主对角线没有相同数字"));
        System.out.println(fj_ones == x ? "副对角线全是1" : (fj_ones == 0 ? "副对角线全是0" : "副对角线没有相同数字"));
    }
}

起初我还每行、列、对角线分别统计了 1 和 0 的出现次数,但后面发现只需统计其中之一就可以了。例如,一行中 1 出现次数与 0 出现次数的和,就是二维数组的“边长”。

三目运算符<条件> ? <值1> : <值2>挺好用的,相比if-else有时更加精简一些。


相关文章
|
3月前
|
SQL JSON Java
告别字符串拼接:用Java文本块优雅处理多行字符串
告别字符串拼接:用Java文本块优雅处理多行字符串
388 108
|
3月前
|
Java
Java基础学习day08-作业
本作业涵盖Java中Lambda表达式的应用,包括Runnable与Comparator接口的简化实现、自定义函数式接口NumberProcessor进行加减乘及最大值操作,以及通过IntProcessor处理整数数组,实现遍历、平方和奇偶判断等功能,强化函数式编程实践。
81 5
|
3月前
|
Java
Java基础学习day07-作业
本作业包含六个Java编程案例:1)动物类继承与多态;2)加油卡支付系统;3)员工管理类设计;4)学生信息统计接口;5)USB设备控制;6)家电智能控制。综合运用抽象类、接口、继承、多态等面向对象技术,强化Java基础编程能力。
183 3
|
3月前
|
Java
Java基础学习day06-作业
本内容为Java基础学习作业,涵盖两个案例:一是通过Card类及其子类GoldenCard、SilverCard实现加油卡系统,体现封装与继承;二是通过Shape类及子类Circle、Rectangle演示多态与方法重写,强化面向对象编程理解。
92 1
|
3月前
|
Java
Java基础学习day05-作业
本文为Java基础学习第五天作业,通过五个案例练习类与对象的定义、构造方法、set/get方法及成员方法的应用。涵盖女友、学生、教师、手机和电影等类的设计与测试,强化面向对象编程基础。
90 2
|
3月前
|
Java
Java基础学习day04-作业
本作业包含8个Java编程案例,涵盖数组的定义与遍历、求和、最值计算、去极值求平均、元素倍增、二维数组行和计算及查找指定元素等内容,旨在巩固Java基础语法与数组操作技能。
248 1
|
3月前
|
Java
Java 数组学习笔记
本文整理Java数组常用操作:遍历、求和、查找、最值及二维数组行求和等典型练习,涵盖静态初始化、元素翻倍、去极值求平均等实例,帮助掌握数组基础与应用。
|
3月前
|
算法 Java
Java基础学习day03-作业
本内容包含多个Java编程案例,涵盖条件判断、循环、数组、随机数生成、素数判断等基础算法练习,适用于巩固Java语法与逻辑思维训练。
141 6
|
3月前
|
Java
Java基础学习day02-作业
本内容包含13个Java编程练习需求,涵盖变量定义、数据类型转换、运算符使用、键盘输入及条件判断等基础语法实践,适合初学者巩固Java核心基础知识。
106 5