Java加法给出错误答案

Java加法给出错误答案,java,Java,我试图把四个整数相加,即4+3+2+1,但得到的值是202 class Task3{ public static void main (String args[]){ String x=(args[0]); int I = Integer.parseInt (x); char c1 = x.charAt(0); char c2 = x.charAt(1); char c3 = x.charAt(2); char c4 = x.charAt(3

我试图把四个整数相加,即4+3+2+1,但得到的值是202

class Task3{
public static void main (String args[]){
    String x=(args[0]);
    int I = Integer.parseInt (x);   
    char c1 = x.charAt(0);
    char c2 = x.charAt(1);
    char c3 = x.charAt(2);
    char c4 = x.charAt(3);
    System.out.println("First and last digit is: " + c1 +"," + c4);
    if (c1 > c4)
        System.out.println("The first digit is larger");
    else
        System.out.println("The second digit is larger");
    int sum = c1 + c2 + c3 + c4;
    System.out.println(sum);
}

}这是因为您添加的是UNICODE代码点的数值,而不是由相应字符表示的数字

要从字符代码中获取数字,请调用character.digitc1,10-ten表示需要十进制数字

int c1 = Character.digit(x.charAt(0), 10);
int c2 = Character.digit(x.charAt(1), 10);
int c3 = Character.digit(x.charAt(2), 10);
int c4 = Character.digit(x.charAt(3), 10);
替换字符c1=x.charAt0;使用Character.getNumericValuex.charAt0更改

int sum = c1 + c2 + c3 + c4;


因为c1、c2、c3、c4都是字符,所以一个数字表示。4被取为'4',基本上是ASCII值,所以要得到4而不是'4',你需要从c1、c2、c3、c4中减去'0',所以减去4*'0',你试图求和字符ASCII码,而不是数字值。您必须检索每个字符的对应数字,然后计算加法结果:

class Task3
{
  public static void main (String args[])
  {
    String x=(args[0]);
    int I = Integer.parseInt (x);   
    char c1 = x.charAt(0);
    char c2 = x.charAt(1);
    char c3 = x.charAt(2);
    char c4 = x.charAt(3);
    int i1 = Character.digit(c1, 10);
    int i2 = Character.digit(c2, 10);
    int i3 = Character.digit(c3, 10);
    int i4 = Character.digit(c4, 10);
    System.out.println("First and last digit is: " + i1 +"," + i4);
    if (i1 > i4)
      System.out.println("The first digit is larger");
    else
      System.out.println("The second digit is larger");
    int sum = i1 + i2 + i3 + i4;
    System.out.println(sum);
  }

}

我猜你通过了4321或类似的课程

c1不是数字1,而是表示字符“1”的Unicode数字,该字符在十六进制中实际上是31。最新添加的是添加这些Unicode数字


有关unicode数字到字符的列表,以及Java中字符的更多详细信息,请参阅。

错误输出的原因其他人已经解释了获得正确输出的方法之一

int sum =0;
while(I>0){
    int rem = I%10;
    sum+=rem;
    I = I/10;
}
System.out.println(sum);

因为这是它们的值之和。请记住,求“4”“3”“2”和“1”ascii值的和,而不是它们的值4”“3”“2或1。在Sumohh之前解析它!!您正在尝试添加字符以获得更大的整数值。您知道c1+c2+c3+c4加起来是什么吗?。它们将为您提供字符的ascii值。@marounnaroun不是ascii值;UTF-16代码单位值。很酷的方法,但你应该解释为什么他必须减去4*‘0’:@kocko,如果你必须解释的话,那就是一个肮脏的黑客。我不知道什么是酷代码,但在我工作的地方,我们喜欢看到每一行代码都解释自己。
int sum =0;
while(I>0){
    int rem = I%10;
    sum+=rem;
    I = I/10;
}
System.out.println(sum);