1

编写一个计算整数中数字之和的方法。使用以下方法标头: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
4

6 回答 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
于 2014-03-17T00:31:06.557 回答
0

你的代码对我来说很好。

我只是更改int sum = sumDigits(n)为,int sum = sumDigits(0)因为n没有声明。

要正确完成它,您只需将扫描仪放入 main 方法并将其结果(long值)传递给您的方法sumDigits(long n)

于 2014-03-17T00:27:16.837 回答
0

做提示

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

在您的main(String[] args)方法中,因为 n 当前未在 main 方法的范围内声明。

于 2014-03-17T00:32:04.033 回答
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)

于 2014-03-17T00:34:28.837 回答
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;

这似乎是您需要的方法的唯一部分。希望这会有所帮助!

于 2014-03-17T00:34:31.507 回答
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;
}
于 2014-03-17T00:35:10.993 回答