A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

/*问题:
* 键盘录入一个字符串(不包含空格),然后统计该字符串中每一个字符出现的次数
* */
解题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;
        }
}

6 个回复

倒序浏览
来学习来学习
回复 使用道具 举报
有区别吗?
回复 使用道具 举报

逻辑不一样的啊,你看了吗?
回复 使用道具 举报
第一个有没有判断之前出现相同的字符?
第二个判断有没有出现相同字符时,判断条件应该直接写成i<j
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
使用map集合的好一点吧
回复 使用道具 举报
Itheima_he 发表于 2017-3-21 00:33
使用map集合的好一点吧

还没学map
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马