java测试用例代码_java-查找代码无效的测试用例

我在代码厨师中提交了一个代码,但即使是正确的也给出了错误的答案

有人可以帮我确定一下吗?

我尝试了很多输入并手动进行了计算,它们是正确的,所以为什么它们给了我错误的答案.

因此,有人可以找到此代码给出错误输出的测试案例吗?

这是问题定义.

import java.util.Scanner;

import java.lang.Math;

class Codechef {

static int get(int n,int i,int digit)

{

int p;

p=(int)Math.pow(10,i-1);

n=n/p;

return n%10;

}

static boolean check_pal(int n)

{

int digit;

digit=(int) (Math.log10(n)+1);

int a=0,b=0,i,j,p;

int sum=0;

for(i=1,j=digit-1 ; i<=digit ; i++,j-- )

{

a=get(n,i,digit);

sum+=a*Math.pow(10,j);

}

if(sum==n)

return true;

else

return false;

}

static int reverse(int n)

{

int digit;

digit=(int) (Math.log10(n)+1);

int a=0,b=0,i,j,p;

int sum=0;

for(i=1,j=digit-1 ; i<=digit ; i++,j-- )

{

a=get(n,i,digit);

sum+=a*Math.pow(10,j);

}

return n+sum;

}

public static void main(String[] args) {

try{

Scanner sc=new Scanner(System.in);

int n=sc.nextInt();

if(n<10 || n>999){

System.out.println("NONE");

return;

}

boolean c;

for(int i=1 ; i<=100 ; i++)

{

c=check_pal(n);

if(c==true)

{

System.out.println(n);

return;

}

n=reverse(n);

}

System.out.println("NONE");

}

catch(Exception e)

{

System.out.println("NONE");

}

}

}

这是另外一个输出.

为99,它给出了99,这是正确的回文.

解决方法:

对于89(或98),您的代码将返回“ NONE”,尽管您仅经过24个步骤即可得到8813200023188的答案.

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

我没有调试您的代码,我只是编写了一个执行相同操作的程序,然后将程序给出的输出与您程序给出的输出进行了比较.由于您只是请求一个测试用例,所以就足够了:)我的直觉是您溢出… 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);

}

}

标签:java

来源: https://codeday.me/bug/20191122/2060421.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值