JAVA36 判断学生成绩
描述
定义一个方法用于录入学生的考试成绩,要求考试成绩必须在0-100之间,不满足就产生一个自定义异常,控制台输出一个错误信息"分数不合法"(请输出自定义异常对象的错误信息,将错误信息设置为分数不合法)
输入描述
控制台输入的int类型整数
输出描述
若分数合法则输出该分数,否则输出错误信息分数不合法
示例1
输入:
输出:
示例2
输入:
输出:
解答
定义一个异常类,然后重写异常类输入异常信息处理的方法,注意此时到了构造方法。然后就是利用 if...else
条件分支对输入进行判断,根据符合的条件进入不同的执行分支。如果输入的分数不满足 [0,100]
的情况,那么就直接抛出异常。
import java.util.*;public class Main { public static void main (String[] args) { Scanner scanner = new Scanner(System.in); int score = scanner.nextInt(); try { if (score >= 0 && score <= 100 ) System.out.println(score); else { throw new ScoreException("分数不合法" ); } } catch (ScoreException str) { System.out.println(str.getMessage()); } } } class ScoreException extends Exception { public ScoreException (String message) { super (message); } }
JAVA37 字符串去重
描述
从键盘获取一串字符串,要求去除重复的字符。请使用 HashSet 解决这一问题
输入描述
键盘输入的任意字符串
输出描述
去重后的字符串(不要求顺序,预设代码中已经给出输出)
示例1
输入:
输出:
解答
既然题目中已经提示了利用 HashSet
,那么直接使用就好了,但是要注意的是,往 HashSet
里边添加元素得到的结果是无序的,如果要想得到有序的结果,那么则不能使用 HashSet
。
import java.util.HashSet;import java.util.Scanner;public class Main { public static void main (String[] args) { Scanner scanner = new Scanner(System.in); String str = scanner.nextLine(); scanner.close(); HashSet<Character> hs = new HashSet<>(); for (int i = 0 ; i < str.length(); i++) { hs.add(str.charAt(i)); } for (char c : hs) { System.out.print(c); } } }
JAVA38 集合遍历
描述
请使用三种方式遍历一个 list
集合
输入描述
键盘任意输入的五个int类型变量
输出描述
使用三种不同的方法遍历集合,遍历输出时不换行,数字之间用空格隔开
示例1
输入:
输出:
普通for循环:1 2 3 4 5 增强for循环:1 2 3 4 5 迭代器遍历:1 2 3 4 5
解答
主要考察基础语法,要牢记的两种 for
循环,一种是普通循环,另一种则是增强循环,而迭代器能掌握就更好了。
import java.util.ArrayList;import java.util.Iterator;import java.util.List;import java.util.Scanner;public class Main { public static void main (String[] args) { Scanner scanner = new Scanner(System.in); List<Integer> list = new ArrayList<>(); int num1 = scanner.nextInt(); int num2 = scanner.nextInt(); int num3 = scanner.nextInt(); int num4 = scanner.nextInt(); int num5 = scanner.nextInt(); scanner.close(); list.add(num1); list.add(num2); list.add(num3); list.add(num4); list.add(num5); System.out.print("普通for循环:" ); for (int i = 0 ; i < list.size(); i++) { System.out.print(list.get(i) + " " ); } System.out.println(); System.out.print("增强for循环:" ); for (int num : list) { System.out.print(num + " " ); } System.out.println(); System.out.print("迭代器遍历:" ); Iterator it = list.iterator(); while (it.hasNext()) { System.out.print(it.next() + " " ); } System.out.println(); } }
JAVA39 排队系统
描述
请设计一个排队程序,用户有普通客人和VIP客人之分,VIP客人不排队(即VIP客人在队列头部),目前队列中已有两位客人小明和小军在排队,请将VIP客人小红新增至队列头部。
输入描述
无
输出描述
预设代码中已经指定输出
解答
对于 VIP
客人,和普通客人最大的区别就在于 VIP
客人不用排队,所以无论何时 VIP
来都可以排到队列的最前边,利用 addFirst()
方法即可实现插队到第一位。
import java.util.*;public class Main { public static void main (String[] args) { Guest guest1 = new Guest("小明" , false ); Guest guest2 = new Guest("小军" , false ); Guest vipGuest = new Guest("小红" , true ); Deque<Guest> deque = new ArrayDeque<>(); deque.add(guest1); deque.add(guest2); deque.addFirst(vipGuest); System.out.println(deque); } } class Guest { String name; Boolean vip; @Override public String toString () { return name; } public Guest (String name, Boolean vip) { this .name = name; this .vip = vip; } }
JAVA40 首尾交替出队
描述
现从一队学生中抽人上台演讲,为公平起见,队头队尾交替抽取,请通过程序实现这个出队的过程。
输入描述
一组学生的名字
输出描述
交替打印队头队尾学生的名字
示例1
输入:
输出:
解答
分为两种情况,如果队列长队不小于 2,那么则不断从队列中依次头、尾打印学生名字。另外一种情况就是此时队伍中只有一个学生了,这个时候只需要打印其名字即可。
import java.util.ArrayDeque;import java.util.Scanner;public class Main { public static void main (String[] args) { ArrayDeque deque = new ArrayDeque(); Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { String name = scanner.next(); deque.offerLast(name); } while (deque.size() >= 2 ) { System.out.println(deque.pollFirst()); System.out.println(deque.pollLast()); } if (deque.size() > 0 ) { System.out.println(deque.pollFirst()); } } }