@Amir1807

В массиве слов найти слово состоящее только из цифр. Если таких слов несколько, найти второе из них?

Это учебная задачка. Java Collection Framework (за исключением java.util.Arrays) и регулярные выражения использовать нельзя. Сделал свою реализацию, но код у меня не работает, в чем может быть проблема? Может быть я не правильно конвертировал строки?
public class Application {
    public static void main(String[] args) {
        String[] words = new String[]{"qqqqqqqqqqwe", "qwer", "123", "4321"};
        StringProcessor stringProcessor = new StringProcessor();
        stringProcessor.displayNumberContainingOnlyDifferentDigits(words);
    }
}

public class StringProcessor {
    public void displayNumberContainingOnlyDifferentDigits(String[] array) {
        for (String element : array) {
            boolean isDistinct = true;
            char[] chars = String.valueOf(element).toCharArray();
            for (int i = 0; i < chars.length - 1; i++) {
                for (int j = i + 1; j < chars.length; j++) {
                    if (chars[i] == chars[j] && chars[i] >= '0' && chars[i]<='9') {
                        isDistinct = false;
                        break;
                    }
                }
                if (!isDistinct) {
                    break;
                } else if (i == chars.length - 2) {
                    System.out.println("Число, состоящее только из различных цифр: " + element);
                    return;
                }
            }
        }
        System.out.println("Таких чисел нет!");
    }
}
  • Вопрос задан
  • 472 просмотра
Решения вопроса 1
azerphoenix
@azerphoenix Куратор тега Java
Java Software Engineer
Добрый день.
В массиве слов найти слова состоящие только из цифр.

Вот, одно из возможных решений задачи:
import java.util.ArrayList;
import java.util.List;

public class Main {

    public static void main(String[] args) {
        String[] words = new String[]{"qqqqqqqqqqwe", "qwer", "123", "4321"};
        char a = 'a';
        StringProcessor stringProcessor = new StringProcessor();
        List<String> wordsContainingOnlyDigits = stringProcessor.findWordsContainingDigits(words);
        wordsContainingOnlyDigits.forEach(System.out::println);
    }

}

class StringProcessor {

    /**
     * Метод находит слова, которые состоят только из цифр
     * @param words массив слов
     * @return список слов, состоящих из цифр
     */
    public List<String> findWordsContainingDigits(String[] words) {
        List<String> wordsContainingOnlyDigits = new ArrayList<>();
        // Итерируем по массиву слов
        for (String word : words) {
            // получаем массив символов из слова
            char[] wordChars = word.toCharArray();
            // Boolean[] isDigits = new Boolean[wordChars.length];
            boolean[] isDigits = new boolean[wordChars.length];
            // итерируем по массиву символов
            for (int i = 0; i < wordChars.length; i++) {
                char currentChar = wordChars[i];
                // проверяем является ли символ цифрой
                if (Character.isDigit(currentChar)) {
                    isDigits[i] = true;
                } else {
                    // если нет, то проверяем следующее слово
                    break;
                }
            }
            // если все значения isDigits true, то значит слово состоит из цифр
            if (areAllTrue(isDigits)) {
                // добавляем слово в список
                wordsContainingOnlyDigits.add(word);
            }
        }
        return wordsContainingOnlyDigits;
    }

    /**
     * Метод проверяет boolean массив на истинность
     * @param array boolean массив
     * @return boolean
     */
    private static boolean areAllTrue(boolean[] array)
    {
        for(boolean b : array) if(!b) return false;
        return true;
    }
}


Если таких слов несколько, найти второе из них?

Не совсем понятно, что является "вторым из них".

Что касается вашего кода, то:
зачем конвертировать строку в строку и затем доставать массив символов
char[] chars = String.valueOf(element).toCharArray();

можно же:
char[] chars = element.toCharArray();

тут итерция неверная:
for (int i = 0; i < chars.length - 1; i++) {
либо так: i < chars.length; либо так: i <= chars.length - 1;

для проверки является ли символ цифрой есть метод Character.isDigit()
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
26 апр. 2024, в 18:27
200000 руб./за проект
26 апр. 2024, в 18:24
80000 руб./за проект
26 апр. 2024, в 18:00
500 руб./за проект