Java - Программа, чтобы считать повторенные символы

я - студент программирования нуждался в том, чтобы сделать активность который размещая любую фразу из-за scanner, например "привет что такой", скажите мне все буквы каждого типа в принятой в доме фразе есть в общем количестве, например:

У тебя есть 1 буква h

У тебя есть 1 буква или

У тебя есть 2 буквы l

У тебя есть 2 буквы в

У тебя есть 1 буква q

У тебя есть 1 буква или

У тебя есть 1 буква и

У тебя есть 1 буква t

Я посмотрел из-за Интернета и попробовал делать мой собственный код, но не становлюсь понятным ни для чего и он не дает мне результат, который я ищу.

это мой код

import java.util.Scanner;

public class Act4 {

    public static void main(String[] args){

        Scanner lector = new Scanner(System.in);

        System.out.println("Introduce una frase: ");
        String frase = lector.nextLine();

        contarCaracteres(frase);

        lector.close();
    }

    public static void contarCaracteres(String frase) {
        int contador = 0, y = 0;
        char [] abecedario = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};

        for(int x=0;x<abecedario.length;x++) {
            for(y = 0;y<frase.length();y++) {
                if ((frase.charAt(y)==abecedario[x])){
                        contador++;

                        System.out.println("La letra "+x+" tiene "+contador+" letras");
                }
                else if((frase.charAt(y)==abecedario[x] && y !=(abecedario[x]))) {
                    System.out.println("");
                }
            }
        }
    }
}

Проблема моего кода состоит в том, что он говорит мне, который является положением буквы прямо возвращать безо мне букву и меня повторяет буква говоря одну мне из-за одной до максимальной стоимости букв.

Introduce una frase: 
hola que tal
La letra 0 tiene 1 letras
La letra 0 tiene 2 letras
La letra 4 tiene 3 letras
La letra 7 tiene 4 letras
La letra 11 tiene 5 letras
La letra 11 tiene 6 letras
La letra 14 tiene 7 letras
La letra 16 tiene 8 letras
La letra 19 tiene 9 letras
La letra 20 tiene 10 letras

Кто-то может помогать мне? спасибо заранее.

Я издаю: Я ввел азбуку [x] вместо x одинокий и уже меня достает желанная буква, но только мне остается соединять буквы в одной.

System.out.println("La letra "+abecedario[x]+" tiene "+contador+" letras");

это результат сейчас

Introduce una frase: 
hola que tal
La letra a tiene 1 letras
La letra a tiene 2 letras
La letra e tiene 3 letras
La letra h tiene 4 letras
La letra l tiene 5 letras
La letra l tiene 6 letras
La letra o tiene 7 letras
La letra q tiene 8 letras
La letra t tiene 9 letras
La letra u tiene 10 letras
3
задан 09.11.2019, 19:27
2 ответа

contador - переменная, в которой ты сохраняешь разы, что появляется каждая буква во фразе, но определив ее вне первого for "имеется" во всем цикле. То, что ты был бы должен делать, состоит в том, чтобы определять в начале первого for :

for(int x=0;x<abecedario.length;x++) {
    int contador = 0;
    // ...
}

С этим изменением показывает следующее:

Introduce una frase:
arrastrar
La letra a tiene 1 letras
La letra a tiene 2 letras
La letra a tiene 3 letras
La letra r tiene 1 letras
La letra r tiene 2 letras
La letra r tiene 3 letras
La letra r tiene 4 letras
La letra s tiene 1 letras
La letra t tiene 1 letras

ВїPor quГ© не показывает единственное сообщение для каждой буквы?

println estГЎ внутри цикла for , которые рассказывают разы, что появляется буква во фразе, тогда повторяется каждый раз, когда он находит букву. TendrГ-эксперт, который должен доставать for и помещать это despuГ©s того, чтобы считать:

for(y = 0;y<frase.length();y++) {
    // ...
}

System.out.println("La letra "+abecedario[x]+" tiene "+contador+" letras");

И это дает нам:

Introduce una frase:
arrastrar
La letra a tiene 3 letras
La letra b tiene 0 letras
La letra c tiene 0 letras
La letra d tiene 0 letras
La letra e tiene 0 letras
La letra f tiene 0 letras
La letra g tiene 0 letras
La letra h tiene 0 letras
La letra i tiene 0 letras
La letra j tiene 0 letras
La letra k tiene 0 letras
La letra l tiene 0 letras
La letra m tiene 0 letras
La letra n tiene 0 letras
La letra o tiene 0 letras
La letra p tiene 0 letras
La letra q tiene 0 letras
La letra r tiene 4 letras
La letra s tiene 1 letras
La letra t tiene 1 letras
La letra u tiene 0 letras
La letra v tiene 0 letras
La letra w tiene 0 letras
La letra x tiene 0 letras
La letra y tiene 0 letras
La letra z tiene 0 letras

, Поскольку он не интересует нас буквы, что появляются ноль раз, мы должны заключать println в if

if (contador > 0) {
    System.out.println("La letra "+abecedario[x]+" tiene "+contador+" letras");
}

И он дает нам ожидаемый результат.

Introduce una frase:
arrastrar
La letra a tiene 3 letras
La letra r tiene 4 letras
La letra s tiene 1 letras
La letra t tiene 1 letras

Другая вещь, сообщение "у буквы r есть 4 буквы", он не имеет много чувства. SerГ - в лучше, что он напечатал что-то похожее в "у фразы есть 4 буквы r".

И эта часть cГіdigo не sГ©, что достигает, и я думаю, что возможно доставать:

if((frase.charAt(y)==abecedario[x] && y !=(abecedario[x]))) {
    System.out.println("");
}
2
ответ дан 01.12.2019, 12:10
  • 1
    Большое спасибо! твой комментарий был очень полезным я смог заканчивать мой код! и ты помог мне понимать, где я ошибался, я понял, что он не был далеко от результата, но что у него было много вещей вне места. – azucarilla 10.11.2019, 04:59

Твоя ошибка зиждится на том, чтобы ты использовал тот же счетчик для всех букв, тогда то, что действительно estГЎs делая состоит в том, чтобы рассказывать, что все буквы есть у фразы, прошедшей по клавиатуре.

, Продолжая твой способ это делать, ты можешь делать вектор 26 положений 0 inicializГЎndolas все. Этот вектор marcarГЎ все разы появился каждая буква в принятой в доме цепи.

Форма mГЎs правильная делания этого может быть используя таблицу Американский стандартный код обмена информацией. Ты можешь искать на ней в эту pГЎgina или ища в google. Не если estГЎs приученный для этой таблицы, но это что-то bГЎsico ее programaciГіn. char соответствует одному nГєmero целое число, например, carГЎcter a соответствует в nГєmero 97, из-за которого, если мы отрицаем 97 у char мы darГЎ Ваш posiciГіn в векторе, который помечает нам все буквы азбуки из-за команды. (Ты можешь применять к char операции tambiГ©n).

QuedarГ - В этот cГіdigo:

import java.util.Scanner;

public class Act4 {

    public static void main(String[] args){

        Scanner lector = new Scanner(System.in);

        System.out.println("Introduce una frase: ");
        String frase = lector.nextLine();

        contarCaracteres(frase);

        lector.close();
    }

    public static void contarCaracteres(String frase) {
        int y = 0;
        int vecesLetra[];
        vecesLetra = new int[26];

        for(y = 0; y<frase.length(); y++) {
            // Está en el abecedario y no es otro carácter como un espacio
            if((int)frase.charAt(y) >= 97 && (int)frase.charAt(y)<=172)
                vecesLetra[ (int)frase.charAt(y)-97 ]++;

        }

        for(y=0 ; y < vecesLetra.length; y++){
            if(vecesLetra[y]>0){
                System.out.println("La palabra "+(char)(y+97)+" tiene "+vecesLetra[y]+" letras");
            }
        }
    }
}

С этим результатом:

Introduce una frase: 
hola que tal
La palabra a tiene 2 letras
La palabra e tiene 1 letras
La palabra h tiene 1 letras
La palabra l tiene 2 letras
La palabra o tiene 1 letras
La palabra q tiene 1 letras
La palabra t tiene 1 letras
La palabra u tiene 1 letras
1
ответ дан 01.12.2019, 12:10
  • 1
    Большое спасибо помогать из-за мне! твой код гениален и очень профессионален, но я почувствовал, что не saldrí в меня делать это таким образом, так как форма написания не достигает на моем уровне aú n в любом случае, он мне показался супер полезным и большого количества помощи explicació n на коде Американский стандартный код обмена информацией, tomaré в счете для будущего. – azucarilla 10.11.2019, 05:03