java - 控制结构,重复练习: How to get the sum of the digits of a number?

标签 java console-application

大家可以帮我使用 for 循环而不是使用字符串方法来回答这个练习吗?

编写一个程序,提示用户输入一个整数,然后输出该数字的各个数字以及数字之和。例如,程序应将3456的个位数输出为3 4 5 6,和为18,将-2345的个位数输出为2 3 4 5,和为14。

这是代码:

package MyPackage;

import java.util.*;

public class Integer 
{
    public static void main(String args[])
    {   
       Scanner console = new Scanner (System.in);
       int input;
       int sum = 0;
       int num1 = 0;
       int counter = 1;
       String num = "";

       System.out.print("enter a number: ");
       input = console.nextInt();

       if (input == (-input))       
           {

               input = input * (-1);
               num = String.valueOf(input);
               num1 = num.length();
               System.out.print("the digits of " + input + " are: ");

               for (int i = 0; i < num1; i++ )
               {
                  String var = num.substring(i,counter);
                  int var1 = Character.getNumericValue(var.charAt(0));
                  System.out.print(var + " ");
                  sum = sum + var1;
                  counter++;
               }
               System.out.println();
               System.out.println("the sum is: " + sum);

         }

        else                    
            {   
               num = String.valueOf(input);
               num1 = num.length();
               System.out.print("the digits of " + input + " are: ");

               for (int i = 0; i < num1; i++ )
               {
                   String var = num.substring(i,counter);
                   int var1 = Character.getNumericValue(var.charAt(0));
                   System.out.print(var + " ");
                   sum = sum + var1;
                   counter++;
               }
               System.err.println();
               System.out.println("the sum is: " + sum);

         }
  }
}

最佳答案

从右到左迭代所有数字非常简单 - 只需除以 10 并保留余数即可。 由于您需要从从左到右打印它们,但似乎对内存使用没有任何限制,因此您可以将它们保留在列表中,然后向后打印:

int num = ...; // inputed from user
List<Integer> digits = new LinkedList<>();
int sum = 0;

// Extract the digits and the sum
while (num != 0) {
    int digit = num % 10;
    digits.add (digit);
    sum += digit;
    num /= 10;
}

// Print backwards:
System.out.print ("The digits are: ");
for (int i = digits.size() - 1; i >= 0; --i) {
    System.out.print (digits.get(i) + " ");
}
System.out.println();
System.out.println("Their sum is: " + sum);

关于java - 控制结构,重复练习: How to get the sum of the digits of a number?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24456624/

相关文章:

java - 应用程序版本未显示在 Spring Boot banner.txt 中

android - 从 Play 控制台删除应用程序

python - Inno Setup runhidden 标志不适用于从批处理文件执行的控制台应用程序

mysql - 将 mysqldump 的详细输出记录到控制台和文本文件

c++ - 如何在 C++ 控制台应用程序中控制光标位置?

java - Scala 如何将模拟对象注入(inject) ScalatraFlatSpec

java - 使用字典和散列破解密码

java - Maven -Dtest=* test,似乎没有运行所有测试

java - 如何将当前数据库更改为另一个?

c# - .net 应用程序在通过计划任务触发时失败