第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

查找給定字符串中每個字符的出現(xiàn)

查找給定字符串中每個字符的出現(xiàn)

holdtom 2023-04-19 10:12:05
“我想查找并打印給定字符串中每個字符的出現(xiàn),我已經(jīng)建立了自己的邏輯,但存在一些問題。例如,如果我將輸入作為“ JAVA”輸入。 我的程序產(chǎn)生的輸出將是J 1A 2V 1A 1預期輸出:    J 1    A 2    V 1我不想再打印 A 了。我希望你們都能明白我的代碼中有什么問題?!睂?java.util.Scanner;公共類 FindOccuranceOfCharacter {public static void main(String[] args) {    // TODO Auto-generated method stub    String x;    Scanner input = new Scanner(System.in);    System.out.println("Enter a string");    x = input.nextLine();    x = x.toUpperCase();    int size = x.length();    for(int i =0;i<size;i++) {        int count=1;        char find = x.charAt(i);        for(int j=i+1;j<size;j++) {            if(find == x.charAt(j)) {                count++;            }        }        System.out.printf("%c\t%d",x.charAt(i),count);        System.out.println();           }}}
查看完整描述

3 回答

?
萬千封印

TA貢獻1891條經(jīng)驗 獲得超3個贊

您的代碼以這種方式打印的原因是您的循環(huán)打印給定索引的每個字符(和后續(xù)匹配項)。你真的需要用一個循環(huán)將字符和計數(shù)存儲在一個數(shù)據(jù)結構中,然后用第二個循環(huán)顯示計數(shù)。ALinkedHashMap<Character, Integer>非常適合您的用例(因為它保留了鍵插入順序,不需要額外的邏輯來恢復輸入順序)。我將進行的其他更改包括使用String.toCharArray()for-each循環(huán)。

Map<Character, Integer> map = new LinkedHashMap<>();

for (char ch : x.toUpperCase().toCharArray()) {

? ? map.put(ch, map.getOrDefault(ch, 0) + 1);

}

for (char ch : map.keySet()) {

? ? System.out.printf("%c\t%d%n", ch, map.get(ch));

}

我用xequal測試JAVA并得到了(按要求)


J? ?1

A? ?2

V? ?1

喜歡,

查看完整回答
反對 回復 2023-04-19
?
森林海

TA貢獻2011條經(jīng)驗 獲得超2個贊

使用 hashMap 可以很容易地累積出現(xiàn)的次數(shù),并且可以輕松地打印迭代 HashMap。


這是代碼:


public class FindOccuranceOfCharacter {


public static void main(String[] args) {


    String x;

    Scanner input = new Scanner(System.in);

    System.out.println("Enter a string");

    x = input.nextLine();

    HashMap<Character,Integer> occurance = new HashMap<Character,Integer>();


    x = x.toUpperCase();

    int size = x.length();

    for(int i =0;i<size;i++) {

        int count=1;

        char find = x.charAt(i);


        occurance.put(find, occurance.getOrDefault(find, 0) + 1);


    }


    for (Character key : occurance.keySet()) {

        Integer value = occurance.get(key);

        System.out.println("Key = " + key + ", Value = " + value);

    }   

}


查看完整回答
反對 回復 2023-04-19
?
回首憶惘然

TA貢獻1847條經(jīng)驗 獲得超11個贊

這不是最佳解決方案,但我已嘗試盡可能少地更改您的代碼:


public static void main(String args[]) {

    Scanner input = new Scanner(System.in);

    System.out.println("Enter a string");

    // use a StringBuilder to delete chars later on

    StringBuilder x = new StringBuilder(input.nextLine().toUpperCase());

    for(int i=0;i<x.length();i++) {

        int count=1;

        char find = x.charAt(i);


        // go through the rest of the string from the end so we do not mess up with the index

        for(int j=x.length()-1;j>i;j--) {

            if(find == x.charAt(j)) {

                count++;

                // delete counted occurences of the same char

                x.deleteCharAt(j);

            }

        }


        System.out.printf("%c\t%d",x.charAt(i),count);

        System.out.println();       

    }

}

我更喜歡的Java 流如下所示:


input.nextLine().toUpperCase().chars()

        .mapToObj(i -> (char) i)

        .collect(Collectors.groupingBy(Function.identity(), LinkedHashMap::new, Collectors.counting()))

        .forEach((k, v) -> System.out.println(k + "\t" + v));


查看完整回答
反對 回復 2023-04-19
  • 3 回答
  • 0 關注
  • 178 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號