【问题标题】:Displaying only the final digit sum in Java仅显示 Java 中的最后一位数字总和
【发布时间】:2017-08-26 17:05:20
【问题描述】:

我目前正在尝试找出数字中的数字总和。但是,当我显示总和时遇到问题,因为它仍然显示所有以前的总和,而不仅仅是我想要的最终数字总和。

int rem = 0, sum = 0, input = 0;
Scanner k = new Scanner(System.in);
System.out.println("Enter a number");
input = k.nextInt();

while (input > 0){
    rem = input % 10;
    sum = sum + rem;
    input = input / 10; 
    System.out.println(sum); 
}

这是我上面程序的一部分。因此,例如,当我输入数字 25 时,程序先输出数字 5,然后输出 7。我理解为什么它输入数字 5,因为它是除以 10 时的余数,并且由于我在开始时初始化 sum = 0,所以由于 sum = 0 + 5,第一个总和将显示为 5。但是,我只希望显示最终数字总和。

我应该如何解决这个问题? 任何提示和建议将不胜感激。

【问题讨论】:

  • 你的输出在while循环中,所以每次添加都会重复。

标签: java


【解决方案1】:

while loop 是计算和的东西,所以你需要在计算之后打印结果

while (input > 0){
    rem = input % 10;
    sum = sum + rem;       //same as : sum += rem
    input = input / 10;    //same as : input /= 10;
}
System.out.println(sum); 

除此之外,还有一些技巧,然后删除 rem 变量,这是等价的:

while (input > 0) {            
    sum += input % 10;  //sum +=rem;   -->   sum += (input%10);
    input /= 10;
}
System.out.println(sum); 

【讨论】:

  • `sum += input % 10;'对我来说是过度破解,不会为代码增加价值
  • @JacekCz 我没有说它为代码增加了价值,只是删除一个变量并告诉我它存在,但这不是帖子的主要主题
  • @JacekCz Overhacking,真的吗?这是第一次。
  • @Gendarme 在我看来,是的。 rem(== 余数)是一个很好的变量名(给代码增加价值——程序员的意图很明确)。我的视觉最佳代码!= 尽可能短,可能有人相反。
  • @JacekCz 哎呀,我也将while 转换为for 循环,以创建一个单语句循环,无需大括号:for (; input > 0; input /= 10) sum += input % 10;。它整合了除以十直到零的循环逻辑,简单地将循环中的余数相加。如果这段代码的读者需要看到一个名为remainder(或缩写为rem)的变量来理解%是一个余数运算,那么读者需要更好地学习Java。为未受过教育的程序员编写代码并不是“好代码”。
【解决方案2】:

只需在 while 循环之后打印求和的结果。您发现该数字的每个求和结果都是因为您在 while 循环中打印了结果。 你应该这样做:

while (input > 0){
    rem = input % 10;
    sum = sum + rem;
    input = input / 10;  
}
 System.out.println(sum);

如果您的输入是 25,那么总和会显示为 7。

【讨论】:

    【解决方案3】:

    正如其他人所说,问题在于您在 while 循环中打印出 sum 变量的值。 您可以将代码更改为:

    while (input > 0) {            
        sum += input % 10;
        input /= 10;
    }
    System.out.println(sum); 
    

    或者你可以使用流:

    public static void main(String[] args) {
        //1. Step: Read the number
        Scanner scanner = new Scanner(System.in);
        System.out.println("Enter a number");
        Integer input = scanner.nextInt();
        scanner.close();
    
        //2. Step: calculate the sum with streams
        int sum = String.valueOf(input).chars().map(Character::getNumericValue).sum();
    
        //3. Step: Print out the result
        System.out.println(sum);
      }
    

    第二步基本上是这样的: 我们将整数转换为字符串,获取字符串的字符,然后使用 map 调用每个字符调用 getNumericValue 方法将字符转换回整数,然后我们调用sum方法来计算这些整数的和。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多