Понимание методов. Java-код

1

Напишите метод, который вычисляет сумму цифр в целых числах. Используйте следующий заголовок метода: public static int sumDigits(long n)

Проблема программирования 5.2. Page 212.

Пожалуйста, простите мою новизну программирования. Мне трудно понять и ответить на этот вопрос. Вот что я до сих пор. Пожалуйста, помогите, и если вы не возражаете, объясните, что я делаю неправильно.

import java.util.Scanner;

public class PP52v2 {

    public static void main(String [] args) {

    int sum = sumDigits(n);
    System.out.println("The sum is: " + sum);

    }//main

        public static int sumDigits(long n) {

            Scanner input = new Scanner(System.in);

            System.out.println("Enter your digits");
            n = input.nextLong();
            int num = (int)(n);
            int sum;


            while(num > 0) {

            sum += num % 10; //must mod - gives individual numbers
            num = num / 10; //must divide - gives new num

            }//loop
            return sum;
        }//sumDigits

}//class
Теги:
methods
sum-of-digits

6 ответов

2

В принципе, вы не должны обрабатывать ввод пользователя внутри метода. Вы должны передавать пользовательский ввод в свой метод. Кроме этого, все выглядит хорошо. Я сделал небольшое изменение ниже:

import java.util.Scanner;

public class PP52v2 {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        System.out.println("Enter your digits");
        long n = input.nextLong();
        int sum = sumDigits(n);
        System.out.println("The sum is: " + sum);
    }// main

    public static int sumDigits(long n) {

        int num = (int) (n);
        int sum = 0;

        while (num > 0) {

            sum += num % 10; // must mod - gives individual numbers
            num = num / 10; // must divide - gives new num

        }// loop
        return sum;
    }// sumDigits

}// class
  • 1
    Спасибо, Джоэл. > :)
0

Так как входной номер может быть положительным или отрицательным, вам нужно преобразовать его в его абсолютное значение, чтобы получить сумму цифр. Затем для каждой итерации вы добавляете остаток в общую сумму до тех пор, пока значение 0 не будет.

public static int sumDigits(long n) {
    int sum = 0;
    long quotient = Math.abs(n);
    while(quotient > 0) {
        sum += quotient % 10;
        quotient = (long) quotient / 10;
    }
    return sum;
}
0

Ваш код отлично работает для меня.

я только что изменил int sum = sumDigits(n) на int sum = sumDigits(0) так как n не было объявлено.

Чтобы сделать это правильно, вам просто нужно поместить ваш сканер в основной метод и передать результат (long значение) вашему методу sumDigits(long n).

  • 0
    Спасибо Г.Г. > :)))
  • 0
    : D Мой ГГ только что удалили :(
0
public static int sumDigits(int num) {
    int sum = 0;
    while(num > 0) {

        sum += num % 10; //must mod - gives individual numbers
        num = num / 10; //must divide - gives new number
    } //End loop
    return sum;
}

Во-первых, вы не должны читать число в этом методе, поскольку оно принимает номер в качестве параметра. Метод следует вызывать после вызова long inputNum = input.nextLong(); используя int digitSum = sumDigits((int)inputNum).

0

При написании метода у вас есть входные, выходные и побочные эффекты. Цель состоит в том, чтобы выбрать правильную комбинацию из трех, чтобы метод и программа в целом соответствовали словам, как ожидалось.

Кажется, что ваш метод должен принимать число в качестве ввода и возвращать каждую цифру, объединенную в одну конечную сумму.

Написать тест

Обычно, когда вы программируете, вы получаете код, который использует вашу воображаемую функцию. Это называется тестом. Для теста это может работать:

System.out.println("123 should be 6: " + sumDigits(123));

Выберите A Подпись

Вы уже успели подправить правильную подпись. Ницца!

Метод внедрения

Здесь, где вы немного смущены. Прочитайте, что делает каждая строка кода, и посмотрите, выполняет ли она свою цель.

// set up a scanner for reading from the command line
// and print a message that you expect digits
Scanner input = new Scanner(System.in);
System.out.println("Enter your digits");

// read the next long number from the input stream
n = input.nextLong();

Почему эта часть вашего метода? У вас уже есть номер, переданный в качестве аргумента n.

// cast the number to an integer
int num = (int)(n);

Опять же, не уверен, что это делает, помимо возможности ошибки для больших чисел.

// initialize the sum variable to 0.
int sum;

Было бы яснее явным образом установить сумму в 0. int sum = 0;

// add the last digit and truncate the number in a loop
while(num > 0) {
    sum += num % 10; //must mod - gives individual numbers
    num = num / 10; //must divide - gives new num
}

// actually return the calculated sum
return sum;

Это похоже на единственную часть метода, который вам нужен. Надеюсь, это поможет!

  • 0
    Я новичок, чтобы поддержать это, или я бы. Спасибо, что сломал это для меня.
0

Сделать подсказку

System.out.println("Enter your digits"); n = input.nextLong();

в вашем main(String[] args) методе, потому что n в настоящее время не объявляется в области основного метода.

  • 0
    Спасибо Anduril> :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню