Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.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 查找代码不支持的测试用例';行不通_Java - Fatal编程技术网

Java 查找代码不支持的测试用例';行不通

Java 查找代码不支持的测试用例';行不通,java,Java,我在CodeChef中提交了一个代码,但它给出了错误的答案,即使它是正确的 有人能帮我确认一下吗。 我尝试了这么多的输入并手动计算,它们都是正确的,所以他们给了我错误的答案。 那么,有谁能找到该代码给出错误输出的测试用例吗? 这是问题的定义。 import java.util.Scanner; 导入java.lang.Math; 类Codechef{ 静态整数获取(整数n,整数i,整数位数) { INTP; p=(int)数学功率(10,i-1); n=n/p; 返回n%10; } 静态布尔校

我在CodeChef中提交了一个代码,但它给出了错误的答案,即使它是正确的 有人能帮我确认一下吗。 我尝试了这么多的输入并手动计算,它们都是正确的,所以他们给了我错误的答案。 那么,有谁能找到该代码给出错误输出的测试用例吗?

这是问题的定义。

import java.util.Scanner;
导入java.lang.Math;
类Codechef{
静态整数获取(整数n,整数i,整数位数)
{
INTP;
p=(int)数学功率(10,i-1);
n=n/p;
返回n%10;
}
静态布尔校验(int n)
{
整数位数;
数字=(int)(数学log10(n)+1);
int a=0,b=0,i,j,p;
整数和=0;
对于(i=1,j=digit-1;对于89(或98),您的代码返回“NONE”,尽管只经过24个步骤就得到了答案8813200023188

另一种情况是,对于177和276,您应该得到8836886388,而不是零

我没有调试你的代码,我只是写了一个程序,做同样的工作,并将我的程序给出的输出与你的程序给出的输出进行比较。既然你刚刚请求了一个测试用例,那就足够了:)我的感觉是你溢出了…一个int不够大,无法在所有情况下保存答案

快乐的猎狗

使用我的代码编辑(根据要求)。 我没有更改您的代码,只是将您的逻辑提取到一个getResult(integer)方法中,这样我就可以绕过对输入的扫描,只返回一个字符串作为结果。它会打印出我们版本之间的所有差异。我使用BigInteger作为保存结果的类型

public class Main {

public static void main(String[] args) {
    Main m = new Main();
    for (int i=10; i < 1000; i++) {
        String myResult = null;
        String hisResult = null;
        try {
        myResult = m.getResultAsString(i);
        } catch (Exception e){
        System.out.println("Your code threw an exception for " + i);
        }
        try{
            hisResult = Codechef.getResult(i);
        } catch (Exception e){
            System.out.println("His code threw an exception for " + i);
        }
        if (myResult != null && hisResult != null && ! myResult.equals(hisResult)) {
            System.out.println("For " + i + "  you have " + myResult + " but he has " + hisResult);
        }
    }
}

public String getResultAsString(int inputNumber) {
    BigInteger res = getResultAsBigInteger(new BigInteger(""+inputNumber));
    if (res != null) {
        return res.toString();
    } else {
        return "NONE";
    }

}

public BigInteger getResultAsBigInteger(BigInteger inputNumber) {
    int numberOfSteps = 0;
    BigInteger currentValue = inputNumber;
    while (numberOfSteps < 101 && ! isPalindrome(currentValue)) {
        numberOfSteps++;
        currentValue = currentValue.add(reverseDigits(currentValue));
    }
    return numberOfSteps < 101 ? currentValue : null;
}

public boolean isPalindrome(BigInteger number) {
    return number.equals(reverseDigits(number));
}

public BigInteger reverseDigits(BigInteger input) {
    String inputString = input.toString();
    String output = "";
    for (int i = inputString.length() - 1; i >= 0; i--)
    {
        output += inputString.charAt(i);
    }
    return new BigInteger(output);
}
公共类主{
公共静态void main(字符串[]args){
Main m=新的Main();
对于(int i=10;i<1000;i++){
字符串myResult=null;
字符串hisResult=null;
试一试{
myResult=m.getResultAsString(i);
}捕获(例外e){
System.out.println(“您的代码对“+i”抛出了一个异常);
}
试一试{
hisResult=Codechef.getResult(i);
}捕获(例外e){
System.out.println(“他的代码抛出了“+i”的异常);
}
如果(myResult!=null&&hisResult!=null&&myResult.equals(hisResult)){
System.out.println(“对于“+i+”,您有“+myResult+”,但他有“+hisResult”);
}
}
}
公共字符串getResultAsString(int inputNumber){
BigInteger res=getResultAsBigInteger(新的BigInteger(“+inputNumber));
如果(res!=null){
return res.toString();
}否则{
返回“无”;
}
}
公共BigInteger GetResultsBigInteger(BigInteger输入编号){
int numberOfSteps=0;
BigInteger currentValue=输入编号;
while(numberOfSteps<101&!isPalindrome(currentValue)){
numberOfSteps++;
currentValue=currentValue.add(reverseDigits(currentValue));
}
返回numberOfSteps<101?当前值:空;
}
公共布尔值isAlindrome(大整数){
返回数字。等于(反向数字);
}
公共BigInteger反向Digits(BigInteger输入){
String inputString=input.toString();
字符串输出=”;
对于(int i=inputString.length()-1;i>=0;i--)
{
输出+=输入字符串.charAt(i);
}
返回新的BigInteger(输出);
}

}您的代码中存在溢出错误。 对于输入89,它没有像@Yves V.说的那样工作
建议使用lang的BigInteger类。匹配它将有助于消除此溢出错误。

不,它可以工作。请稍等,我将向您显示输出。它为我打印
99
。但根据描述,它不应该。哦,亲爱的,读取最后一行。如果给定的数字本身是回文的,请不要执行操作。希望您得到它或读取它再次。你是对的…:)我会再找一个。这是一个很好的帖子,但我最后还是得到了-10票,我明白这并不清楚,但希望这篇清晰的帖子我也得到了一些投票,并回答:)我应该使用哪种数据类型。你的ans当然可以接受,但如果你发布你的解决方案,你会很好。我正在等待标记为可以接受:).
public class Main {

public static void main(String[] args) {
    Main m = new Main();
    for (int i=10; i < 1000; i++) {
        String myResult = null;
        String hisResult = null;
        try {
        myResult = m.getResultAsString(i);
        } catch (Exception e){
        System.out.println("Your code threw an exception for " + i);
        }
        try{
            hisResult = Codechef.getResult(i);
        } catch (Exception e){
            System.out.println("His code threw an exception for " + i);
        }
        if (myResult != null && hisResult != null && ! myResult.equals(hisResult)) {
            System.out.println("For " + i + "  you have " + myResult + " but he has " + hisResult);
        }
    }
}

public String getResultAsString(int inputNumber) {
    BigInteger res = getResultAsBigInteger(new BigInteger(""+inputNumber));
    if (res != null) {
        return res.toString();
    } else {
        return "NONE";
    }

}

public BigInteger getResultAsBigInteger(BigInteger inputNumber) {
    int numberOfSteps = 0;
    BigInteger currentValue = inputNumber;
    while (numberOfSteps < 101 && ! isPalindrome(currentValue)) {
        numberOfSteps++;
        currentValue = currentValue.add(reverseDigits(currentValue));
    }
    return numberOfSteps < 101 ? currentValue : null;
}

public boolean isPalindrome(BigInteger number) {
    return number.equals(reverseDigits(number));
}

public BigInteger reverseDigits(BigInteger input) {
    String inputString = input.toString();
    String output = "";
    for (int i = inputString.length() - 1; i >= 0; i--)
    {
        output += inputString.charAt(i);
    }
    return new BigInteger(output);
}