【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有时更加精简一些。


相关文章
|
24天前
|
存储 Java
深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。
【10月更文挑战第16天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。HashSet基于哈希表实现,添加元素时根据哈希值分布,遍历时顺序不可预测;而TreeSet利用红黑树结构,按自然顺序或自定义顺序存储元素,确保遍历时有序输出。文章还提供了示例代码,帮助读者更好地理解这两种集合类型的使用场景和内部机制。
34 3
|
24天前
|
Java
在Java的世界里,Set只接纳独一无二的元素。
【10月更文挑战第16天】在Java的世界里,Set只接纳独一无二的元素。本文通过拟人化的手法,讲述了重复元素从初次尝试加入Set被拒绝,到经历挣扎、反思,最终通过改变自己,成为独特个体并被Set接纳的全过程。示例代码展示了这一过程的技术实现。
24 1
|
16天前
|
存储 安全 Java
Java零基础-字符串详解
【10月更文挑战第18天】Java零基础教学篇,手把手实践教学!
91 60
|
2天前
|
Java
那些与Java Set擦肩而过的重复元素,都经历了什么?
在Java的世界里,Set如同一位浪漫而坚定的恋人,只对独一无二的元素情有独钟。重复元素虽屡遭拒绝,但通过反思和成长,最终变得独特,赢得了Set的认可。示例代码展示了这一过程,揭示了成长与独特性的浪漫故事。
10 4
|
6天前
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
21 6
|
9天前
|
存储 Java
判断一个元素是否在 Java 中的 Set 集合中
【10月更文挑战第30天】使用`contains()`方法可以方便快捷地判断一个元素是否在Java中的`Set`集合中,但对于自定义对象,需要注意重写`equals()`方法以确保正确的判断结果,同时根据具体的性能需求选择合适的`Set`实现类。
|
7天前
|
存储 算法 Java
为什么Java Set如此“挑剔”,连重复元素都容不下?
在Java的集合框架中,Set是一个独特的接口,它严格要求元素不重复,适用于需要唯一性约束的场景。Set通过内部数据结构(如哈希表或红黑树)和算法(如哈希值和equals()方法)实现这一特性,自动过滤重复元素,简化处理逻辑。示例代码展示了Set如何自动忽略重复元素。
16 1
|
21天前
|
存储 缓存 算法
Java 数组
【10月更文挑战第19天】Java 数组是一种非常实用的数据结构,它为我们提供了一种简单而有效的方式来存储和管理数据。通过合理地使用数组,我们能够提高程序的运行效率和代码的可读性。更加深入地了解和掌握 Java 数组的特性和应用,为我们的编程之旅增添更多的精彩。
31 4
|
21天前
|
存储 缓存 算法
提高 Java 数组性能的方法
【10月更文挑战第19天】深入探讨了提高 Java 数组性能的多种方法。通过合理运用这些策略,我们可以在处理数组时获得更好的性能表现,提升程序的运行效率。
19 2
|
1月前
|
Java 数据库
案例一:去掉数据库某列中的所有英文,利用java正则表达式去做,核心:去掉字符串中的英文
这篇文章介绍了如何使用Java正则表达式从数据库某列中去除所有英文字符。
42 15