题解 | #MP3光标位置#
MP3光标位置
https://www.nowcoder.com/practice/eaf5b886bd6645dd9cfb5406f3753e15
import java.util.Scanner; /** 浏览歌曲:分情况讨论 歌曲数n, 屏幕显示数4 */ public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNextInt()) { // 注意 while 处理多个 case int n = in.nextInt(); in.nextLine(); String s = in.nextLine(); //光标位置位 开始为0即第一个位置 int location = 0; int number = 1; // 光标所指的歌曲序号 if (n <= 4) { //不需要翻页,但有可能歌曲填不满 for (char c : s.toCharArray()) { if (c == 'U') { //特殊情况 if (location == 0 && number == 1) { location = n - 1; number = n; //移动到最后一首歌上 } else { location--; number--; } } if (c == 'D') { if (location == n - 1 && number == n) { location = 0; number = 1;//移动到第一首歌上 } else { location++; number++; } } } } else { //需要翻页 - 但是不用担心歌曲填不满列表的情况 for (char c : s.toCharArray()) { if (c == 'U') { if (location == 0) { if (number == 1) { location = 3; number = n; } else { //只需要普通翻页 number--; } } else { location--; number--; } } if (c == 'D') { if (location == 3) { if (number == n) { location = 0; number = 1; } else { number++; } } else { location++; number++; } } } } for (int i = 0; i < n && i < 4; i++) { //由于音乐是[1,n]的范围,所以可以不用额外使用数组存储当前列表中的歌曲, //直接根据当前光标位置,和选中的歌曲位置计算既可 System.out.print(number - location + i + " "); } System.out.println(); //当前选中的歌曲 System.out.println(number); } } }