java查询未通过测试用例

java查询未通过测试用例,java,eclipse,algorithm,Java,Eclipse,Algorithm,问题是: DoSoD数是数字和的除数。例如,如果你 数字12,其数字之和为1+2=3。12可被3整除 因此它是一个DoSoD数。根据同样的推理,11不是一个数字 DoSoD编号,但最接近11的DoSoD编号为12。写一篇 将整数n作为输入并打印DoSoD的程序 最接近但不小于n的数字。样本输入-1 16预期 输出18样本输入20预期输出20 这是我的代码: class Dosod{ public static void main(String args[]){ Scann

问题是:

DoSoD数是数字和的除数。例如,如果你 数字12,其数字之和为1+2=3。12可被3整除 因此它是一个DoSoD数。根据同样的推理,11不是一个数字 DoSoD编号,但最接近11的DoSoD编号为12。写一篇 将整数n作为输入并打印DoSoD的程序 最接近但不小于n的数字。样本输入-1 16预期 输出18样本输入20预期输出20

这是我的代码:

class Dosod{
    public static void main(String args[]){
        Scanner s=new Scanner(System.in);
        int n=s.nextInt();
        int temp=0,x;
        x=n;
        int y=n;
        while(n>0){
            x=n%10;
            temp+=x;
            n=n/10;
        }
        if(y%temp==0){
             System.out.print(y);
        }else if(y%temp!=0){
           y=y+2;
            System.out.println(y);
        }


    }
}

但是它没有通过测试用例。有人能帮忙吗?

您需要更新您的else分支。您最近的号码可以是当前号码的前向或后向。但由于问题陈述明确指出最近值应该大于输入值。您可以编写一个简单的while循环,将输入值递增,直到值mod
sumOfDigits
为0

public static void main(String args[]) {
        Scanner s = new Scanner(System.in);
        int n = s.nextInt();
        int y = n;
        int temp = 0;       
        temp = sumOfDigits(n);

        if (y % temp == 0) {
            System.out.print(y);
        } 
        else
        {
            int yforward = y+1;

            while(yforward % sumOfDigits(yforward) !=0)
                yforward++;

            System.out.println(yforward);
        }


    }

    static int sumOfDigits(int n)
    {
        int temp = 0;
        while (n > 0) {
            int x = n % 10;
            temp += x;
            n = n / 10;
        }

        return temp;
    }

正如@Inan所提到的,您需要更新您的else分支,但是您也可以通过一段时间
语句来改进您的流控制,它非常清晰,而且肯定更加优雅。还为您的研究案例添加了另一种求和方法。另外,如果您在需要时“询问”输入,这样用户就可以看到发生了什么。最后但同样重要的是(如果我太严格了,我很抱歉),如果变量名具有代表性,这是一种很好的做法,这样对程序员来说更具可读性。i、 e.
int inputNumber=s.nextInt()


多索德:
输入/输出示例:
工作流程: 如果您仍有任何疑问,请检查此工作流:


文件:


请附上您的测试用例好吗?我不知道!什么是测试用例?它们本身就是有问题的
class Dosod{
    public static void main(String args[]) {
        System.out.print ( "Please enter a number: " );
        Scanner s = new Scanner(System.in);
        
        int inputNumber = s.nextInt();        
        
        while ( inputNumber % sumOfDigits ( inputNumber ) != 0 )
        {
            inputNumber++;
        }
        System.out.println ( "dosod: " + inputNumber );

    }

    static int sumOfDigits(int number)
    {
        String digits = new Integer(number).toString();
        int sum = 0;
        for (char c: digits.toCharArray())
            sum += c - '0';
        return sum;
    }
}
Please enter a number: 19
Dosod: 20
Please enter a number: 12
Dosod: 12
Please enter a number: 37
Dosod: 40