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


相关文章
|
27天前
|
存储 缓存 安全
除了变量,final还能修饰哪些Java元素
在Java中,final关键字不仅可以修饰变量,还可以用于修饰类、方法和参数。修饰类时,该类不能被继承;修饰方法时,方法不能被重写;修饰参数时,参数在方法体内不能被修改。
25 2
|
2月前
|
存储 Java
深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。
【10月更文挑战第16天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。HashSet基于哈希表实现,添加元素时根据哈希值分布,遍历时顺序不可预测;而TreeSet利用红黑树结构,按自然顺序或自定义顺序存储元素,确保遍历时有序输出。文章还提供了示例代码,帮助读者更好地理解这两种集合类型的使用场景和内部机制。
46 3
|
2月前
|
Java
在Java的世界里,Set只接纳独一无二的元素。
【10月更文挑战第16天】在Java的世界里,Set只接纳独一无二的元素。本文通过拟人化的手法,讲述了重复元素从初次尝试加入Set被拒绝,到经历挣扎、反思,最终通过改变自己,成为独特个体并被Set接纳的全过程。示例代码展示了这一过程的技术实现。
25 1
|
22天前
|
SQL Java 索引
java小工具util系列2:字符串工具
java小工具util系列2:字符串工具
137 83
|
1月前
|
存储 安全 Java
Java零基础-字符串详解
【10月更文挑战第18天】Java零基础教学篇,手把手实践教学!
106 60
|
22天前
|
Java 数据库
java小工具util系列1:日期和字符串转换工具
java小工具util系列1:日期和字符串转换工具
53 26
|
26天前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
44 8
|
1月前
|
Java
那些与Java Set擦肩而过的重复元素,都经历了什么?
在Java的世界里,Set如同一位浪漫而坚定的恋人,只对独一无二的元素情有独钟。重复元素虽屡遭拒绝,但通过反思和成长,最终变得独特,赢得了Set的认可。示例代码展示了这一过程,揭示了成长与独特性的浪漫故事。
20 4
|
1月前
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
48 6
|
1月前
|
存储 Java
判断一个元素是否在 Java 中的 Set 集合中
【10月更文挑战第30天】使用`contains()`方法可以方便快捷地判断一个元素是否在Java中的`Set`集合中,但对于自定义对象,需要注意重写`equals()`方法以确保正确的判断结果,同时根据具体的性能需求选择合适的`Set`实现类。