我不断收到编译时错误,为什么?

时间:2013-02-08 05:15:20

标签: java

代码应该编写一个Java程序,它从标准输入中读取正整数列表,并确定是否可以将其中任何一个写为其他输入整数的子集之和。提示:搜索加起来为某个值的整数子集最好以递归方式完成。但是,请避免生成所有子集。当您使用sum x搜索子集时,不必考虑大于x的输入整数。如果y≤x是其他输入整数之一,则对总和为x的子集的搜索可以分为在包含y的子集和不包含y的子集之间进行搜索。

import java.util.Scanner;
import java.util.Arrays;

public class jodiejo {

    public static int[] integers = new int[1000];

    public static void main(String args[]) {

        Scanner scan = new Scanner(System.in);

        int n = 0;
        integers = new int[1000];

        while (scan.hasNextInt()) {

            integers[n] = scan.nextInt();
            n++;

        }



        for (int i = 0; i < n; i++) {

            searchSum(integers[i], i);
        }

        System.out.print("NO");

        Arrays.sort(integers, 0, n);
    }

    public static void searchSum(int number, int position) {
        for (int i = position - 1; i >= 0; i--) {
            if (number - integers[i] == 0) {
                System.out.print("YES");
                System.exit(0);
            } else if (number - integers[i] > 0) {
                searchSum(number - integers[i], i);
            } else if (number - integers[i] < 0) {
                return
            }
        }
    }
}

5 个答案:

答案 0 :(得分:1)

我认为错误必须在这里:

else if(number - integers[i] < 0)
{
return //this is the problem
}
}

所以只需在; return之后放置一个分号return;

为什么要在main方法中第二次初始化integers数组:
integers = new int[1000];
这是多余的。

答案 1 :(得分:1)

在最后一次返回后你需要一个分号,即:

 public static void searchSum(int number, int position) {
        for (int i = position - 1; i >= 0; i--) {
            if (number - integers[i] == 0) {
                System.out.print("YES");
                System.exit(0);
            } else if (number - integers[i] > 0) {
                searchSum(number - integers[i], i);
            } else if (number - integers[i] < 0) {
                return;
            }
        }
    }

答案 2 :(得分:1)

你的问题在这里,你在return陈述之后没有分号:

else if(number - integers[i] < 0)
{
return  //No Semicolon
}

答案 3 :(得分:1)

排队:49

而不是returnreturn; - 缺少;

答案 4 :(得分:0)

import java.util.Scanner;
import java.util.Arrays;

public class jodiejo
{

    public static int[] integers = new int[1000];

    public static void main(String args[])
    {

        Scanner scan = new Scanner(System.in);

        int n = 0;
        integers = new int[1000];

        while (scan.hasNextInt())
        {

            integers[n] = scan.nextInt();
            n++;

        }



        for (int i = 0; i < n; i++)
        {

            searchSum(integers[i], i);
        }

        System.out.print("NO");

        Arrays.sort(integers, 0, n);
    }

    public static void searchSum(int number,
                                 int position)
    {
        for (int i = position - 1; i >= 0; i--)
        {
            if (number - integers[i] == 0)
            {
                System.out.print("YES");
                System.exit(0);
            }
            else if (number - integers[i] > 0)
            {
                searchSum(number - integers[i], i);
            }
            else if (number - integers[i] < 0)
            {
                return;
            }
        }
    }
}