Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.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_Recursion - Fatal编程技术网

需要帮助来发现我的java代码中的缺陷吗

需要帮助来发现我的java代码中的缺陷吗,java,recursion,Java,Recursion,我正在完成一项学校作业,我有以下问题: 我得到了一些木棍(长度不同或相似),我的任务是找出形成给定长度的较长木棍所需的最小木棍数量 比如说,, 给定长度为1,1,1,1,1,3的6根棍棒,以形成长度为5的较长棍棒,输出将为3。 注意:棍棒不能重复使用 但是,如果无法形成给定的长度,则输出-1。 例如, 给定3根长度为1,2,6的木棍,要形成长度为5的较长木棍,输出将为-1 我有以下代码,它们通过了所有公共测试用例。然而,我没有通过私人测试案例,我无法找出我的错误 这是我的密码: import j

我正在完成一项学校作业,我有以下问题:

我得到了一些木棍(长度不同或相似),我的任务是找出形成给定长度的较长木棍所需的最小木棍数量

比如说,, 给定长度为1,1,1,1,1,3的6根棍棒,以形成长度为5的较长棍棒,输出将为3。 注意:棍棒不能重复使用

但是,如果无法形成给定的长度,则输出-1。 例如, 给定3根长度为1,2,6的木棍,要形成长度为5的较长木棍,输出将为-1

我有以下代码,它们通过了所有公共测试用例。然而,我没有通过私人测试案例,我无法找出我的错误

这是我的密码:

import java.util.*;

class Result {
    static int min = 100000;

    public static int solve(int pos, int currSum, int len, int numStk) {
        // implementation
        for (int i=1; i<=Stick.data.length - pos; i++){
            if (currSum > len){
                continue;
            }

            else if (currSum < len){
                if (pos+i >= Stick.data.length){
                    break;
                }
                else{
                    solve(pos+i,currSum+Stick.data[pos+i], len, numStk+1);
                }
            }

            else if (currSum == len){
                if (numStk < min){
                    min = numStk;
                }
            }
        }

        return min;
    }
}

class Stick {
    static int[] data;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int sticks = sc.nextInt();
        data = new int[sticks];
        int len = sc.nextInt(); 
        for (int i=0; i<sticks; i++){
            data[i] = sc.nextInt();
        }

        for (int i=0; i<sticks; i++){
            Result.solve(i,0,len,1);
        }

        if (Result.min == 100000){
            System.out.println(-1);
        } else {
            System.out.println(Result.min-1);  
        }
    }
}
import java.util.*;
班级成绩{
静态整数最小值=100000;
公共静态int-solve(int-pos、int-currSum、int-len、int-numStk){
//实施
for(int i=1;i len){
继续;
}
否则如果(当前金额=斗杆数据长度){
打破
}
否则{
求解(pos+i,currSum+Stick.data[pos+i],len,numStk+1);
}
}
否则如果(currSum==len){
如果(numStk对于(inti=0;i我注意到的关于代码的事情:

  • 大体上说

    Result.solve(i,0,len,1);

    假设使用了条i(因此参数列表中的numsticks=1
  • ),但currSum为0。这不应该是
    数据[i]

  • 更好的代码质量:对
    currSum>len
    currSum==
    len的检查可以在for循环之外完成,这更有效


  • 请提供所需的结果、实际结果以及调试代码所采取的步骤。什么是“私有测试用例”?“但是,我没有通过私有测试用例…”——这些将是什么?建议阅读:@azurefrog他们是私有的。谢谢!这是一个起始货币的问题。