Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我写了一个代码,将一个字符串中的四个数字相加,但答案比它应该的大192_Java_String_Int - Fatal编程技术网

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';
}