黑马程序员技术交流社区
标题:
感觉很简单的题,可做起来就难了,大家看下?
[打印本页]
作者:
黑马杨晨
时间:
2012-9-18 21:45
标题:
感觉很简单的题,可做起来就难了,大家看下?
编写一个Java应用程序,对用户输入的任意一组字符如{1,3,4,7,2,1,1,5,2},输出其中出现次数最多且数值最大的字符,并显示其出现次数?
作者:
黑马杨晨
时间:
2012-9-18 22:12
{:soso_e193:}没人看吗?
作者:
黑马杨晨
时间:
2012-9-23 14:04
大家有人会吗?
作者:
尤圣回
时间:
2012-9-23 14:26
public void fun() {
int[] a = { 4, 1, 2, 4, 5, 1, 1, 1, 5, 1, 3, 4, 5 };
Arrays.sort(a);
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
System.out.println();
int maxNumber = a[a.length - 1], maxCount = 1;
int curNumber = a[a.length - 1], curCount = 1;
for (int i = a.length - 1; i > 0; i--) {
curNumber = a[i];
if (a[i] == a[i - 1]) {
curCount++;
} else {
System.out.println("i=" + i + ",curCount=" + curCount+ ",maxCount=" + maxCount + ",maxNumber=" + maxNumber);
if (curCount > maxCount) {
maxCount = curCount;
maxNumber = curNumber;
}
curCount = 1;
}
}
if (curCount > maxCount) {
maxCount = curCount;
}
System.out.println("curCount=" + curCount + ",maxCount=" + maxCount + ",maxNumber=" + maxNumber);
}
复制代码
作者:
官仁杰
时间:
2012-9-23 14:29
试试
import java.util.Arrays;
public class test{
public static void main(String[] arg){
int a[] = {1,3,4,7,2,5,5,1,1,5,2};
int count = 0;
int answer = 0;
Arrays.sort(a);
for (int i = 0; i < a.length; i++){
for(int j = i+1, count_tmp = 0;j< a.length;j++){
if(a[i] == a[j]) count_tmp++;
if(count <= count_tmp) {
count = count_tmp;
answer = a[i];
}
}
}
System.out.println(answer);
}
}
复制代码
作者:
张忠豹
时间:
2012-9-23 17:26
/*
可以考虑使用map集合完成。
*/
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
class CollectionDemo
{
public static void main(String[] args)
{
String str = "2,1,3,4,7,3,2,1,1,3,5,2";
System.out.println(str);
String maxValue = getCharCount(str);
System.out.println(maxValue);
}
/*
思路:
因为字符和次数之间存在映射关系,想到了map集合。,
获取字符串中的每一个字母,并把字符作为键,去查map集合。
如果没有对应的值,将该字符作为键。将1作为值存储到map集合中。
如果有对应的值,将该值取出并自增,将该字符和自增后的结果存储到map集合中。
这样,键重复出现,新值会覆盖旧值。
记录了这个字符的最新出现的次数。
当字符串中的字符都遍历完成后,map集中就记录所有字母的次数。
步骤:
1,定义map集合。
2,将字符串变成字符数组。
3,遍历字符数组。
4,将遍历到的每一个字母作为键去查map集合。
5,对通过该键获取到的值进行判断。
*/
public static String getCharCount(String str)
{
//1,定义map集合。所以使用TreeMap。
//集合中的键的类型时String,值的类型时Integer、
Map map = new TreeMap();
//2,将字符串变成字符串数组。
String[] strs = str.split(",");
int count = 0;
//3,遍历数组。
for(int x=0; x<strs.length; x++)
{
int in = Integer.parseInt(strs[x]);
if(!(in>=0 && in<=9))
continue;
//将遍历到的字符作为键,去查map集合中对应的值。
Integer value = (Integer)map.get(strs[x]);
if(value!=null)
{
count = value;
}
count++;
map.put(strs[x],count);
count = 0;
}
return getMaxCount(map);
}
//获取最大次数和字符
private static String getMaxCount(Map map) {
Set keySet = map.keySet();
//返回一个包含此 set 中所有元素的数组;返回数组的运行时类型是指定数组的类型
String[] arr = (String[]) keySet.toArray(new String[keySet.size()]);
Map valueMap = new TreeMap();
Integer max =0;
String key ="";
for (int ii=0;ii<arr.length;ii++) {
if((Integer)map.get(arr[ii])>=max) {
key = arr[ii];
max = (Integer)map.get(arr[ii]);
valueMap.put(key, max);
}
}
//如果出现的最大次数相同,就比较出现最大次数的数值
if(valueMap.size()==1) {
System.out.println("出现次数最多且数值最大的字符是:key="+key+",其出现次数是max="+max);
} else if(valueMap.size()>1) {
Set keys = valueMap.keySet();
//返回一个包含此 set 中所有元素的数组;返回数组的运行时类型是指定数组的类型。
String[] arr2 = (String[]) keys.toArray(new String[keys.size()]);
for(int jj=0;jj<arr2.length-1;jj++) {
if(Integer.parseInt(arr2[jj])>Integer.parseInt(arr2[jj+1])) {
key = arr2[jj];
}
}
System.out.println("出现次数最多且数值最大的字符是:key="+key+",其出现次数是max="+max);
}
return key;
}
}
使用集合做的,希望对楼主有用
作者:
王海宇
时间:
2012-9-23 18:36
次数最多和和数值最大这两个特点不可能总是同时满足的吧,这样的话如果这两个特点分别在两类元素身上,那该选哪个呢??要是改成分别输出次数最多和数值最大,这样才合理。。
作者:
柳彬
时间:
2012-9-23 19:37
这道题本来就有问题,它的意思究竟是出现次数最多,如果出现次数最多不止一个就比较大小,还是数值最大出现的次数?题目有歧义?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2