Java 我写了一个代码,将一个字符串中的四个数字相加,但答案比它应该的大192
这是我的代码:Java 我写了一个代码,将一个字符串中的四个数字相加,但答案比它应该的大192,java,string,int,Java,String,Int,这是我的代码: import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int num = sc.nextInt(); for(int i = 0; i <= num; i++){ String calculation = sc.next();
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
for(int i = 0; i <= num; i++){
String calculation = sc.next();
String b = sc.next();
int sum = 0;
if(calculation.equals("ADD")){
int num2 = Integer.parseInt(b);
int num3 = String.valueOf(Math.abs((long)num2)).charAt(0);
int num4 = String.valueOf(Math.abs((long)num2)).charAt(1);
int num5 = String.valueOf(Math.abs((long)num2)).charAt(2);
int num6 = String.valueOf(Math.abs((long)num2)).charAt(3);
sum = num3 + num4 + num5 + num6;
}
System.out.println(sum - 192);
}
}}
import java.util.Scanner;
公共班机{
公共静态void main(字符串[]args){
扫描仪sc=新的扫描仪(System.in);
int num=sc.nextInt();
对于(int i=0;i您将1、2、3和4的ascii码相加,即202。您的代码完全错误:
- 在不进行操作的情况下,将int转换为long并再次转换为int是无用的
- 如果数字可能为负数,则只取其绝对值一次,而不是每个数字的绝对值
- num2是一个整数:1234
- valueOf((长)num2)是一个字符串:“1234”
- 字符串.valueOf((长)num2).charAt(0)是一个字符:“1”
所以,总和大致等于“1”+“2”+“3”+“4”
只需移除那些不必要的(丑陋的)投射:
或者您可以在一行中完成:
sum = b.charAt(0) + b.charAt(1) + b.charAt(2) + b.charAt(3) - 4*'0';
可能也有一种方法可以使用lambdas实现。如果您想更安全一点,请使用循环(数字并不总是有4位数字):
int和=0;
for(char c:b.toCharArray()){
如果(c>='0'&&c 192是48 x 4,48是0的ascii值。因此,字符(x)似乎在索引xi处返回整数的ascii值。如果你加1和1234,你应该得到10?如何?我想当你理解为什么num 3=49有更好的方法将字符转换为数字时,你会理解为什么最终结果不是你想要的结果-(我认为这基本上可以重复这个问题)
sum = b.charAt(0) + b.charAt(1) + b.charAt(2) + b.charAt(3) - 4*'0';
int sum = 0;
for (char c : b.toCharArray()) {
if (c >= '0' && c <= '9') sum += c - '0';
}