foreach循环字符串将数字相乘

时间:2019-03-22 02:26:40

标签: java arrays foreach

我正在尝试取一个数字并将每个数字相乘。例如:1234-> 1x2x3x4 =24。这是我到目前为止的内容。 (JAVA)

int sum = 1;
int num = 1234;
String str = Integer.toString(num);
for(String i: str) {
    sum *=Integer.parseInt(i);
}

我不确定如何在字符串数组中使用foreach循环。

我知道字符串只是一个字符数组,所以为什么不应该这样做呢?

4 个答案:

答案 0 :(得分:3)

执行此操作而不是生成字符串并进行迭代的更好方法是采用最后一位数字并将数字除以10,直到剩下数字为止。示例代码:

int product = 1;
int num = 1234;
while(num > 0)
{
    product *= num % 10;
    num /= 10;
}

希望这会有所帮助。

答案 1 :(得分:1)

首先将String转换为char数组,然后在char数组上循环。

for (char ch: str.toCharArray()) {
     sum *= Character.getNumericValue(ch);
}

for (char ch: str.toCharArray()) {
     sum *= Integer.parseInt(String.valueOf("" + ch));
}

答案 2 :(得分:0)

对于Java 8,这只是一条语句。

int value = Integer.toString(1234).chars()
            .map(c -> Character.getNumericValue(c))             
            .reduce((a, b) -> a * b).getAsInt();

答案 3 :(得分:0)

没有人提到,您也可以使用Java-8中引入的stream-API来做到这一点。

table_b.id

由于您的输入数字可以超过table_b.id(64位),因此您的结果也可以超过public static long findProductOfDigits(String n) { return n.chars() .map(c -> Character.getNumericValue(c)) .mapToLong(i -> i) .reduce(1l, (a, b) -> a * b); } 。因此,我们可以将long用作结果,而不是int。尽管这不是最佳解决方案,因为long的结果仍然会溢出。在这种情况下,您可以考虑返回int

但是我认为主要思想是为使用流提供其他可能性。