сумма первой и последней цифры в целом числе - PullRequest
0 голосов
/ 16 ноября 2018

Метод, написанный в приведенном ниже коде, должен принимать целое число и приводить сумму 1-й цифры и последней цифры в целом числе.

ПРИМЕЧАНИЕ. Причина, по которой я задаю этот вопрос, хотя и узнала правильное решение, заключается в том, что мне нужно понять, почему мой код не работает, так как это делает меня лучшим программистом, пожалуйста, помогите.

public class FirstLastDigitSum {
    public static int sumFirstAndLastDigit(int number)//to add first and last 
//digits of a given interger
    {
        int firstdigit=0;
        int lastdigit=0;

        if(number>=0 && number<=9)
        {
            return number+number;
        }

        else if(number>9)
        {
            lastdigit=number%10;
            while(number>0)
            {
                number/=10;
                if(number<=9 & number>=0){
                    firstdigit=number;
                }

            }
            return firstdigit+lastdigit;
        }
        else
        return -1;
    }
    public static void main(String[] args)
    {
        System.out.println(sumFirstAndLastDigit(121));
    }
}

В приведенном выше коде, если я сохраняю число / = 10 после блока, как показано ниже

if(number<=9 & number>=0){
                        firstdigit=number;
                    }
number/=10;

тогда мой код дает правильные результаты. например, если я ввожу 121 в метод, так как первая цифра равна 1, а вторая цифра равна 1, это суммирует оба и дает мне результат 2., что абсолютно правильно

Но если оставить число / = 10 над блоком if, как показано ниже

 number/=10;
    if(number<=9 & number>=0){
                            firstdigit=number;
                        }

Тогда мой код не дает правильного результата, он дает только последнее число, равное 1.

Я совсем не понимаю, почему это происходит, может кто-нибудь объяснить, пожалуйста.

Ответы [ 3 ]

0 голосов
/ 16 ноября 2018

Давайте разбить это на две части.Получить последнюю цифру номера и получить первую цифру номера.

Первая часть проблемы проста.Это именно то, что у вас уже есть;просто возьми по модулю 10 числа.

int lastdigit = number % 10;

Вторая часть немного сложнее, но не слишком.Хотя число больше 10, разделите его на 10 (используя целые числа вы получите усечение для остатка).Одна проблема, которую я вижу в вашем решении, заключается в том, что вы продолжаете проверять значение даже после обнаружения цифры.Это означает, что если значение было 1234, вы правильно нашли 1, но затем переписали его на 0 с дополнительной итерацией цикла

int firstdigit = number;
while (firstdigit >= 10) {
    firstdigit /= 10;
}

И все, все готово.Просто верните значение.

return firstdigit + lastdigit;
0 голосов
/ 16 ноября 2018

В этом случае:

while(number>0)
{
    number/=10;
    if(number<=9 & number>=0){
        firstdigit=number;
    }
}

Обратите внимание, что вы изменили number после проверки number > 0.Это означает, что число может быть 0, когда оно достигает оператора if, и если оно равно 0, оно будет принято в качестве первой цифры, поскольку оно удовлетворяет условию number<=9 & number>=0.Например, когда вы тестируете его с 121, у вас есть эти значения для number 121, 12, 1 и 0.Последний удовлетворяет условию if и устанавливает первую цифру в 0.

В этом случае:

while(number>0)
{
    if(number<=9 & number>=0){
        firstdigit=number;
    }
    number/=10;
}

Вы изменяете number перед проверкой number > 0.Это означает, что оператор if никогда не будет иметь number = 0, а firstdigit никогда не будет 0. В качестве примера, когда вы тестируете его с 121, у вас есть эти значения для number 121, 12 и 1,Последний удовлетворяет условию if и устанавливает первую цифру в 1. После этого вы делите number на ноль, и он становится 0, и это останавливает цикл while.

0 голосов
/ 16 ноября 2018

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

int number = 12345678;
String val = String.valueOf(number);
val = val.replaceAll("(?<=\\d)\\d+(?=\\d)", "");
number = Integer.parseInt(val);
int sum = number % 10 + number / 10;
System.out.println(sum);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...