我是一个新来的学生。我一直在尝试进行编码练习,我以为我的解决方案可以正常工作,但结果却出乎意料。我想知道我的逻辑是否有问题?


  分配:编写一个名为sumFirstAndLastDigit的方法,该方法具有一个int类型的名为number的参数。
  
  该方法需要找到参数的第一位和最后一位
  使用循环传递给该方法的数字,并返回
  该数字的第一位和最后一位。
  
  如果数字为负,则该方法需要将-1返回
  指示无效值。
  输入/输出示例
  
  
  sumFirstAndLastDigit(252); →应该返回4,第一个数字为2,最后一个数字为2,这使我们得到2 + 2,总和为4。
  sumFirstAndLastDigit(257); →应该返回9,第一个数字为2,最后一个数字为7,这使我们得到2 + 7,总和为9。
  sumFirstAndLastDigit(0); →应该返回0,因为我们只有1个数字,所以第一个数字和最后一个数字为0,这使我们得到0 + 0,并且
  总和为0。
  sumFirstAndLastDigit(5); →应该返回10,第一个数字和最后一个数字是5,因为我们只有1个数字,这使我们得到5 + 5,而
  总和是10。
  sumFirstAndLastDigit(-10); →应返回-1,因为参数为负数且需要为正数。
  
  
  注意:方法sumFirstAndLastDigit需要定义为public
  就像我们迄今为止在课程中所做的一样。
  
  注意:请勿在解决方案代码中添加主要方法。


这是我想到的(我只包含了方法本身):

public static int sumFirstAndLastDigit (int number) {

    if (number < 0) {
    return -1;
} else if (number <= 9) {
    number += number;
    return number;
}

int num = number;
int sumFirstAndLast = 0;

while (num > 0) {
    int useDigit = (num % 10);

    if ((num == number) || ((double)num < 1)) {
        sumFirstAndLast += useDigit;
    }
    num = num / 10;
} return sumFirstAndLast;
}


我认为问题可能是我的while循环中的if语句-但我不确定。我希望它检查num是否等于传递给该方法的原始数字,并检查num在while循环中运行了几次之后,检查它是否小于1(这就是为什么我将其强制转换为a双)

当我写出每个循环应该如何运行时,似乎可以正常工作,但是我一直得到错误的输出。

任何帮助,批评,经验法则等,我们将不胜感激。提前致谢。

最佳答案

你可以做这样的事情

public static int sumFirstAndLastDigit (int number) {
        int first = number;
        while (first >= 10) {
            first /= 10;
        }

        int last = number % 10;
        return (first + last) >= 0 ? (first + last) : -1;
    }

它从输入中获取第一个和最后一个数字并将它们相加,然后在返回中检查它是否为负数,然后返回-1。

09-27 11:18