Есть ли проблема с потоком логики c в моем решении? - PullRequest
0 голосов
/ 01 февраля 2020

Я очень новый студент. У меня есть упражнение по кодированию, которое я пытался выполнить, и я подумал, что мое решение было функциональным, но я получаю неожиданные результаты. Мне интересно, есть ли проблема с моей логи c?

Назначение: Напишите метод с именем sumFirstAndLastDi git с одним параметром типа int с именем number.

Метод должен найти первый и последний di git номера параметра, переданного методу, используя al oop и возвращая сумму первого и последнего di git этого числа.

Если число отрицательное, тогда метод необходимо вернуть -1, чтобы указать недопустимое значение. Пример ввода / вывода

  • sumFirstAndLastDi git (252); → должно вернуть 4, первое di git равно 2, а последнее равно 2, что дает нам 2 + 2, а сумма равна 4.

  • sumFirstAndLastDi git (257); → должно вернуть 9, первый di git равен 2, а последний равен 7, что дает нам 2 + 7, а сумма равна 9.

  • sumFirstAndLastDi git (0); → должен вернуть 0, первый di git и последний di git равны 0, поскольку у нас есть только 1 di git, что дает нам 0 + 0, а сумма равна 0.

  • sumFirstAndLastDi git (5); → должно вернуть 10, первое di git и последнее di git равно 5, поскольку у нас есть только 1 di git, что дает нам 5 + 5, а сумма равна 10.

  • sumFirstAndLastDi git (- 10); → должен возвращать -1, поскольку параметр отрицателен и должен быть положительным.

ПРИМЕЧАНИЕ. Метод sumFirstAndLastDi git должен быть определен как public stati c, как у нас до сих пор делал в курсе.

ПРИМЕЧАНИЕ: не добавляйте метод main к коду решения.

Вот что я придумал (я включил только метод само по себе):

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

Я думаю проблема может быть в том, что в моем выражении if l oop, но я не уверен. Я хочу, чтобы он проверял, равно ли num оригинальному числу, которое передается методу, и проверял, после того, как num был пройден, пока l oop несколько раз, проверил, меньше ли оно 1 (вот почему я произвел это как двойное число)

Когда я пишу, как должен работать каждый l oop, кажется, что он будет работать, но я получаю неправильный вывод.

Любая помощь, критика, эмпирические правила и др. c. с благодарностью. Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 01 февраля 2020

Вы можете сделать что-то вроде этого

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 .

0 голосов
/ 02 февраля 2020

Вы были почти там. Вам просто нужно исправить одно условие. Ниже приведена исправленная программа:

public class Main {
    public static void main(String[] args) {
        // Tests
        System.out.println(sumFirstAndLastDigit(252));
        System.out.println(sumFirstAndLastDigit(257));
        System.out.println(sumFirstAndLastDigit(0));
        System.out.println(sumFirstAndLastDigit(5));
        System.out.println(sumFirstAndLastDigit(-10));
    }

    static int sumFirstAndLastDigit(int number) {
        if (number < 0) {
            return -1;
        }
        if (number <= 9) {
            number += number;
            return number;
        }
        int num = number;
        int sumFirstAndLast = 0;
        int useDigit;
        while (num > 0) {
            useDigit = num % 10;
            if (num == number || (num > 0 && num < 10)) {
                sumFirstAndLast += useDigit;
            }
            num = num / 10;
        }
        return sumFirstAndLast;
    }
}

Вывод:

4
9
0
10
-1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...