Chiziqli chiziqli chiziqli satr

Bu ma'lum bir belgi soniga qarshi chiqishi kerak, ammo u nolga qaytadi. Bu mening asosiy System.out.println chaqiruvim ("Frequency of 'e' =" + charFrequency (stringArray, 'e'));

public static int charFrequency(String[] s, char ch){
    int counter=0;

    for(int i=0; i
1
s - bu qatorlar majmuasi. s har qanday belgiga teng bo'ladimi? Yoq.
qo'shib qo'ydi muallif ajb, manba
Ishlamaydigan kod haqida so'raganingizda, har doim kutilgan xatti-harakatlar , haqiqiy xatti-harakatlar va to'liq matn// b>.
qo'shib qo'ydi muallif azurefrog, manba
Bundan tashqari, taqqoslash to'g'ri amalga oshirilgan bo'lsa ham, birinchi marta noto'g'ri topilmasa, OP usuli 0 ga qaytadi.
qo'shib qo'ydi muallif azurefrog, manba
Bundan tashqari, taqqoslash to'g'ri amalga oshirilgan bo'lsa ham, birinchi marta noto'g'ri topilmasa, OP usuli 0 ga qaytadi.
qo'shib qo'ydi muallif azurefrog, manba
Ishlamaydigan kod haqida so'raganingizda, har doim kutilgan xatti-harakatlar , haqiqiy xatti-harakatlar va to'liq matn// b>.
qo'shib qo'ydi muallif azurefrog, manba
Men sizga kodlash uchun yangi narsa uchun rahmat
qo'shib qo'ydi muallif J.Doe, manba
Men sizga kodlash uchun yangi narsa uchun rahmat
qo'shib qo'ydi muallif J.Doe, manba

6 javoblar

Belgilar qatoriga qarshi belgi tekshirasiz. Belgilangan chiziqqa nisbatan charni tekshirish kerak

if(s[i].charAt(j) ==ch){
     counter++;
 }

Va siz noto'g'ri qaytib kelasiz.

Shunday qilib, sizning kodingiz bo'ladi

   public static int charFrequency(String[] s, char ch) {
        int counter = 0;

        for (int i = 0; i < s.length; i++) {
            for (int j = 0; j < s[i].length(); j++) {
                if (s[i].charAt(j) == ch) {
                    counter++;
                }
            }
        }

        return counter;
    }
3
qo'shib qo'ydi
@DavidWallace Siz xatni tuzatish uchun rahmat.
qo'shib qo'ydi muallif ꜱᴜʀᴇꜱʜ ᴀᴛᴛᴀ, manba
@ J.Doe Endi u bir qator qatorlarni aylantiradi va shu ko'chadan ichidagi har bir qatorni oladi.
qo'shib qo'ydi muallif ꜱᴜʀᴇꜱʜ ᴀᴛᴛᴀ, manba
@ J.Doe Xatolik bor edi. Men uni tuzatdim. Qayta urinib ko'ring.
qo'shib qo'ydi muallif Dawood ibn Kareem, manba
Menga bir qator tashqariga cheklovlar berib yubordi
qo'shib qo'ydi muallif J.Doe, manba
Bu men orqali tekshiradigan qator qator
qo'shib qo'ydi muallif J.Doe, manba

Agar siz ushbu usulni turli xil belgilar uchun bir necha marta ishlatmoqchi bo'lsangiz, unda barcha tez-tez to'plash va ushbu ma'lumotlarni ishlatish maqsadga muvofiq:

public static Map charFrequency(String[] s){
    return Stream.of(s)
            .map(CharSequence::chars)
            .flatMap(x -> x.mapToObj(y -> (char)y))
            .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
}

public void test() {

    String s[] = {"banana", "apple", "orange"};
    Map frequencies = charFrequency(s);

    System.out.println(frequencies);
    System.out.println(frequencies.get('a'));
}

Chiqish:

{p=2, a=5, r=1, b=1, e=2, g=1, l=1, n=3, o=1}
5
3
qo'shib qo'ydi
Agar siz buni so'zlarga tarjima qilsangiz, men yangi boshlanuvchilar ham talablarga mos keladigan sodda operatsiyalarning oddiy kombinatsiyasini tushunib olishlari mumkin (va siz taklif qilgan kabi).
qo'shib qo'ydi muallif Tom Blodget, manba

You can do it very very easily just like this: The most fast way without any for loop

Kodning bir qatori:

return str.split(Pattern.quote(""+ch), -1).length-1;
1
qo'shib qo'ydi
Bu kabi savolni yozib olgan kishi, asosiy tamoyillarni o'rganish kerak bo'lgan yangi programmandir. Bu kabi javob yangi dasturchilar uchun foydali emas va zararli bo'lishi mumkin. Bundan tashqari, "juda qisqa javob" ni yozish sizning aql-idrokingizni namoyon qilishning bir usuli bo'lishi mumkin, ammo boshqalar boshqalarga o'xshamaydigan dasturiy ta'minotni yozish maqsadga muvofiq emas. keyinchalik osonlik bilan o'qiydi.
qo'shib qo'ydi muallif ajb, manba
Bu parentez tufayli yuz berdi. Men yaxshi ishlayotganimga ishonch hosil qildim. hech qanday muammosiz.
qo'shib qo'ydi muallif Bahramdun Adil, manba
Siz ishonganingizdan keyin uni sinab ko'rishingiz mumkin ......
qo'shib qo'ydi muallif Bahramdun Adil, manba
@DavidWallace OK, sizga katta rahmat. Buning uchun ko'p usullar bo'lishi mumkin. Biroq, biron bir muammoni juda qisqa javob berishi mumkinligini bilish uchun yaxshi amaliyotga ega bo'lishning turli usullarini qo'llashi mumkin. Bu xususiyatni o'zgartirishimiz kerak.
qo'shib qo'ydi muallif Bahramdun Adil, manba
@DavidWallace Biz har doim mumtoz echimlarga o'tishimiz kerak emas, bizda yangi narsalar bo'lishi mumkin.
qo'shib qo'ydi muallif Bahramdun Adil, manba
Ha, siz eng to'g'ri yo'ldasiz. Lekin savolni bergan odam javob berishi mumkin bo'lgan yana bir qancha asosiy javob (bu javobdan tashqari) boshqa javoblardan ko'proq narsani o'rganishi mumkin bo'lgan boshqa narsalar haqida ko'proq bilish uchun yaxshi joy bo'lishi mumkin. Umid qilamanki, siz meni tushunasiz.
qo'shib qo'ydi muallif Bahramdun Adil, manba
@MichaelMarkidis Siz haqsiz. Rahmat! bu yaxshi niyat. Yaxshi!
qo'shib qo'ydi muallif Bahramdun Adil, manba
OK, barcha tahrirlaringizdan keyin nihoyat ishlaydi. Mening fikrimcha, bu uni amalga oshirishning yomon yo'lidir - Suresh Attaning echimi juda yaxshi. Lekin men pastga tushdim. Jiddiy bo'lsa-da, bu ibtidoiy narsa, o'ngdan birinchi marta </​​i> ga to'g'ri kelishi kerak bo'lgan narsadir, keyinchalik uch tahrirdan keyin emas. .
qo'shib qo'ydi muallif Dawood ibn Kareem, manba
return str.split ("s", -1) foydalanishingiz mumkin .length-1; (str + kodi> qarang: docs.oracle.com/javase/7/docs/api/java/lang/…
qo'shib qo'ydi muallif Michael Markidis, manba
Sizning kodingiz ham tuzilmaydi.
qo'shib qo'ydi muallif Michael Markidis, manba

Nega har doim o'zingizning looping o'rniga foreachdan foydalanasiz?

private static int findFrequency(String[] array, character character){
    int totalCount = 0;
    for(int i=0;i
1
qo'shib qo'ydi
@PratikAmbani Bu Mayklning savoliga javob bermaydi. Bo'lsa-da, siz har doim ham har safar foydalanayotgan bo'lsangiz ham, har doim "aylanasiz".
qo'shib qo'ydi muallif ajb, manba
toCharArray bo'lishi mumkin?
qo'shib qo'ydi muallif Dawood ibn Kareem, manba
Nima demoqchisiz, "har safar ko'chaga o'ralish o'rniga?"
qo'shib qo'ydi muallif Michael Markidis, manba
Bilaman, lekin uning so'rovi allaqachon muhokama qilinganidek, bu faqat taklif edi.
qo'shib qo'ydi muallif Pratik Ambani, manba
@Michael ushbu havolani havola qiladi, stackoverflow.com/q/256859/7212399
qo'shib qo'ydi muallif Pratik Ambani, manba

Buni qanday bajarishingiz mumkin:

public static int charFrequency(String[] stringArray, char ch)
{
    int counter = 0;

   //loop through each String in the array
    for (int i = 0; i < stringArray.length; i++)
    {
        String s = stringArray[i];

       //in case the string is null
        if (s != null)
        {
           //loop through each char in the string
            for (int j = 0; j < s.length(); j++)
            {
                if (s.charAt(j) == ch)
                    counter++;
            }
        }
    }
    return counter;
}
0
qo'shib qo'ydi

Dmitriy Gorkovetsning javobidan versiyasi uchun an'anaviy : :

public static void main(String[] args) throws Exception {
    int freq[] = getFrequency(new String[] {"banana", "apple", "orange"});
    System.out.println("Frequency of a : "+freq['a']);
    System.out.println("Frequency of p : "+freq['p']);
}

static int[] getFrequency(String inputs[]) {
    int op[] = new int[150];//The max ascii is of 'z' which is 122.
    for (String ip : inputs) {
        char c[] = ip.toCharArray();
        for (char x : c) {
            op[x]++;
        }
    }
    return op;
}

Chiqish:

Frequency of a : 5
Frequency of p : 2
0
qo'shib qo'ydi
150 kodi 65536 bo'lishi kerak, chunki char 0 dan 65535 oralig'ida. (UTF-16 kodlari bitta kod bo'lagi sifatida kodlanganligiga qaramay, «z» dan juda ko'p harflar mavjud. )
qo'shib qo'ydi muallif Tom Blodget, manba
@TomBlodget Men butunlay rozi bo'ldim! Men namuna uchun faqat 150 nafar tutdim. Va eng real hayot senarisida men chastotani topish uchun kerak bo'lgan joyga yetib keldim, kirish satrlari alpha numeric va keng tarqalgan ishlatiladigan belgilar bilan 150 o'lchamli
qo'shib qo'ydi muallif Anand Undavia, manba