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