【每日一题】day21_02 MP3光标位置

学习目标:

目标:熟练运用Java所学知识


学习内容:

本文内容:使用java解决 MP3光标位置


题目描述

链接:https://www.nowcoder.com/questionTerminal/eaf5b886bd6645dd9cfb5406f3753e15
来源:牛客网

MP3 Player因为屏幕较小,显示歌曲列表的时候每屏只能显示几首歌曲,用户要通过上下键才能浏览所有的歌曲。为了简化处理,假设每屏只能显示4首歌曲,光标初始的位置为第1首歌。

现在要实现通过上下键控制光标移动来浏览歌曲列表,控制逻辑如下:

  1. 歌曲总数<=4的时候,不需要翻页,只是挪动光标位置。
    光标在第一首歌曲上时,按Up键光标挪到最后一首歌曲;光标在最后一首歌曲时,按Down键光标挪到第一首歌曲。
    在这里插入图片描述

  2. 歌曲总数大于4的时候(以一共有10首歌为例):
    特殊翻页:屏幕显示的是第一页(即显示第1 – 4首)时,光标在第一首歌曲上,用户按Up键后,屏幕要显示最后一页(即显示第7-10首歌),同时光标放到最后一首歌上。同样的,屏幕显示最后一页时,光标在最后一首歌曲上,用户按Down键,屏幕要显示第一页,光标挪到第一首歌上。在这里插入图片描述
    一般翻页:屏幕显示的不是第一页时,光标在当前屏幕显示的第一首歌曲时,用户按Up键后,屏幕从当前歌曲的上一首开始显示,光标也挪到上一首歌曲。光标当前屏幕的最后一首歌时的Down键处理也类似。在这里插入图片描述
    其他情况,不用翻页,只是挪动光标就行。

链接:https://www.nowcoder.com/questionTerminal/eaf5b886bd6645dd9cfb5406f3753e15
来源:牛客网

输入描述:

输入说明:
1 输入歌曲数量
2 输入命令 U或者D

本题含有多组输入数据!

输出描述:

输出说明
1 输出当前列表
2 输出当前选中歌曲

示例1

输入
10
UUUU
输出
7 8 9 10
7

解题思路

这个题目不是很难,只需要考虑完所有情况即可
我是以歌曲数量分为了两种情况,所有情况如下:
在这里插入图片描述
在这里插入图片描述

实现代码

import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
            int count=sc.nextInt();
            String cmd=sc.next();
            int cur=1;//当前光标的位置
            int first=1;//当前页面的第一首歌曲序号
            if(count<=4){
                //当歌曲数小于等于4
                for(int i=0;i<cmd.length();i++){
                    if(cmd.charAt(i)=='U'){
                        //指令U
                        cur--;
                        if(cur==0){
                            cur=count;
                        }
                    }else{
                        //指令D
                        cur++;
                        if(cur==count+1){
                            cur=1;
                        }
                    }
                }
            }else{
                //歌曲数大于4
                for(int i=0;i<cmd.length();i++){
                    if(cmd.charAt(i)=='U'){
                        //指令U
                        cur--;
                        if(cur==0){
                            //切换页面
                            cur=count;
                            first=count-3;
                        }
                        if(cur==first-1){
                            //向上更新第一首歌曲页面
                            first--;
                        }
                    }else{
                        //指令D
                        cur++;
                        if(cur==count+1){
                            //切换至第一首歌曲
                            cur=1;
                            first=1;
                        }
                        if(cur==first+4){
                            //向下更新一首歌曲页面
                            first++;
                        }
                    }
                }
            }
            if(count<=4){
                for(int i=0;i<count;i++){
                    System.out.print(first+++" ");
                }
            }else{
                System.out.print(first+" "+(first+1)+" "+(first+2)+" "+(first+3));
            }
            System.out.println();
            System.out.println(cur);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值