Напишите метод, который вычисляет сумму цифр в целых числах. Используйте следующий заголовок метода:
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
В принципе, вы не должны обрабатывать ввод пользователя внутри метода. Вы должны передавать пользовательский ввод в свой метод. Кроме этого, все выглядит хорошо. Я сделал небольшое изменение ниже:
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
Так как входной номер может быть положительным или отрицательным, вам нужно преобразовать его в его абсолютное значение, чтобы получить сумму цифр. Затем для каждой итерации вы добавляете остаток в общую сумму до тех пор, пока значение 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;
}
Ваш код отлично работает для меня.
я только что изменил int sum = sumDigits(n)
на int sum = sumDigits(0)
так как n
не было объявлено.
Чтобы сделать это правильно, вам просто нужно поместить ваш сканер в основной метод и передать результат (long
значение) вашему методу sumDigits(long n)
.
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)
.
При написании метода у вас есть входные, выходные и побочные эффекты. Цель состоит в том, чтобы выбрать правильную комбинацию из трех, чтобы метод и программа в целом соответствовали словам, как ожидалось.
Кажется, что ваш метод должен принимать число в качестве ввода и возвращать каждую цифру, объединенную в одну конечную сумму.
Написать тест
Обычно, когда вы программируете, вы получаете код, который использует вашу воображаемую функцию. Это называется тестом. Для теста это может работать:
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;
Это похоже на единственную часть метода, который вам нужен. Надеюсь, это поможет!
Сделать подсказку
System.out.println("Enter your digits"); n = input.nextLong();
в вашем main(String[] args)
методе, потому что n в настоящее время не объявляется в области основного метода.