«Метод charAt (int) не определен для типа Stringchar» ошибка при использовании метода charAt - PullRequest
0 голосов
/ 10 сентября 2018
package Collections;

import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;

public class Stringchar {

    public static void main(String[] args) {

        int count =0;
        String s = "mmamma";

        //System.out.println(s.length());

        LinkedHashSet<Character> ch = new LinkedHashSet<Character>(); 
        for (int i=0; i<s.length(); i++){
            ch.add(s.charAt(i));
        }

        Iterator<Character> iterator = ch.iterator();
        while(iterator.hasNext()){

            Character st = (Character) iterator.next();
            for (int k=0; k<s.length() ; k++){
                if(charAt(k)==  st){ // Why this charAt method is not working?   
                    count = count+1;
                }

                if(count>1) {
                    System.out.println("Occurance of "+ st + "is" + count);
                }
            }                           
        }           
    }
}

Я новичок в кодировании, поэтому, возможно, глупо задавать этот вопрос. Я написал код, в котором я пытаюсь напечатать вхождения и число одинаковых символов в строке с помощью наборов, однако при этом у меня возникают некоторые проблемы. Прошу вас помочь.

Ответы [ 5 ]

0 голосов
/ 10 сентября 2018

Проблема в том, что вы пытаетесь получить персонажа в позиции персонажа. Когда вы создаете переменную st, это символ и он будет иметь длину 1; поэтому вы не можете получить charAt(index) там. Кроме того, этот метод использования LinkedHashSet не будет работать, поскольку при добавлении этих символов в LinkedHashSet он не будет добавлять каждый символ более одного раза. Вместо этого вы хотите ArrayList.

Возможно, это не самое эффективное решение, но оно достигнет того, что вы пытаетесь сделать с HashSet

String s = "mmamma";

List<Character> characterList = new ArrayList<>();
LinkedHashSet<Character> characterLinkedHashSet = new LinkedHashSet<>();

for(char c : s.toCharArray()) {
    characterLinkedHashSet.add(c);
    characterList.add(c);
}

for (Character character : characterLinkedHashSet) {
    int frequency = Collections.frequency(characterList, character);
    System.out.println("The frequency of char " + character + " is " + frequency);
}     

Итак, что это делает, создает LinkedHashSet, а также ArrayList. ArrayList хранит все символы в Collection, а LinkedHashSet хранит только один экземпляр каждого персонажа. Затем мы можем зациклить HashSet и получить частоту внутри ArrayList

0 голосов
/ 10 сентября 2018

Вы должны исправить свой код следующим образом,

while (iterator.hasNext()) {
    int count = 0;

    Character st = (Character) iterator.next();
    for (int k = 0; k < s.length(); k++) {
        if (s.charAt(k) == st) { // Why this charAt method is not working?
            count++;
        }
    }
    if (count > 1) {
        System.out.println("Occurance of " + st + " is: " + count);
    }
}

charAt метод доступен в классе String, поэтому вы должны вызывать его по ссылке String. Я сделал еще несколько улучшений в коде тоже. Объявите переменную count внутри цикла while, которая менее подвержена ошибкам. Наконец, обратите внимание, что я переместил оператор if из цикла for, поскольку он дает некоторые ложные промежуточные результаты, если он хранится внутри цикла for.

0 голосов
/ 10 сентября 2018

Здесь:

charAt(k);

в основном совпадает с

this.charAt(k);

Другими словами: вы пытаетесь вызвать метод класса, в котором находится этот код.

Я полагаю, вы намеревались сделать someStringVariable.charAt(k) вместо этого! (конечно, вы имели в виду s.charAt(), но s ужасное, ничего не говорящее имя для переменной. Ваши переменные - ваши домашние животные, дайте им имена, которые что-то значат!)

0 голосов
/ 10 сентября 2018

Полагаю, вы хотите проверить, как часто персонаж появляется в вашей строке (String s = "mmamma";).

Метод charAt() должен применяться к объекту String, поэтому вы должны изменить условие if следующим образом:

if(charAt(k) ==  st)

К этому:

if(s.charAt(k) ==  st)
0 голосов
/ 10 сентября 2018

Метод charAt не является статичным и должен применяться к данному String, если нет, как узнать, где искать xxth символ?

str.charAt(index);

Кроме того, операция print лучше выполнять после for loop, который считает случаи, если нет, то у вас будет отпечаток в каждом случае

for (int k=0; k<s.length() ; k++){
    if(s.charAt(k) ==  st){    
        count = count+1;
    }
}
if(count>1) {
    System.out.println("Occurance of "+ st + "is" + count);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...