【问题标题】:foreach loop string to multiply digits togetherforeach 循环字符串将数字相乘
【发布时间】:2019-03-22 02:26:40
【问题描述】:

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

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

我不确定如何将 foreach 循环与字符串数组一起使用。

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

【问题讨论】:

  • 这是java吗?可能值得添加适当的语言标签(标签有一个特殊字段)
  • @jhnc 是的。这是java。 OP 更新
  • 无需转换成字符串。提示:1234 % 10 = 41234 / 10 = 123
  • 我的 Eclipse 编译器说:Can only iterate over an array or an instance of java.lang.Iterable(错误)
  • @JohnnyMopp 我最终会得到更大的数字,所以我需要一个更好的方法。

标签: java arrays foreach


【解决方案1】:

代替生成字符串并对其进行迭代的更好方法是获取最后一位数字并将该数字除以 10,直到剩下数字为止。示例代码:

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

希望这会有所帮助。

【讨论】:

  • 我想到了这个,但我最终得到了更大的数字(数字会改变)。所以我不能这样做。
  • @SakshamGoyal 为此,您不能使用 num 变量。您应该将“1234”直接放入字符串中。
【解决方案2】:

首先将String转换为char数组,然后遍历char数组。

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

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

【讨论】:

    【解决方案3】:

    对于 Java 8,这只是一个声明。

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

    【讨论】:

    • 这真的很复杂,我不明白这段代码(我是菜鸟)。谢谢你的回答
    【解决方案4】:

    正如没有人提到的,您也可以使用 Java-8 中引入的流 API 来实现。

    public static long findProductOfDigits(String n) {
        return n.chars()
                .map(c -> Character.getNumericValue(c))
                .mapToLong(i -> i)
                .reduce(1l, (a, b) -> a * b);
    }
    

    由于您的输入数字可以超过long(64 位),因此您的结果也可以超过int。所以我们可以使用long 作为结果,而不是int。虽然这不是最好的解决方案,因为long 结果仍然会溢出。在这种情况下,您可以考虑返回BigInteger

    但我认为主要的想法是提供使用流的另一种可能性。

    【讨论】:

    • 这真的很复杂,我不明白这段代码(我是菜鸟)。谢谢你的回答
    • 我知道这个代码对你来说似乎很复杂,因为你是一个菜鸟,如果你来自 C 或 C++ 背景,那么它可能没有意义,但 IMO 这是一个更具表现力的用Java编写代码的方法。如果您正在学习 Java,那么学习 Streams-API 也没有什么坏处。 (相信我,值得学习。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-06
    • 1970-01-01
    • 2015-08-29
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多