Проверяются два повторяющихся символа в одном и том же массиве, если он находится в последней позиции. Но один из персонажей находится в последней позиции - PullRequest
0 голосов
/ 10 октября 2019

Это первый раз, когда я использую Test Driven Development, и я делаю небольшой калькулятор, но из строк, чтобы сделать его более интересным. Затем строка разбивается и отдельные цифры подсчитываются.

К сожалению, я сталкиваюсь с этой проблемой при добавлении двух одинаковых номеров. Последовательность 2,3,7,5,3. Мои первые 3 сравниваются с моими последними 3, которые занимают последнюю позицию в массиве. Я постоянно проверяю, является ли этот символ последним в массиве. Но я имею в виду проверку позиционирования, а не самого фактического значения.

Обратите внимание, что строки уже обрезаны, то есть они не содержат пробелов.

Перед использованием массивов я использовал CharacterItorator. К сожалению, я не смог справиться и решил, смогу ли я получить ответ с помощью надежных массивов. Мне удалось решить другие последовательности, но с неповторяющимися числами в качестве последней цифры.

Ввод в строке: «2,3,7,5,3». Ответ должен быть 20, но в результате получается 23

public int inputIterator(String input){
        int currentCount = 0, tempCount;
        String currentString = "";
        char[] chars = input.toCharArray();
        for (char ch : chars){
            if(ch != ','){
                // it is a number
                if(ch == chars[chars.length-1]) {
                    currentString = currentString + ch;
                    tempCount = Integer.parseInt(currentString);
                    currentCount = currentCount + tempCount;
                } else {
                    currentString = currentString + ch;
                }
            } else {
                // It is a ','
                if(ch == chars[chars.length-1]){
                    tempCount = Integer.parseInt(currentString);
                    currentCount = currentCount + tempCount;
                } else {
                    if(currentString != ""){
                        tempCount = Integer.parseInt(currentString);
                        currentCount = currentCount + tempCount;
                        currentString = "";
                    } else {
                        // do nothing
                    }
                }
            }
        }
        return currentCount;
    }

В ходе теста ожидается, что результатом этой последовательности будет 20. Но получен ответ 23, что связано с повторяющейся цифрой.

РЕДАКТИРОВАТЬ: изменил мою ЛОГИКУ;Ответы, приведенные в комментариях, действительно работают - но я все еще хотел попробовать свой собственный спин

public int inputIterator(String input){
        int currentCount = 0, tempCount;
        String currentString = "";
        int loopCounter = input.length();
        char[] chars = input.toCharArray();
        for(int i = 0; i < loopCounter; i++){
            if(chars[i] != ','){
                // it is a number
                if(i == loopCounter-1) {
                    currentString = currentString + chars[i];
                    tempCount = Integer.parseInt(currentString);
                    currentCount = currentCount + tempCount;
                } else {
                    currentString = currentString + chars[i];
                }
            } else {
                // It is a ','
                if(i == loopCounter-1){
                    tempCount = Integer.parseInt(currentString);
                    currentCount = currentCount + tempCount;
                } else {
                    if(currentString != ""){
                        tempCount = Integer.parseInt(currentString);
                        currentCount = currentCount + tempCount;
                        currentString = "";
                    } else {
                        // do nothing
                    }
                }
            }
        }
        return currentCount;
    }

1 Ответ

0 голосов
/ 10 октября 2019

Тогда проблема должна быть в вашей логике. Рассматриваете ли вы использовать более короткую функцию, основанную на потоке? Например:

public int sumFromString(String input) {
    return Arrays.stream(input.split(","))
        .mapToInt(Integer::parseInt)
        .sum();
}
...