题解 | #MP3光标位置#
MP3光标位置
https://www.nowcoder.com/practice/eaf5b886bd6645dd9cfb5406f3753e15
每屏只能显示 4首歌曲,光标 初始 的位置为第1首歌。
1. 歌曲总数<=4的时候,不需要翻页,只是挪动光标位置。
光标在第一首歌曲上时,按Up键光标挪到最后一首歌曲;
光标在最后一首歌曲时,按Down键光标挪到第一首歌曲。
其他情况下用户按Up键,
光标挪到上一首歌曲;
用户按Down键,光标挪到下一首歌曲。
2. 歌曲总数大于4的时候(以一共有10首歌为例):
特殊翻页:
屏幕显示的是第一页(即显示第1 – 4首)时,光标在第一首歌曲上,用户按Up键后,屏幕要显示最后一页(即显示第7-10首歌),同时光标放到最后一首歌上。
同样的,屏幕显示最后一页时,光标在最后一首歌曲上,用户按Down键,屏幕要显示第一页,光标挪到第一首歌上。
一般翻页即屏幕显示的不是第一页时,
光标在当前屏幕显示的第一首歌曲时,用户按Up键后,屏幕从当前歌曲的上一首开始显示,光标也挪到上一首歌曲。
光标当前屏幕的最后一首歌时的Down键处理也类似。
其他情况,不用翻页,只是挪动光标就行。
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while(sc.hasNextLine()){ int num=Integer.parseInt(sc.nextLine()); if(num>4){ start=1; end=4; } String orders=sc.nextLine(); for (int i = 0; i < orders.length(); i++) { deal(num,orders.charAt(i)); } print(); } } static int start=0,end=0,cur=1; private static void deal(int num, char order) { /* 歌曲总数<=4的时候,不需要翻页,只是挪动光标位置。 光标在第一首歌曲上时,按Up键光标挪到最后一首歌曲; 光标在最后一首歌曲时,按Down键光标挪到第一首歌曲。 其他情况下 用户按Up键, 光标挪到上一首歌曲; 用户按Down键,光标挪到下一首歌曲。 * */ if(num<=4){ if(order=='U'){ if(cur==1){ cur=num; }else{ cur=cur-1; } }else if(order=='D'){ if(cur == num){ cur=1; }else { cur=cur+1; } } start=1; end=num; } /* 歌曲总数大于4的时候(以一共有10首歌为例): 特殊翻页: 屏幕显示的是第一页(即显示第1 – 4首)时,光标在第一首歌曲上,用户按Up键后,屏幕要显示最后一页(即显示第7-10首歌),同时光标放到最后一首歌上。 同样的,屏幕显示最后一页时,光标在最后一首歌曲上,用户按Down键,屏幕要显示第一页,光标挪到第一首歌上。 一般翻页: 屏幕显示的不是第一页时,光标在当前屏幕显示的第一首歌曲时,用户按Up键后,屏幕从当前歌曲的上一首开始显示,光标也挪到上一首歌曲。 光标当前屏幕的最后一首歌时的Down键处理也类似。 其他情况,不用翻页,只是挪动光标就行。 * */ if(num>4){ if(order=='U'){ if(cur==1){ cur=num; end=num; start=end-3; }else if (cur==start) { start=start-1; end=end-1; cur=cur-1; }else { cur=cur-1; } }else if(order=='D'){ if(cur == num){ cur=1; start=1; end=4; }else if(cur==end){ start=start+1; end=end+1; cur=cur+1; } else { cur=cur+1; } } } } private static void print() { for (int i = start; i <= end ; i++) { System.out.print(i+" "); } System.out.println(); System.out.println(cur); } }