黑马程序员技术交流社区
标题:
作业题分享(两种解题方法)
[打印本页]
作者:
yangxiaosa
时间:
2017-3-17 23:08
标题:
作业题分享(两种解题方法)
/*问题:
* 键盘录入一个字符串(不包含空格),然后统计该字符串中每一个字符出现的次数
* */
解题1:效率高,不好理解
package com.itheima.homework2;
import java.util.Scanner;
public class HomeWork4 {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc =new Scanner(System.in);
//录入要操作的字符串
String str = sc.nextLine();
//把字符串转换为字符数组
char[] arr = str.toCharArray();
for(int i=0;i<arr.length;i++){
//定义一个计数器,每次循环都会重置为0
int count=1;
for(int j=i+1;j<arr.length;j++){
//如果arr[i]==arr[j],就把arr[j]与arr[i+1]交换,同时i自增1
if(arr[i]==arr[j]){
i++;
//判断j是否等于自增后的i,如果相等就不交换了,可以少交换一次
if(j!=i){
char temp = arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
count++;
}
}
System.out.println(arr[i]+"字符在字符串中有"+count+"个");
}
sc.close();
}
}
解题2:好理解,效率低
package com.itheima.homework2;
import java.util.Scanner;
public class HomeWork4_2 {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc =new Scanner(System.in);
//录入要操作的字符串
String str = sc.nextLine();
//把字符串转换为字符数组
char[] arr = str.toCharArray();
for(int i=0;i<arr.length;i++){
//判断i上的元素是否在之前出现过,如果i上的元素没有出现过就进去if
if(!isHaveOne(arr,i)){
//调用方法获取i上元素出现的次数
int count = getCount(arr, arr[i]);
//打印
System.out.println(arr[i]+"字符在字符串中有"+count+"个");
}
}
sc.close();
}
//计算一个字符在数组中出现的次数
public static int getCount(char[] arr,char c){
int count =0;
for(int i = 0;i<arr.length;i++){
if(arr[i]==c){
count++;
}
}
return count;
}
//判读j索引上的值在之前是否出现过,出现过返回true,没有出现过返回false
public static boolean isHaveOne(char[] arr,int j){
for(int i=0;i<arr.length;i++){
if(arr[i]==arr[j]){
//j>i时说明j之前出现过该值,返回true
return j>i;
}
}
return false;
}
}
作者:
wdjzhuhuo
时间:
2017-3-18 23:31
来学习来学习
作者:
mrwalker
时间:
2017-3-18 23:33
有区别吗?
作者:
yangxiaosa
时间:
2017-3-18 23:34
mrwalker 发表于 2017-3-18 23:33
有区别吗?
逻辑不一样的啊,你看了吗?
作者:
精诚所至
时间:
2017-3-19 08:10
第一个有没有判断之前出现相同的字符?
第二个判断有没有出现相同字符时,判断条件应该直接写成i<j
作者:
Itheima_he
时间:
2017-3-21 00:33
使用map集合的好一点吧
作者:
yangxiaosa
时间:
2017-3-21 08:29
Itheima_he 发表于 2017-3-21 00:33
使用map集合的好一点吧
还没学map
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2