用下面的代码编写的方法需要取整数,并将结果的第一个数字和最后一个数字相加。

注意:我问这个问题的原因虽然我知道正确的解决方案,但我需要了解为什么我的代码也无法正常工作,因为这使我成为一个更好的程序员,请提供帮助。

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));
    }
}


在上面的代码中,如果我在if块之后保留数字/ = 10,如下所示

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


那么我的代码给出了正确的结果。就像如果我向方法中输入121的第一位数字是1而第二位数字是1一样,这两个数字都相加并得到2。这是绝对正确的

但是如果保持number / = 10高于if块,如下所示

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


然后我的代码没有给出正确的结果,它只给出了最后一个数字1。

我完全不了解为什么会发生这种情况,任何人都可以解释一下。

最佳答案

让我们将其分为两个部分。获取数字的最后一位,并获取数字的第一位。

问题的第一部分很容易。它正是您已经拥有的;只需取数字的10为模。

int lastdigit = number % 10;


第二部分有点棘手,但不要太多。当数字大于10时,将其除以10(使用整数,其余部分将被截断)。我在您的解决方案中看到的一个问题是,即使发现了数字,您仍会继续检查该值。这意味着如果值是1234,则可以正确找到1,然后通过额外的循环迭代将其覆盖为0

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


就是这样,您就完成了。只需返回值即可。

return firstdigit + lastdigit;

关于java - 整数的第一位和最后一位的和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53339113/

10-09 10:09