大家可以帮我使用 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/