Java 整数中第一位和最后一位的总和

Java 整数中第一位和最后一位的总和,java,integer,Java,Integer,下面代码中编写的方法需要取整数以及整数中第一位和最后一位的结果和 注意:虽然我知道了正确的解决方案,但我问这个问题的原因是我需要理解为什么我的代码不能工作,因为这使我成为一个更好的程序员,请帮助 public class FirstLastDigitSum { public static int sumFirstAndLastDigit(int number)//to add first and last //digits of a given interger {

下面代码中编写的方法需要取整数以及整数中第一位和最后一位的结果和

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

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));
    }
}
公共类FirstLastDigitSum{
公共静态int-sumFirstAndLastDigit(int-number)//添加第一个和最后一个
//给定整数的位数
{
int firstdigit=0;
整数位数=0;
如果(数字>=0&&number9)
{
lastdigit=数字%10;
而(数量>0)
{
数目/=10;
如果(数字=0){
第一位数=数字;
}
}
返回第一位数字+最后一位数字;
}
其他的
返回-1;
}
公共静态void main(字符串[]args)
{
System.out.println(sumFirstandLastDigital(121));
}
}
在上面的代码中,如果我在if块后面保持number/=10,如下所示

if(number<=9 & number>=0){
                        firstdigit=number;
                    }
number/=10;
 number/=10;
    if(number<=9 & number>=0){
                            firstdigit=number;
                        }
if(数字=0){
第一位数=数字;
}
数目/=10;
然后我的代码给出了正确的结果。比如,如果我在方法中输入121,第一个数字是1,第二个数字是1,它将两者相加,并给出结果2。这是绝对正确的

但是如果将number/=10保持在if块上方,如下所示

if(number<=9 & number>=0){
                        firstdigit=number;
                    }
number/=10;
 number/=10;
    if(number<=9 & number>=0){
                            firstdigit=number;
                        }
number/=10;
如果(数字=0){
第一位数=数字;
}
然后我的代码没有给出正确的结果,它只给出最后一个数字,即1


我一点也不明白为什么会发生这种情况。请任何人解释一下。

这不是您问题的直接解决方案,但我们可以使用正则表达式和基本方法相当轻松地处理此问题:

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);
int number=12345678;
String val=String.valueOf(number);

val=val.replaceAll(“(?这不是您问题的直接解决方案,但我们可以使用正则表达式和基本方法非常轻松地处理此问题:

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);
int number=12345678;
String val=String.valueOf(number);

val=val.replaceAll(“(?让我们把它分成两部分。获取数字的最后一位,然后获取数字的第一位

问题的第一部分很简单,这正是你已经得到的,只需要取这个数的模10

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

int firstdigit = number;
while (firstdigit >= 10) {
    firstdigit /= 10;
}
就这样,完成了。只需返回值

return firstdigit + lastdigit;

让我们把它分成两部分。得到数字的最后一位,和数字的第一位

问题的第一部分很简单,这正是你已经得到的,只需要取这个数的模10

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

int firstdigit = number;
while (firstdigit >= 10) {
    firstdigit /= 10;
}
就这样,完成了。只需返回值

return firstdigit + lastdigit;
在这种情况下:

while(number>0)
{
    number/=10;
    if(number<=9 & number>=0){
        firstdigit=number;
    }
}
while(number>0)
{
    if(number<=9 & number>=0){
        firstdigit=number;
    }
    number/=10;
}
在检查
number>0
之前更改
number
。这意味着if语句永远不会有
number=0
,并且第一个数字永远不会是0。例如,当您使用121测试它时,您有
number
121
12
1
的此值。最后一个满足e if语句,并将第一位数字设置为1。然后将
数字除以0,它变为0,并在
循环时停止

在这种情况下:

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

在检查
number>0
之前更改
number
。这意味着if语句永远不会有
number=0
,并且第一个数字永远不会是0。例如,当您使用121测试它时,您有
number
121
12
1
的此值。最后一个满足e if语句,并将第一个数字设置为1。然后将
数字
除以0,它变为0,并在
循环时停止

如果数字小于0,则返回-1。否则,最后一个数字可以通过模10找到,第一个数字可以通过除以10找到,直到该数字小于10为止

public static int sumFirstAndLastDigit(int number) {
    if (number < 0) {
        return -1;
    }

    int last = number % 10;
    int first = number;
    
    while (first >= 10) {
        first = first / 10;
    }

    return first + last;
}
public static int sumFirstAndLastDigit(整数编号){
如果(数字<0){
返回-1;
}
int last=数字%10;
int first=数字;
而(第一个>=10){
第一个=第一个/10;
}
返回第一个+最后一个;
}

如果数字小于0,则返回-1。否则,最后一个数字可以通过模数10找到,第一个数字可以通过除以10找到,直到该数字小于10为止

public static int sumFirstAndLastDigit(int number) {
    if (number < 0) {
        return -1;
    }

    int last = number % 10;
    int first = number;
    
    while (first >= 10) {
        first = first / 10;
    }

    return first + last;
}
public static int sumFirstAndLastDigit(整数编号){
如果(数字<0){
返回-1;
}
int last=数字%10;
int first=数字;
而(第一个>=10){
第一个=第一个/10;
}
返回第一个+最后一个;
}

一次迭代次数太多。请尝试
while(number>9)
而不是
while(number>0)
非常感谢while(number>9)的响应工作了。但我想知道为什么上面的代码不能用number/=10工作;上面的if和在ifuhhmm之后工作…因为有一次迭代太多了…你进入最后一次迭代,number=1,除以10,然后是0,因为它是一个整数,