求助,急

qq_41085177 2017-11-17 08:16:33
JAVA如何使用一个for循环语句遍历两个数组找出比较两个数组出现相同次数最多的值
...全文
178 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
繁华终归落尽 2017-11-17
  • 打赏
  • 举报
回复
按楼上的思路~

public class TimesTotal<T> {
	public static void main(String[] args) {
		Integer key1 = new TimesTotal<Integer>()
				.sameTimes(new Integer[] { 1, 2, 2, 2, 1, 3, 4, 5 },
						new Integer[] { 1, 2, 3, 1, 4, 5, 2, 2 });
		Double key2 = new TimesTotal<Double>().sameTimes(new Double[] { 1.0D,
				2.0D, 2.0D, 2D, 1.0D, 3.0D, 4.0D, 5.0D }, new Double[] { 1D,
				2D, 2D, 2D, 1D, 3D, 4D, 5D });

		System.out.println(key1);
		System.out.println(key2);
	}

	public T sameTimes(T[] arr1, T[] arr2) {
		if(null == arr1 || null == arr2){
			return null;
		}
		Map<T, Integer> mapArr1 = new HashMap<T, Integer>();
		Map<T, Integer> mapArr2 = new HashMap<T, Integer>();
		for (T a : arr1) {
			int total = mapArr1.get(a) == null ? 0 : mapArr1.get(a);
			mapArr1.put(a, total + 1);
		}
		for (T a : arr2) {
			int total = mapArr2.get(a) == null ? 0 : mapArr2.get(a);
			mapArr2.put(a, total + 1);
		}

		Entry<T, Integer> entry = null;
		Set<Entry<T, Integer>> entrySet = mapArr1.entrySet();
		Iterator<Entry<T, Integer>> ite = (Iterator<Entry<T, Integer>>) entrySet
				.iterator();
		while (ite.hasNext()) {
			Entry<T, Integer> e = ite.next();
			Integer times2 = mapArr2.get(e.getKey());
			if (null == times2) {
				continue;
			}
			if (e.getValue().equals(times2)) {
				if (null == entry
						|| e.getValue().compareTo(entry.getValue()) >= 0) {
					entry = e;
				}
			}
		}

		return entry == null ? null : entry.getKey();
	}
}
Sunyiban 2017-11-17
  • 打赏
  • 举报
回复
创建个map,遍历时吧值当做map的key,每出现一次key值+1,最后取map就行了
不清不慎 2017-11-17
  • 打赏
  • 举报
回复
对每一个数出现的次数进行计数,然后求出出现相同次数最多的那个
不清不慎 2017-11-17
  • 打赏
  • 举报
回复
很简单,你可以先后遍历这两个数组,以这个数的大小为下标,这个数出现的次数为值重新组成两个数组,然后对比相同的即可,还有很多种方法
qq_41085177 2017-11-17
  • 打赏
  • 举报
回复
各位大神们快出来快出来
qq_41085177 2017-11-17
  • 打赏
  • 举报
回复
引用 5 楼 繁华终归落尽的回复:
按楼上的思路~

public class TimesTotal<T> {
	public static void main(String[] args) {
		Integer key1 = new TimesTotal<Integer>()
				.sameTimes(new Integer[] { 1, 2, 2, 2, 1, 3, 4, 5 },
						new Integer[] { 1, 2, 3, 1, 4, 5, 2, 2 });
		Double key2 = new TimesTotal<Double>().sameTimes(new Double[] { 1.0D,
				2.0D, 2.0D, 2D, 1.0D, 3.0D, 4.0D, 5.0D }, new Double[] { 1D,
				2D, 2D, 2D, 1D, 3D, 4D, 5D });

		System.out.println(key1);
		System.out.println(key2);
	}

	public T sameTimes(T[] arr1, T[] arr2) {
		if(null == arr1 || null == arr2){
			return null;
		}
		Map<T, Integer> mapArr1 = new HashMap<T, Integer>();
		Map<T, Integer> mapArr2 = new HashMap<T, Integer>();
		for (T a : arr1) {
			int total = mapArr1.get(a) == null ? 0 : mapArr1.get(a);
			mapArr1.put(a, total + 1);
		}
		for (T a : arr2) {
			int total = mapArr2.get(a) == null ? 0 : mapArr2.get(a);
			mapArr2.put(a, total + 1);
		}

		Entry<T, Integer> entry = null;
		Set<Entry<T, Integer>> entrySet = mapArr1.entrySet();
		Iterator<Entry<T, Integer>> ite = (Iterator<Entry<T, Integer>>) entrySet
				.iterator();
		while (ite.hasNext()) {
			Entry<T, Integer> e = ite.next();
			Integer times2 = mapArr2.get(e.getKey());
			if (null == times2) {
				continue;
			}
			if (e.getValue().equals(times2)) {
				if (null == entry
						|| e.getValue().compareTo(entry.getValue()) >= 0) {
					entry = e;
				}
			}
		}

		return entry == null ? null : entry.getKey();
	}
}
只能用一个for循环,也不能使用集合,具体的代码实现是怎样的?
qq_41085177 2017-11-17
  • 打赏
  • 举报
回复
引用 3 楼 qq_37142346的回复:
对每一个数出现的次数进行计数,然后求出出现相同次数最多的那个
只能用一个for循环,也不能使用集合,具体的代码实现是怎样的?

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧