求和整数

时间:2011-09-29 22:10:44

标签: java sum integer

指令是:输入一个整数(32位)并对其数字求和,可能会给出一个负整数或正整数。读取负整数时,将数字相加但忽略 - 符号。

这就是我所拥有的。不知何故,当整数为负时,我无法忽略负号。

import java.util.Scanner;

public class Exercise2_6M {
    public static void main(String[] args) {
        // Create a Scanner
        Scanner input = new Scanner(System.in);

        // Enter amount
        System.out.print("Enter an integer:");
        int integer = input.nextInt();
        if (integer < 0)
            integer = -integer;

        // Calculations
        int rinteger = Math. abs (integer);
        int lastinteger = integer % 10;
        int X = integer / 10;
        int secondinteger= X % 10;
        int firstinteger = X /10;
        int finalinteger = firstinteger + secondinteger + lastinteger;


        // Display results
        System.out.println("Sum all digits in " + rinteger + " is " + finalinteger);
    }
}

3 个答案:

答案 0 :(得分:4)

当我运行它时,它会像它应该的那样忽略底片。我看到有两个问题。

  1. 当您打印出负数时,它会打印为正数。考虑存储打印的原始值。
  2. 它不适用于大数字,因为你硬编码为3位数。考虑将其置于循环中以获取所有数字。
  3. 这是我的测试结果:

    第一个是好的,第二个是好的,第三个应该说“总和-4中的所有数字是4”,最后应该说“总和12345中的所有数字是15”。

    C:\Documents and Settings\glowcoder\My Documents>java Exercise2_6M
    Enter an integer:5
    Sum all digits in 5 is 5
    
    C:\Documents and Settings\glowcoder\My Documents>java Exercise2_6M
    Enter an integer:100
    Sum all digits in 100 is 1
    
    C:\Documents and Settings\glowcoder\My Documents>java Exercise2_6M
    Enter an integer:-4
    Sum all digits in 4 is 4
    
    C:\Documents and Settings\glowcoder\My Documents>java Exercise2_6M
    Enter an integer:12345
    Sum all digits in 12345 is 132
    

答案 1 :(得分:1)

忽略负号:

int integer = Math.abs(input.nextInt());

修改 我没注意到你的代码已经这样做了。为了使代码在最后显示负号,请删除以下行:

if (integer < 0)
        integer = -integer;

因为你已经在做

int rinteger = Math. abs (integer);

然后,用rinteger替换计算部分中除integer之外的所有实例,就像这样

    // Calculations
    int rinteger = Math. abs (integer);
    int lastinteger = rinteger % 10;
    int X = rinteger / 10;
    int secondinteger= X % 10;
    int firstinteger = X /10;
    int finalinteger = firstinteger + secondinteger + lastinteger;

最后,在显示结果时,使用整数而不是rinteger来恢复减号,或者只是在integer<0时手动添加减号。

如果整数超过3位,你的代码也有缺陷,正如其他人指出的那样,但这是一个单独的问题。

要添加超过3位数,您需要一个循环。试试这个:

import java.util.Scanner;
public class Exercise2_6M
{
    public static void main(String[] args) 
    {
        // Create a Scanner
        Scanner input = new Scanner(System.in);

        // Enter amount
        System.out.print("Enter an integer: ");
        int integer = input.nextInt();

        // Calculations
        int rinteger = Math. abs (integer);
        int sum = 0;
        int i=0;

        //loop through each digit (starting from the least significant) until the end of the number
        while(rinteger / Math.pow(10,i) > 0)
        {
            sum+=getDigit(rinteger,i);
            i++;
        }


        // Display results
        System.out.println("Sum all digits in " + integer + " is " + sum);
    }

    public static int getDigit(int num, int power)
    {
        return (num % (int)Math.pow(10,power+1)) / (int)Math.pow(10,power);
    }
}

答案 2 :(得分:-1)

我不记得具体,但整数可能是一个保留的java关键字,所以你可能想要改变那个变量名(即inputInt或其他东西)。你的代码背后的想法看起来很合理......但不是:

integer = -integer;

尝试:

inputInt = (-1)*inputInt;

这应该可以解决问题。