Scanner是什么?
Java 5添加了java.util.Scanner类,这是一个用于扫描输入文本的新的应用程序。
Scanner中常用方法
- nextInt():用于只读取整型数据,读入空白或空白字符,会跳过,以换行符'\n'结束输入,不包含换行符。
private static void nextIntTest() { Scanner scanner = new Scanner(System.in); System.out.println("请输入number个数:"); for(int i = 0; scanner.hasNext();i++){ int num = scanner.nextInt();// List<Integer> list = new ArrayList<Integer>(); System.out.println("请输入number初始值:"); for(int j = 0 ; j<num ; j++){ list.add(scanner.nextInt()); } System.out.println("输出结果:"); for(Integer integer : list){ System.out.print(integer+ " "); } } }
输出结果1
请输入number个数: 4 请输入number初始值: 1 2 3 4 输出结果: 1 2 3 4
- nextLine():读取整行,包括换行符
private static void nextLineTest(){ Scanner scanner = new Scanner(System.in); System.out.println("请输入nextLine:"); String nextLine = scanner.nextLine(); System.out.println("输出结果:"+nextLine); }
输出结果:
请输入nextLine: 1 2 3 4 2 输出结果:1 2 3 4 2
- next():读取单个单词,以空格作为分隔符
private static void nextTest(){ Scanner scanner = new Scanner(System.in); System.out.println("请输入next:"); String next = scanner.next(); System.out.println("输出结果:" + next); }
输出结果:
请输入next: 1 2 3 输出结果:1
实例分析
老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩.
输入描述:
输入包括多组测试数据。
每组输入第一行是两个正整数N和M(0 < N <= 30000,0 < M < 5000),分别代表学生的数目和操作的数目。学生ID编号从1编到N。
第二行包含N个整数,代表这N个学生的初始成绩,其中第i个数代表ID为i的学生的成绩。
接下来又M行,每一行有一个字符C(只取‘Q’或‘U’),和两个正整数A,B.
当C为'Q'的时候,表示这是一条询问操作,他询问ID从A到B(包括A,B)的学生当中,成绩最高的是多少
当C为‘U’的时候,表示这是一条更新操作,要求把ID为A的学生的成绩更改为B。输出描述:
对于每一次询问操作,在一行里面输出最高成绩.示例1
输入
5 7
1 2 3 4 5
Q 1 5
U 3 6
Q 3 4
Q 4 5
U 4 5
U 2 9
Q 1 5
输出
5
6
5
9import java.util.Scanner; /** * @author yangpei * @date 2019/3/18 下午9:16 */ public class TheBestGrade { private static int N; private static int M; private static int A; private static int B; private static int[] grade = null; private static String[] QU = null; public static void main(String[] args) { in(); } private static void in(){ Scanner in = new Scanner(System.in); while(in.hasNext()){ N = in.nextInt(); M = in.nextInt(); grade = new int[N]; for(int i = 0;i < N;i++){ grade[i] = in.nextInt(); // System.out.print(grade[i] + " "); } in.nextLine(); QU = new String[M]; for(int i = 0 ; i < M; i++){ String index = in.nextLine(); QU[i] = index; } for(int i = 0 ;i < M;i++){ String[] string = QU[i].split(" "); String index = string[0]; A = Integer.parseInt(string[1]); B = Integer.parseInt(string[2]); process(index,A,B,grade); } } } private static void process(String index, int a, int b, int[] grade) { int begin,end; if(index.equals("Q")){ begin = Math.min(a, b) -1; end = Math.max(a,b); int max = grade[begin]; for(int i = begin ;i < end ; i++){ if(max < grade[i]){ max = grade[i]; } } System.out.println(max); } if(index.equals("U")){ grade[a-1] = b; } } }
输出结果
5 7 1 2 3 4 5 Q 1 5 U 3 6 Q 3 4 Q 4 5 U 4 5 U 2 9 Q 1 5 5 6 5 9