首页 > 其他分享 >九宫格按键输入

九宫格按键输入

时间:2024-04-02 16:01:14浏览次数:27  
标签:map ArrayList 九宫格 模式 add split 按键 new 输入

华为OD算法题记录

前言

一、题目描述

九宫格按键输入,输出显示内容,有英文和数字两个模式,默认是数字模式,数字模式直接输出数字,英文模式连续按同一个按键会依次出现这个按键上的字母,如果输入" "或者其他字符,则循环中断。
在这里插入图片描述

二、输入描述:

输入范围为数字0~9和字符#、/,输出屏幕显示,例如在数字模式下,输入1234,显示1234;在英文模式下,输入1234,显示,adg。

三、输出描述:

#用于切换模式,默认是数字模式,执行#后切换为英文模式, /表示延迟,例如在英文模式下,输入22/222,显示为bc;

四、java代码

private static Map<String, List<String>> map = new HashMap<>();
static {
    List list1 = new ArrayList();    
    list1.add(",");    
    list1.add(".");    
    list1.add("?");    
    list1.add("!");    
    map.put("1", list1);    
    List list2 = new ArrayList();    
    list2.add("a");    
    list2.add("b");   
    list2.add("c");    
    map.put("2", list2);    
    List list3 = new ArrayList();    
    list3.add("d");    
    list3.add("e");    
    list3.add("f");    
    map.put("3", list3);    
    List list4 = new ArrayList();    
    list4.add("g");    
    list4.add("h");    
    list4.add("i");    
    map.put("4", list4);    
    List list5 = new ArrayList();    
    list5.add("j");    
    list5.add("k");    
    list5.add("l");    
    map.put("5", list5);    
    List list6 = new ArrayList();    
    list6.add("m");    
    list6.add("n");    
    list6.add("o");    
    map.put("6", list6);    
    List list7 = new ArrayList();    
    list7.add("p");    
    list7.add("q");    
    list7.add("r");    
    list7.add("s");    
    map.put("7", list7);    
    List list8 = new ArrayList();    
    list8.add("t");    
    list8.add("u");    
    list8.add("v");    
    map.put("8", list8);    
    List list9 = new ArrayList();    
    list9.add("w");    
    list9.add("x");    
    list9.add("y");    
    list9.add("z");    
    map.put("9", list9);
}
/** 
* 1.默认是数字模式 遇到#则会切换为另一种模式 
* 2.同一个按键连续按会一次出现按键上的字母 如果遇到空格或其他字符则循环中断 
* 3. /表示延迟 
* 
* @autor xiaomage编程 
*/
public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);    
    //获取九宫格按键字符串    
    String line = sc.nextLine();    
    String[] split = line.split("");   
    //定义输入模式,false代表数字模式    
    boolean flag = false;    
    StringBuilder builder = new StringBuilder();    
    //定义正常的字符串    
    String sz = "123456789";    
    for (int i=0; i< split.length; i++) {
     String s = split[i];  
        if (flag) {
            //英文模式                      
            if (!split[i].equals("#") && !split[i].equals("/")) {
                //如果遇到空格或者其他字符,则中断循坏,直接输出当前结果                
                if (!sz.contains(s)) {
                    break;                
                }
                //获取下一个元素的下标                
                int j = i+1;                
                //初始化元素重复的个数,从0开始,因为九宫格数字对应的字母集合下标是从0开始                
                int m =0;                
                while (j<split.length && s.equals(split[j])) {
                    j++;                    
                    m++;                
                }
                //定义当前按键对应字母的下标
                int index;                
                //1,7,9键位对应的字母个数为4个,其余为三个                
                if("179".contains(s)){
                    index = m%4;               
                } else {
                    index = m%3;                
                }
                builder.append(map.get(s).get(index));                
                //跳过已经遍历过的字母                
                i = j - 1;            
            }
            //"如果在英文模式下当前字符为'#' 则切换为数字模式"            
           if (split[i].equals("#")) {
                 flag = false;            
           }
        } else {
            //数字模式            
            if (!split[i].equals("#") && !split[i].equals("/")) {
                //如果遇到空格或者其他字符,则中断循坏,直接输出当前结果
                if(!sz.contains(s)) {
                    break;
                }
                builder.append(split[i]);            
            }
            //如果在数字模式下当前字符为'#' 则切换为英文模式            
            if(split[i].equals("#")) {
                flag = true;            
            }
        }
    }
    System.out.println(builder);
 }

五、测试用例:

输入:
123#2222#3#5//5556
输出:

输入:123#2222#3#50//5556
输出:

标签:map,ArrayList,九宫格,模式,add,split,按键,new,输入
From: https://blog.csdn.net/sinat_39281965/article/details/137181824

相关文章

  • C语言基础-标准输入输出
    标准库实现了简单文本的输入输出模式。以下的示例在使用时都需要先包含标准输入输出头文件stdio.h#include<stdio.h>输入getchar函数intgetchar(void);从标准输入(一般为键盘)中一次获取一个字符调用时,返回输入的字符遇到文件结尾时返回EOFEOF也定义在stdio.h中,其......
  • 74LV00A四路2输入NAND门
    这份文件是Nexperia74LV00A四路2输入NAND门的产品数据手册。以下是文件的核心内容概要:概述:74LV00A是一款由Nexperia生产的四路2输入NAND门集成电路。以下是对该产品的详细概述:1.**基本功能**:-74LV00A提供了四个独立的2输入NAND逻辑门,这些门可以实现基本的逻辑......
  • Android TV Recyclerview长按或连续按键,焦点丢失(或者焦点跳跃)
    原因分析RecyclerView设置适配器后,将数据填充进去,并不会将所有item的view都创建出来,一般只会创建一个屏幕的Item,当长按或者快速按下键时,Recyclerview来不及创建即将获取焦点的view,导致焦点丢失解决方法有两种思路:(1)控制按键速度 这里有两种具体实现策略:一种是记录......
  • 10-输入输出
        各位小伙伴们,大家好,我是酒点。那么咱们这一章给大家讲输入输出函数,我们学习之前有同学接触过的吗?我们来看,关于数据的输出,在C语言当中我们是需要引入一个头文件stdio.h,其实当我们在写第一个程序文件helloworld的时候,我们以及意识到这个文件的作用。当你用到了一些......
  • Markdown输入矩阵方式
    Markdown输入矩阵相关英语单词英文字母英文单词中文译文MMatrix矩阵Pparentheses圆括号(括弧)Vverticalbars(determinant)竖线(行列式)Bbracket方括号aarray数组1.不带括号的矩阵$$\begin{matrix}1&2&3\\4&5&6\\7&8&9\end{matrix}$$......
  • 【数据结构】一元多项式的表示与相加(无序输入 有序输出)
    一元多项式的表示与运算——课程设计(无序输入有序输出)目录一元多项式的表示与运算——课程设计(无序输入有序输出)一.例题:(输入无序,指数升序排列的一元多项式)1.链表结点定义2.创建单链表存放一元多项式(将无序的输入有序存放于链表)3.输出一元多项式4.一元多项式求值......
  • C++格式化输入和输出
    格式化输入与输出除了条件状态外,每个iostream对象还维护一个格式状态来控制IO如何格式化的细节。格式状态控制格式化的某些方面,如整型值是几进制、浮点值的精度、一个输出元素的宽度等。标准库定义了一组操纵符来修改流的格式状态。一个操纵符是一个函数或是一个对象,会影响......
  • 选择题部分的读取写入,以及重复进入的保证列表内数据不丢失的方法以及判断重复试题输
    1.思路讲解1.1首先读取部分,我们事先准备好一个文件夹,在内部创建一个文件,注意文件名不可重复,我这边使用了datetime.date.today()来达到文件名始终为当前日期的方式,再利用os.path.exists(path)来判断文件路径是否存在,如若不存在就新建,存在就追加1.2进行读取时,我们找到......
  • 【前端面试3+1】06继承方式及优缺点、缓存策略、url输入到渲染全过程、【二叉树中序遍
    一、继承有哪些方式?以及优缺点        继承的方式包括原型链继承、构造函数继承、组合继承、原型式继承、寄生式继承和组合式继承。1.原型链继承:实现方式:将子类的原型指向父类的实例来实现继承。优点:简单易懂,代码量少。缺点:存在引用类型共享的问题。functionPare......
  • 【入门】输入的这些数是否对称
    说明从键盘输入一个整数N(4<=N<=20),接下来输入N个数,判断输入的这些数是否对称,是输出“YES”,否则输出“NO”?(注意N可以是奇数或者偶数)。对称的意思是这些数正过来读和反过来读都是一样的。比如有4个数:1221,就是对称的,再比如有5个数:12321,也是对称的,但有5个数:12312,就不......