描述 |
|
---|---|
知识点 | 查找 |
运行时间限制 | 10M |
内存限制 | 128 |
输入 | 输入候选人的人数,第二行输入候选人的名字,第三行输入投票人的人数,第四行输入投票。 |
输出 | 每行输出候选人的名字和得票数量。 |
样例输入 | 4 A B C D 8 A B C D E F G H |
样例输出 | A : 1 B : 1 C : 1 D : 1 Invalid : 4 |
答案需要考虑重名问题,第二个重名数量为0;且冒号前后存在空格;
我的方法感觉有点繁琐,不够简便
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int sum=0;
Map<String,Integer> map=new HashMap<String,Integer>();
//while(sc.hasNext()){
int num1=sc.nextInt();
String[]ss= new String[num1];
for(int i=0;i<num1;i++){
ss[i]=sc.next();
map.put(ss[i],sum);
map.put("Invalid",sum);
}
int num2=sc.nextInt();
String[]ss2=new String[num2];
int k=0;
for(int i=0;i<num2;i++){
ss2[i]=sc.next();
for(int j=0;j<ss.length;j++){
if(ss2[i].equals(ss[j])){
map.put(ss[j],map.get(ss[j])+1);
k=1;
break;
}else{k=0;}
}
// else{map.put("Invalid",map.get("Invalid")+1);}
// }
if(k==0){map.put("Invalid",map.get("Invalid")+1);}
}
//也可以用Map.Entry进行遍历
for(int i=0;i<num1;i++){
System.out.println(ss[i]+":"+map.get(ss[i]));
}
System.out.println("Invalid:"+map.get("Invalid"));
}
}
Map.Entry()进行遍历-------不同之处:遍历到相同元素只输出一次
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int sum=0;
Map<String,Integer> map=new HashMap<String,Integer>();
int num1=sc.nextInt();
for(int i=0;i<num1;i++){
String ss=sc.next();
map.put(ss,sum);
}
int num2=sc.nextInt();
int k=0;
for(int i=0;i<num2;i++){
String s=sc.next();
try{
map.put(s,map.get(s)+1);}
catch(Exception e){
map.put("Invalid",++k);
}
}
for(Map.Entry i:map.entrySet()){
System.out.println(i.getKey()+" : "+i.getValue());
}
}}