有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何分别读取整数和数字

大家好,我有一个简短的问题。所以我有一个赋值,我必须创建一个递归计算整数中所有数字之和的程序。即整数123(1+2+3)=6。 我如何从第一个号码开始,一直走到没有其他号码为止? 这就是我目前所拥有的

import java.util.*;

public class sum 
{    
    /**
     * @param args
     */
    public static void main(String[] args) 
    {           
        System.out.println(sumDigits(123))   
    }

    public static  int sumDigits(int n)
    {
        while (n.hasNext())
        {
            return n.charAt(n.length) + sumDigits(n.charAt((n.length - 1)))
        }
    }
}

现在我知道我在用(hasNext和charAt,我不应该用…)但是int的等价物是什么呢


共 (3) 个答案

  1. # 1 楼答案

    您需要进行两项操作:

    获取数字的最后一位:n % 10

    获取没有最后一位的数字:n / 10

    在循环中使用这两个操作将得到数字的所有数字

  2. # 2 楼答案

    您可以使用递归来尝试:

    public int sumDigits(int n) {
        int abs = Math.abs(n), lastdigit = 0, sum = 0;
        if(n != 0) {
            lastdigit = abs % 10;
            sum = lastdigit + sumDigits(abs / 10);
        }
        return sum;
    }
    

    以下是一些测试:

    @Test
    public void sumDigits() {
        Assert.assertEquals(3, sumDigits(12));
        Assert.assertEquals(6, sumDigits(123));
        Assert.assertEquals(10, sumDigits(1234));
        Assert.assertEquals(15, sumDigits(12345));
        Assert.assertEquals(21, sumDigits(123456));
        Assert.assertEquals(28, sumDigits(1234567));
        Assert.assertEquals(28, sumDigits(7654321));
        Assert.assertEquals(28, sumDigits(-7654321));
        Assert.assertEquals(44, sumDigits(2056239854));
        Assert.assertEquals(46, sumDigits(Integer.MAX_VALUE)); // 2147483647
    }
    
  3. # 3 楼答案

    第一路:

    public static int sumDigits(int n) {                
                int validate = n % 10;
                int digit = n / 10;
                if (validate == 0) 
                    return validate;
                return validate + sumDigits(digit);
            }
    

    第二条路:

    public static int sumDigits(int n) {    
                String[] temp = Integer.toString(n).split("");
                int sum = 0;
                for (int i = 1; i < temp.length; i++)// i=1 to skip first first empty value
                    sum += Integer.parseInt(temp[i]);    
                return sum;   
             }
    

    测试:

    System.out.println("" + sumDigits(123)); // For both cases same O/p
    

    输出:

    6