HJ64 MP3光标位置(java详解)

article/2023/6/4 15:02:40

就是一块诺基亚手机屏幕,只能显示四个歌曲,upper代表屏幕显示第一个歌曲(总歌曲中第几个),down代表屏幕显示的最后一个歌曲(总歌曲中第几个)
你要输入这个总歌曲数量n
{初始值,cur=0,upper=0,down=Math.min(3,n-1);}{为啥cur为0,例如打开QQ音乐光标不都是显示在第一个歌曲位置嘛}
你有两种操作,U或者D,分别代表当前光标向上移动一个歌曲,向下移动一个歌曲

但是移动光标会有四种特殊情况去引起屏幕中四首歌曲刷新.
第一种情况,cur(光标)位于0处(总歌曲第一个歌曲位置)你又想向上翻页,那么upper屏幕最上面肯定是第n-3个,down为第n个(序号从0开始,所以表示为upper=n-4,down=n-1)
第二种情况,cur(光标)位于n-1处(总歌曲最后一个歌曲位置)你又想向下翻页,那么upper屏幕最上面肯定是第1个,down为第4个(序号从0开始,所以表示为upper=0,down=3)
第三种情况,cur(光标) 0<cur&&cur<n 但是cur位于当前屏幕显示的歌曲第一个位置处 cur=upper 那你想向上翻页,那么屏幕肯定又要更新歌曲啊,所以upper–,down–;
第四种情况,cur(光标) 0<cur&&cur<n 但是cur位于当前屏幕显示的歌曲最后一个位置处 cur=down 那你想向下翻页,那么屏幕肯定又要更新歌曲啊,所以upper++,down++;

还有第五种情况,就是前四种都不满足,那么肯定光标cur向上,向下,屏幕四个歌曲都不会动,那只能 0<cur&&cur<n 而且 upper<cur<down 在屏幕中间第二,第三个位置啊(屏幕只能显示4个歌曲)

所以五种情况讲完,下面看代码了,

public static void main(String[] args) {Scanner sc = new Scanner(System.in);int cur = 0;int upper = 0;int down = 0;int n = Integer.parseInt(sc.nextLine());char[] ch = sc.nextLine().toCharArray();down = Math.min(3, n - 1);for (char res : ch) {int   move = res == 'U' ? -1 : 1;if (n > 4) {if (cur == 0 && move == -1) {upper = n - 4;down = n - 1;} else if (cur == n - 1 && move == 1) {upper = 0;down = 3;} else if (cur == upper && move == -1) {upper--;down--;} else if (cur == down && move == 1) {upper++;down++;}}cur = (cur + move + n) % n;}StringBuilder sb = new StringBuilder();for (int i = upper; i <= down; i++) {sb.append(i + 1).append(' ');}System.out.println(sb);System.out.println(cur + 1);}
http://www.ngui.cc/article/show-1007687.html

相关文章

C++初阶——类和对象(3)赋值/运算符重载

目录 5.赋值运算符重载 5.1 运算符重载 5.2 赋值运算符重载 5.3 前置和后置重载 6.日期类的实现——流插入&#xff0c;流提取重载 Date.h&#xff1a; Date.cpp: 7.const成员 8.取地址及const取地址操作符重载 5.赋值运算符重载 5.1 运算符重载 C为了增强代码的可读性…

建堆、堆排序、TopK问题大合集

一、如何建堆 1、向上调整建堆法O(NlogN) 原理&#xff1a; 利用向上调整的方法进行建堆&#xff0c;是通过模仿之前堆的插入操作&#xff0c;从第二个数开始&#xff0c;每次插入一个数&#xff0c;就对这个数进行向上调整&#xff0c;这样子既保证了原有数据为堆&#xff…

测试开发进阶系列课程

测试开发系列课程1.完善程序思维--------案列&#xff1a;图书管理系统的创建**&#xff08;一&#xff09;图书管理系统的创建**1.完善程序思维--------案列&#xff1a;图书管理系统的创建 &#xff08;一&#xff09;图书管理系统的创建 1.在main中写入主函数&#xff0c;…

数位DP算法学习总结

一、数位dp简述模板数位dp是一种计数时使用的动态规划算法&#xff0c;一般是要统计一个区间 [left, right] 内符合给定条件数字的个数&#xff0c;例如HDU 2089 不要62中的统计给定区间内不包含4以及62数字的个数&#xff0c;数位dp其实是暴力枚举算法的优化&#xff0c;通过过…

添加Anaconda Powershell Prompt到右键

想要使用Anaconda Powershell Prompt每次还要去开始菜单打开&#xff0c;而且还要切换到特定目录下&#xff0c;十分麻烦。通过将Anaconda Powershell Prompt添加到鼠标右键&#xff0c;可在当前目录十分方便的打开Anaconda Powershell Prompt。步骤如下&#xff1a; 1. 首先开…

Java_Spring:4. 使用 spring 的 IoC 的实现CRUD【案例】

目录 1 需求和技术要求 1.1 需求 1.2 技术要求 2 环境搭建 2.1 拷贝 jar 包 2.2 创建数据库和编写实体类 2.3 编写持久层代码 2.4 编写业务层代码 2.5 创建并编写配置文件 3 配置步骤 4 测试案例 4.1 测试类代码 4.2 分析测试了中的问题 1 需求和技术要求 1.1 需求…

Spring - Spring 注解相关面试题总结

文章目录01. Spring 配置方式有几种&#xff1f;02. Spring 如何实现基于xml的配置方式&#xff1f;03. Spring 如何实现基于注解的配置&#xff1f;04. Spring 如何基于注解配置bean的作用范围&#xff1f;05. Spring Component, Controller, Repository, Service 注解有何区别…

2023-3-25 java选择题每日一练

继承中类, 静态代码块, 实例代码块和构造方法的执行顺序其原理如下:当没有子类继承的时候顺序&#xff1a;静态代码块 → main → 构造代码块 → 构造方法public class Test {static{System.out.println("父类静态代码块开始执行&#xff01;");}{System.out.println…

【WMS学习】从悬浮窗的添加来看窗口的add和update

这里我们从一个悬浮窗应用来查看WindowManager的addView使用&#xff0c;从这里作为突破口来认识窗口的添加&#xff0c;和窗口的位置大小更新方法updateViewLayout&#xff0c;使用WindowManager的addView方法来添加窗口非常的直观&#xff0c;因为Activity的显示中&#xff0…

领域驱动设计(Domain-Driven Design, DDD)

领域驱动设计&#xff08;Domain Driven Design&#xff0c;简称DDD&#xff09;是一种面向对象软件开发方法&#xff0c;它强调将软件系统的设计和实现过程与业务领域紧密结合&#xff0c;通过深入理解和建模业务领域&#xff0c;从而达到高内聚、低耦合的目的。 领域驱动设计…