谷歌编码挑战没有检测到int

时间:2015-06-05 19:42:38

标签: java casting

这个程序的目的是得到一个很长的变量,如" 1256"并逐位添加它们,直到你留下一个数字整数。所以1 + 2 + 5 + 6 = 141 + 4 = 5,返回5

当我尝试验证它时,它会给我错误:

  

使用com.google.challenges.Answer

中找不到的参数(int)回答公共静态方法

有人可以帮我理解这个错误的含义以及如何解决它吗?

package​ ​com.google.challenges;​ ​

public​ ​class​ ​Answer​ ​{​ ​​ ​​ ​
​ ​​ ​​ ​​ ​public​ ​static​ ​int​ ​answer(long​ ​x)​ ​{​ ​

​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​long​ ​placeholder​ ​=​ ​0,​ ​sum​ ​=​ ​0;
​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​
​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​for(int​ ​i​ ​=​ ​1;​ ​x​ ​>​ ​0​ ​&&​ ​sum​ ​<​ ​10;​ ​i++){
            // if x = 1256 then placeholder = 1256 % 10 = 6
​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​placeholder​ ​=​ ​(long)(x​ ​%​ ​Math.pow(10,i));
​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ //1256 - 6 = 1250
            ​x​ ​-=​ ​placeholder;
​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​sum​ ​+=​ ​placeholder​ ​/​ ​(long)(Math.pow(10,​ ​i​ ​-​ ​1));
​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​if​ ​(sum​ ​>​ ​10​ ​&&​ ​x​ ​==​ ​0){
​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​i​ ​=​ ​1;
​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​x​ ​=​ ​sum;
​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​sum​ ​=​ ​0;
​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​}
​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​}
​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​return((int)sum);
​ ​​ ​​ ​​ ​}
}

3 个答案:

答案 0 :(得分:1)

它告诉你它希望找到一个带有int参数的方法,但是你已声明你的方法采用long。虽然您可以将int传递给期望long的方法,但签名方法不同,因此找不到预期的签名。

public​ ​static​ ​int​ ​answer(long​ ​x)

应该是

public​ ​static​ ​int​ ​answer(int​ ​x)

编辑:根据评论中的讨论,这看起来像是测试用例中的错误,因为问题明确说明long并且答案是预先填充了long参数。

答案 1 :(得分:0)

  

使用com.google.challenges.Answer

中找不到的参数(int)的公共静态方法回答

尝试使用int作为方法参数。解决方案处理期望该方法需要int参数。

正确的方法头:

public​ ​static​ ​int​ ​answer(int​ ​x)

答案 2 :(得分:0)

对于那些好奇的人,这是我用过的所有测试用例的答案。

package com.google.challenges; 

public class Answer {   
    public static int answer(int x) { 

        int placeholder = 0, sum = 0;

        for(int i = 1; x > 0 ; i++){
            placeholder = x % (int)(Math.pow(10,i));
            x -= placeholder;
            sum += placeholder / (int)(Math.pow(10, i - 1));
            if (sum > 10 && x == 0){
                i = 0;
                x = sum;
                sum = 0;
                continue;
            }
            if (sum < 10 && x == 0){
            break;
            }
        }
    return((int)sum);
    }
}