@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("Таких чисел нет!");
    }
}
  • Вопрос задан
  • 81 просмотр
Решения вопроса 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()
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы