Java每日一题07
通过键盘输入一个字符串,判断字符串中出现最多的字符并输出该字符和输出出现次数
今天这道题,我觉得下面的两种方法都不是很好,看看哪位朋友有更好的贡献出来:)
package test35;import java.util.Arrays;import java.util.Scanner;public class JudeCount {public static void main(String[] args) {System.out.println("请输入你要判断的字符串:");Scanner s = new Scanner(System.in);String str = s.nextLine();char[] ch = str.toCharArray();Arrays.sort(ch); // 对数组排序char max = 'a'; // 记录出现次数最多元素int maxcount = 0; // 记录最大出现次数int count = 1; // 中间传值参数 判断当前元素出现次数for (int i = 0; i < ch.length - 1; i++) { // 进行判断if (ch[i] == ch[i + 1]) {count++;}if (ch[i] != ch[i + 1]) {if (count > maxcount) {maxcount = count;max = ch[i];}count = 1;}}System.out.println("出现最多的元素是:" + max + " 次数为:" + maxcount);}}
或者 感谢tou3921提供的第二种方法
package com.test; import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class JudeCount { /** * @param args */ public static void main(String[] args) { System.out.println("请输入你要判断的字符串:"); Scanner s = new Scanner(System.in); String str = s.nextLine(); char[] ch = str.toCharArray(); Map<String,Integer> m = new HashMap<String,Integer>(ch.length);// 存放所有输入字符的出现次数 for(char c : ch){ Integer o = m.get(String.valueOf(c)); int count = 1; if(o!=null){ count=o.intValue()+1; } m.put(String.valueOf(c), new Integer(count)); } String key="";// 记录出现次数最多元素 int count = 0;// 记录最大出现次数 for(String k : m.keySet()){ if(m.get(k).intValue()>count){ key=k; count=m.get(k).intValue(); } } System.out.println("输入次数最多的是"+key+" : "+count+"次"); } }
package com.test;import java.util.HashMap;import java.util.Map;import java.util.Scanner;public class JudeCount {/** * @param args */public static void main(String[] args) {System.out.println("请输入你要判断的字符串:"); Scanner s = new Scanner(System.in); String str = s.nextLine(); char[] ch = str.toCharArray();Map<String,Integer> m = new HashMap<String,Integer>(ch.length);// 存放所有输入字符的出现次数for(char c : ch){Integer o = m.get(String.valueOf(c));int count = 1;if(o!=null){count=o.intValue()+1;}m.put(String.valueOf(c), new Integer(count));}String key="";// 记录出现次数最多元素int count = 0;// 记录最大出现次数for(String k : m.keySet()){if(m.get(k).intValue()>count){key=k;count=m.get(k).intValue();}}System.out.println("输入次数最多的是"+key+" : "+count+"次");}}}
}public static void main(String[] args) {System.out.println("请输入字符串:");Scanner in = new Scanner(System.in);char[] ch = in.nextLine().toString().toCharArray();Arrays.sort(ch);int maxCount = 0;int count = 1;char max = 'a';Map<Character, Integer> map = new HashMap<Character, Integer>();for (int i = 0; i < ch.length; i++) {char a = ch[i];if (map.get(a) == null) {count = 1;map.put(a, count);} else {count++;map.put(a, count);}if (maxCount < count) {maxCount = count;max = a;}}System.out.println("输入次数最多的是 " + max + " " + maxCount + "次");}
}
正解}
说明一下, 键盘最多字符就是256包括空格什么的, 一般是127, 所以我们可以利用他的ascii码, 成为他的数字下标, 并每次累加。}[/size][size=large][color=red][/color] }
}
import java.util.Arrays; import java.util.Scanner; public class JudeCount { public static void main(String[] args) { System.out.println("请输入你要判断的字符串:"); Scanner s = new Scanner(System.in); String str = s.nextLine(); char[] ch = str.toCharArray(); Arrays.sort(ch); // 对数组排序 char max = 'a'; // 记录出现次数最多元素 int maxcount = 0; // 记录最大出现次数 int count = 1; // 中间传值参数 判断当前元素出现次数 for (int i = 0; i < ch.length - 1; i++) { // 进行判断 if (ch[i] == ch[i + 1]) { count++; //如果末尾的字符和倒数第2个相同 if(i==ch.length-2){ if (count > maxcount) { maxcount = count; max = ch[i]; } count = 1; } } if (ch[i] != ch[i + 1]) { if (count > maxcount) { maxcount = count; max = ch[i]; } count = 1; } } System.out.println("出现最多的元素是:" + max + " 次数为:" + maxcount); } } package test;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Scanner;public class test7 {/** * 通过键盘输入一个字符串<br> * 判断字符串中出现最多的字符<br> * 并输出该字符和输出出现的次数<br> * @param args */public static void main(String[] args) {System.out.println("请输入需要判断的字符串:");Scanner s = new Scanner(System.in);String str = s.nextLine();char[] ch = str.toCharArray();//存放所有输入字符和对应字符的出现次数Map<String, Integer> m = new HashMap<String, Integer>(ch.length);//统计每个字符出现的个数for (char c : ch) {Integer o = m.get(String.valueOf(c));int count = 1;if (o != null) {count = o.intValue() + 1;}m.put(String.valueOf(c), new Integer(count));}int count = 0;// 记录出现最多次字符的次数for (String h : m.keySet()) {if (m.get(h).intValue() > count) {count = m.get(h).intValue();}}//记录出现最多次的字符ArrayList<String> arr = new ArrayList<String>();for (String h : m.keySet()) {if (m.get(h).intValue() == count) {arr.add(h);}} //遍历arr,取出最多出现的次数对应的字符 //并放进maxCount字符串,便于后面输出Iterator<String> its = arr.iterator();String maxCount = "";while (its.hasNext()) {maxCount += its.next();}System.out.println("shu入次数最多的是" + maxCount + " : " + count + "次");}}import java.util.Arrays; import java.util.Scanner; public class JudeCount { public static void main(String[] args) { System.out.println("请输入你要判断的字符串:"); Scanner s = new Scanner(System.in); String str = s.nextLine(); char[] ch = str.toCharArray(); Arrays.sort(ch); // 对数组排序 char max = 'a'; // 记录出现次数最多元素 int maxcount = 0; // 记录最大出现次数 int count = 1; // 中间传值参数 判断当前元素出现次数 for (int i = 0; i < ch.length - 1; i++) { // 进行判断 if (ch[i] == ch[i + 1]) { count++; //如果末尾的字符和倒数第2个相同 if(i==ch.length-2){ if (count > maxcount) { maxcount = count; max = ch[i]; } count = 1; } } if (ch[i] != ch[i + 1]) { if (count > maxcount) { maxcount = count; max = ch[i]; } count = 1; } } System.out.println("出现最多的元素是:" + max + " 次数为:" + maxcount); } }
第一种方法,我更改为这样
import java.util.Arrays; import java.util.Scanner; public class judeCount { public static void main(String[] args) { System.out.println("请输入你要判断的字符串:"); Scanner s = new Scanner(System.in); String str = s.nextLine(); char[] ch = str.toCharArray(); Arrays.sort(ch); // 对数组排序 char max = 'a'; // 记录出现次数最多元素 int maxcount = 0; // 记录最大出现次数 int count = 1; // 中间传值参数 判断当前元素出现次数 for (int i = 0; i < ch.length - 1; i++) { // 进行判断 if (ch[i] == ch[i + 1]) { count++; } if (count > maxcount){ maxcount = count; max = ch[i]; } if(ch[i] != ch[i + 1]){count=1;} } System.out.println("出现最多的元素是:" + max + " 次数为:" + maxcount); } }