理解方法。 Java代码

时间:2014-03-17 00:19:54

标签: java methods sum-of-digits

  

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

6 个答案:

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