题解 | #记票统计#
记票统计
http://www.nowcoder.com/practice/3350d379a5d44054b219de7af6708894
- 注意多组用例输入时,使用
while (in.hasNextInt())
判断结束 - 直接读取
nextLine()
的时候,会导致回车后读取到的为空白。需要循环使用next()
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
/**
* class com.sloera.nowcoder
* user sloera
* date 2022/2/28
*/
public class Main {
public static void main(String[] args) {
final Scanner in = new Scanner(System.in);
while (in.hasNextInt()) {
handle(in);
}
}
private static void handle(Scanner in) {
int candidate = 0;
if (in.hasNextInt()) {
candidate = in.nextInt();
}
String[] names = new String[candidate];
for (int i = 0; i < candidate; i++) {
names[i] = in.next();
}
final HashSet<String> nameSet = new HashSet<>(Arrays.asList(names));
final HashMap<String, Integer> nameCount = new HashMap<>();
AtomicInteger invalid = new AtomicInteger();
int voteNum = 0;
if (in.hasNextInt()) {
voteNum = in.nextInt();
}
for (int i = 0; i < voteNum; i++) {
String x = in.next();
if (nameSet.contains(x)) {
nameCount.put(x, Optional.ofNullable(nameCount.get(x)).orElse(0) + 1);
} else {
invalid.getAndIncrement();
}
}
for (int i = 0; i < names.length; i++) {
System.out.println(names[i] + " : " + Optional.ofNullable(nameCount.get(names[i])).orElse(0));
}
System.out.println("Invalid : " + invalid);
}
}