3 回答
TA贡献1872条经验 获得超3个赞
你乘以字符而不是数字,这就是你得到 2600 的原因。在将它们相乘之前将你的字符转换为数字。这是更新的代码。
import java.util.*;
public class Main
{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
List<Integer> list1 = new ArrayList<>();//changed here
List<Integer> list2 = new ArrayList<>();//changed here
System.out.print("Enter Distance ");
String no = sc.next();
try{
Integer.parseInt(no);
}catch(Exception e ) {
System.out.println("NumberFormatException");
return;
}
for(int i = 0 ; i < no.length() ; i++){
if(i % 2 != 0){
list1.add(Character.getNumericValue(no.charAt(i)));//changed here
}else{
list2.add(Character.getNumericValue(no.charAt(i)));//changed here
}
}
for (int c : list1 ) {
System.out.println(c);
}
int tot = 1;
for (int i=0; i < list1.size() ; i++ ) {
tot = tot * list1.get(i);
}
System.out.print(tot);
}
}
TA贡献1810条经验 获得超4个赞
您正在将Characters 与 h相乘int。所以字符会自动转换为整数,但 java 获取这些字符的 ASCII 值(例如 '0' == 48)。因为 '2' 的 ASCII 值是 50 作为整数,而 '4' 的值是 52 作为整数,所以当它们相乘时你得到 2600。
您可以通过替换“0”值来简单地将 ASCII 值转换为整数值:
tot = tot * (list1.get(i) - '0');
你可以使用 java 8 stream API 来做你想做的事:
int tot = no.chars() // Transform the no String into IntStream
.map(Integer.valueOf(String.valueOf((char) i))) // Transform the letter ASCII value into integer
.filter(i -> i % 2 == 0) // remove all odd number
.peek(System.out::println) // print remaining elements
.reduce(1, (i, j) -> i * j); // multiply all element of the list (with the first value of 1)
TA贡献1820条经验 获得超9个赞
您应该将字符转换为整数值:
for (int i=0; i < list1.size() ; i++ ) {
tot = tot * Integer.valueOf(list1.get(i).toString());
}
添加回答
举报