Java 用于将数字相乘的foreach循环字符串

Java 用于将数字相乘的foreach循环字符串,java,arrays,foreach,Java,Arrays,Foreach,我试着取一个数字,把每个数字相乘。例如:1234->1x2x4x4=24。这是我到目前为止所拥有的。爪哇 int sum = 1; int num = 1234; String str = Integer.toString(num); for(String i: str) { sum *=Integer.parseInt(i); } 我不知道如何将foreach循环与字符串数组一起使用 我知道一个字符串只是一个字符数组,为什么不可以呢 首先将字符串转换为字符数组,然后在字符数组上循环

我试着取一个数字,把每个数字相乘。例如:1234->1x2x4x4=24。这是我到目前为止所拥有的。爪哇

int sum = 1;
int num = 1234;
String str = Integer.toString(num);
for(String i: str) {
    sum *=Integer.parseInt(i);
}
我不知道如何将foreach循环与字符串数组一起使用


我知道一个字符串只是一个字符数组,为什么不可以呢

首先将字符串转换为字符数组,然后在字符数组上循环

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


首先将字符串转换为字符数组,然后在字符数组上循环

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


一种更好的方法是,取最后一个数字,将数字除以10,直到剩下数字,而不是生成字符串并对其进行迭代。示例代码:

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

希望这能有所帮助。

一种更好的方法是,取最后一个数字,除以10,直到剩下数字,而不是生成字符串并对其进行迭代。示例代码:

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

希望这能有所帮助。

对于Java8,这只是一条语句

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

对于Java8,它只是一条语句

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

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

公共静态长findProductOfDigitsString n{ 返回n.chars .mapc->Character.getNumericValuec .mapToLongi->i .reduce1l,a,b->a*b; } 由于您的输入数可以超过长64位,因此您的结果也可以超过int。因此,我们可以使用long来表示结果,而不是int。尽管这不是最佳解决方案,因为long结果仍然可能溢出。在这种情况下,可以考虑返回BigTigial.


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

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

公共静态长findProductOfDigitsString n{ 返回n.chars .mapc->Character.getNumericValuec .mapToLongi->i .reduce1l,a,b->a*b; } 由于您的输入数可以超过长64位,因此您的结果也可以超过int。因此,我们可以使用long来表示结果,而不是int。尽管这不是最佳解决方案,因为long结果仍然可能溢出。在这种情况下,可以考虑返回BigTigial.



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

这是java吗?可能值得添加适当的语言标记。有一个特殊字段用于tags@jhnc对这是java。OP Updated无需转换为字符串。提示:1234%10=4和1234/10=123我的eclipse编译器说:只能迭代java.lang.Iterable的数组或实例Error@JohnnyMopp我最终会得到更大的数字,所以我需要一个更好的方法。这是java吗?可能值得添加适当的语言标记。有一个特殊字段用于tags@jhnc对这是java。OP Updated无需转换为字符串。提示:1234%10=4和1234/10=123我的eclipse编译器说:只能迭代java.lang.Iterable的数组或实例Error@JohnnyMopp我最终会得到更大的数字,所以我需要一个更好的方法。我想到了这一点,但我最终会得到更大的数字num会改变。所以我不能这样做。@SakshamGoyal为了做到这一点,不能使用num变量。你应该把1234直接转换成字符串。我想到了这一点,但我最终得到了更大的数字num将会改变。所以我不能这样做。@SakshamGoyal为了做到这一点,不能使用num变量。你应该把1234直接转换成字符串。这真的很复杂,我不懂这段代码,我是个傻瓜。谢谢你的回答,这真的很复杂,我不懂这段代码,我是个笨蛋。谢谢你的回答,这真的很复杂,我不懂这段代码,我是个笨蛋。谢谢你的回答,我知道,对于你来说,这个代码对于你来说是复杂的,因为你是一个NoB,如果你来自C或C++背景,那么它可能毫无意义,但是IMO是在java中编写代码的一种更具表现力的方式。如果您正在学习Java,那么学习Streams API不会有什么坏处。相信我,这是值得学习的。这真的很复杂,我不懂这段代码,我是个傻瓜。谢谢你的回答,我知道,对于你来说,这个代码对于你来说是复杂的,因为你是一个NoB,如果你来自C或C++背景,那么它可能毫无意义,但是IMO是在java中编写代码的一种更具表现力的方式。如果您正在学习Java,那么学习Streams API不会有什么坏处。相信我,这是值得学习的。