大二的时候做程序,遇到一问题苦思冥想不得解决,于是壮着胆跑办公室问专业老师。。当时老师说这问题好,让我把问题整理下。。后来才知道,我的问题被载入每学期必须做的实验内容里。。后来上了大三,。。有一个别的专业的同学刚学java,跑过来找我,说老师让他问我,还说这个问题是我出的(哇咔咔~当时那是相当滴自豪呐。)。。。然后现在大四。。又有同学跑过来找我(这个。。你懂的)。额,不扯了,高兴归高兴,其实这问题也不难。。顺便觉得有必要在网上分享一下(虽然一直潜水)。。。如若有更好的方式,欢迎指出,大家共同学习。。
问题描述:
任意给出两组个数相同的集合a和b。 ( 例如,a为{2,1,2,2}, b为{1,0,0,1} ),编写程序求:
a中每一个数与b中同一位置的数称为对应关系,统计a中每种数所对应的b的取值的个数:(如上述例子中,当a为2时,b中有0和1两种取值,其中0的取值个数为1个,1的取值个数为2个;当a为1时,b中只有0这一种取值,且0的取值个数为1。)
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class TT {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[] = {2,1,2,2};
int b[] = {1,0,0,1};
String[] str =new String[a.length];
for(int i=0; i<a.length ;i++){
String s=""+a[i]+b[i];
str[i]=s;
}
Map<String, Integer> map = new HashMap<String, Integer>();
for (String s : str) {
map.put(s, map.get(s) == null ? 1 : map.get(s)+1);
}
//print
Set<String> keySet = map.keySet();
for (String ss : keySet) {
System.out.println("数组a中的" + ss.charAt(0) + "对应于数组b中的"
+ ss.charAt(1) + ",重复个数为:" + map.get(ss));
}
}
}
输出结果:
数组a中的2对应于数组b中的1,重复个数为:2
数组a中的2对应于数组b中的0,重复个数为:1
数组a中的1对应于数组b中的0,重复个数为:1
同样两个数组中的内容可以随便换,只要两个数组长度一样就行。。例如:
int a[] = { 3, 4, 3, 3, 4, 3 };
int b[] = { 2, 4, 1, 1, 4, 2};
当时记得老师给的思路是用两个map..Map里面的value值也是个Map类型的。。但是,今天又拿来做,用了一个新的方法,觉得也不错。。
啊,其实,我还是比较喜欢操纵字符串。。。
问题描述:
任意给出两组个数相同的集合a和b。 ( 例如,a为{2,1,2,2}, b为{1,0,0,1} ),编写程序求:
a中每一个数与b中同一位置的数称为对应关系,统计a中每种数所对应的b的取值的个数:(如上述例子中,当a为2时,b中有0和1两种取值,其中0的取值个数为1个,1的取值个数为2个;当a为1时,b中只有0这一种取值,且0的取值个数为1。)
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class TT {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[] = {2,1,2,2};
int b[] = {1,0,0,1};
String[] str =new String[a.length];
for(int i=0; i<a.length ;i++){
String s=""+a[i]+b[i];
str[i]=s;
}
Map<String, Integer> map = new HashMap<String, Integer>();
for (String s : str) {
map.put(s, map.get(s) == null ? 1 : map.get(s)+1);
}
Set<String> keySet = map.keySet();
for (String ss : keySet) {
System.out.println("数组a中的" + ss.charAt(0) + "对应于数组b中的"
+ ss.charAt(1) + ",重复个数为:" + map.get(ss));
}
}
}
输出结果:
数组a中的2对应于数组b中的1,重复个数为:2
数组a中的2对应于数组b中的0,重复个数为:1
数组a中的1对应于数组b中的0,重复个数为:1
同样两个数组中的内容可以随便换,只要两个数组长度一样就行。。例如:
int a[] = { 3, 4, 3, 3, 4, 3 };
int b[] = { 2, 4, 1, 1, 4, 2};