编写一个计算整数中数字之和的方法。使用 以下方法标题:
public static int sumDigits(long n)
编程问题5.2。第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
答案 0 :(得分: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)
您的代码适用于我。
我刚刚将int sum = sumDigits(n)
更改为int sum = sumDigits(0)
,因为n
未被声明。
要正确完成,您只需将扫描仪放入main方法,并将结果(long
值)传递给方法sumDigits(long n)
。
答案 2 :(得分:0)
做提示
System.out.println("Enter your digits");
n = input.nextLong();
在main(String[] args)
方法中,因为n当前未在main方法的范围内声明。
答案 3 :(得分: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)
后,应调用此方法。
答案 4 :(得分:0)
编写方法时,您有输入,输出和副作用。目标是选择三者的正确组合,使方法和程序作为一个整体,按预期的方式进行。
看起来您的方法应该将一个数字作为输入,并将每个数字加在一起作为一个最终总和。
撰写测试
通常在编程时,你会想出一些使用你想象的函数的代码。这称为测试。对于测试,这可能有效:
System.out.println("123 should be 6: " + sumDigits(123));
选择签名
您已经设法纠正了正确的签名。尼斯!
实施方法
在这里,你有点困惑。仔细阅读每行代码的作用,看看它是否实现了您的目标。
// 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;
这似乎是您需要的方法的唯一部分。希望这有帮助!
答案 5 :(得分: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;
}