Java机试题:MP3光标位置
描述
MP3 Player因为屏幕较小,显示歌曲列表的时候每屏只能显示几首歌曲,用户要通过上下键才能浏览所有的歌曲。为了简化处理,假设每屏只能显示4首歌曲,光标初始的位置为第1首歌。
现在要实现通过上下键控制光标移动来浏览歌曲列表,控制逻辑如下:
-
歌曲总数<=4的时候,不需要翻页,只是挪动光标位置。
- 歌曲总数>4的时候
光标在第一首歌曲上时,按Up键光标挪到最后一首歌曲;光标在最后一首歌曲时,按Down键光标挪到第一首歌曲。
输入描述:
输入说明:
1 输入歌曲数量
2 输入命令 U或者D
输出描述:
输出说明
1 输出当前列表
2 输出当前选中歌曲
import java.util.Scanner; /** * * 思路:整体考虑分两种,歌曲数大于4和小于等于4. * 整体需要两部分光标的刷新,和列表刷新的情况。 * */ public class Main{ // 歌曲数量 static int num = -1; static int[] arr = new int[4]; public static void main(String[] args){ Scanner sc = new Scanner(System.in); while(sc.hasNextLine()){ // 歌曲数量以及光标所在位置 num = Integer.valueOf(sc.nextLine()); String order = sc.nextLine(); // 光标初始化位置为1 int light = 1; // 歌曲数少于等于4时,列表不会刷新 if(num <= 4) { StringBuffer sb = new StringBuffer(); for (int i = 1; i <= num; i++) { sb.append(i + " "); } System.out.println(sb.toString().substring(0, sb.length() - 1)); for (int i = 0; i < order.length(); i++) { // 按上键 if(order.charAt(i) == 'U' && light == 1) { light = num; } if(order.charAt(i) == 'U') { light--; } // 按下键 if(order.charAt(i) == 'D' && light == num) { light = 1; } if(order.charAt(i) == 'D') { light++; } } System.out.println(light); } else { // 初始化当前列表 changeMp3List(num-3); for (int i = 0; i < order.length(); i++) { // 按上键 if(order.charAt(i) == 'U' && light == 1) { // 翻页 light = num; changeMp3List(num-3); } else if(order.charAt(i) == 'U') { // 需要刷当前列表,上移 if(arr[0] == light) { changeMp3List(arr[0] - 1); } light--; } // 按下键 if(order.charAt(i) == 'D' && light == num) { // 翻页 light = 1; changeMp3List(1); } else if(order.charAt(i) == 'D') { // 需要刷当前列表,下移 if(arr[3] == light) { changeMp3List(arr[0] + 1); } light++; } } StringBuffer sb = new StringBuffer(); for (int i = 0; i < arr.length; i++) { sb.append(arr[i] + " "); } System.out.println(sb.toString().substring(0, sb.length() - 1)); System.out.println(light); } } } // 找准list第一个,填充list,歌曲数大于4,当前列表一定有4首歌 private static void changeMp3List(int first) { arr[0] = first; for (int i = 1; i < 4; i++) { arr[i] = arr[i-1] + 1; } } }