【问题标题】:Understanding methods. Java code了解方法。 Java 代码
【发布时间】:2014-04-22 02:28:09
【问题描述】:

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

【问题讨论】:

  • 你必须解释你期望发生什么以及实际发生什么。
  • 您必须将一个数字传递给该方法,因此从main 方法获取用户输入并将其传递给sumDigits()
  • 感谢您的回复。我正在尝试编写一种计算整数中数字之和的方法。该方法是我遇到麻烦的地方。我应该使用以下方法头:public static int sumDigits(long n)。我的问题可能是因为我没有正确转换值。

标签: java methods sum-of-digits


【解决方案1】:

基本上,您不应该在方法内部处理用户输入。您应该将用户输入传递到您的方法中。除此之外,一切看起来都不错。我在下面做了些小改动:

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

【讨论】:

    【解决方案2】:

    做提示

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

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

    【讨论】:

      【解决方案3】:
      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;
      }
      

      首先,您不应该在此方法中读取数字,因为它接受数字作为参数。该方法应在使用int digitSum = sumDigits((int)inputNum) 调用long inputNum = input.nextLong(); 后调用。

      【讨论】:

        【解决方案4】:

        在编写方法时,您有输入、输出和副作用。目标是选择三者的正确组合,使方法和程序作为一个整体,符合预期。

        您的方法似乎应该将一个数字作为输入并将每个数字加在一起返回一个最终总和。

        编写测试

        通常,当您编写程序时,您会想出一些使用您想象的函数的代码。这称为测试。对于测试,这可能有效:

        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。

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

        【讨论】:

          【解决方案6】:

          你的代码对我来说很好。

          我刚刚将int sum = sumDigits(n) 更改为int sum = sumDigits(0),因为n 没有被声明。

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

          【讨论】:

          • :D 我的 GG 刚被删除 :(
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-06
          • 1970-01-01
          • 2022-09-23
          • 2014-04-01
          相关资源
          最近更新 更多