使用数组列表获取错误的输出

时间:2019-05-11 12:48:53

标签: java string arraylist

面临的挑战是找到一个数字,该数字的单个数字乘以连续增加的幂并相加,等于初始数字。

例如:取89,将其分为8和9,然后8 ^ 1 + 9 ^ 2 = 89

1,2,3,4,,,,,,,,,,,,,,,,,,,NO
1,4,7,8,9,10,11,13,,,,,,,,NO
1,2,,,,,,,,,,,,,,,,,,,,,,,NO
1,1,2,4,5,6,7,8,9,10,11,12NO
abc,def,ghi,jkl,,,,,,,,,,,NO
a,b,,,,,,,,,,,,,,,,,,,,,,,NO

使用1和100(范围)的输入,输出应该是[1、2、3、4、5、6、7、8、9、89],但是我得到了所有数字[1、2 ... 100]。

我是最近才开始学习Java的,似乎无法在代码中找到问题。任何提示将不胜感激。

3 个答案:

答案 0 :(得分:6)

您可以使用以下内容:

static List<Integer> sumDigPow(int a, int b) {
    List<Integer> eureka = new ArrayList<Integer>(0);
    String num;
    int sum = 0, multi;

    for (int i = a; i <= b; i++) {
        num = String.valueOf(i);
        for (int j = 0; j < num.length(); j++) {
            multi = (int) Math.pow(Character.getNumericValue(num.charAt(j)), j + 1);
            sum += multi;
        }

        if (sum == i) {
            eureka.add(i);
        }
        sum = 0;
    }
    return eureka;
}

说明:

  1. 您没有检查数字的第二位数字。
  2. 环绕 String num的每个字符。
  3. 不需要digits数组列表,您只需使用char的数字值即可。

答案 1 :(得分:4)

问题出在那几行:

num = String.valueOf(i);
digits.add(num);

您没有将数字分成数字。您只是将您的整数放入digits列表中。看这段代码:

static List<Integer> sumDigPow(int a, int b) {
        List<Integer> eureka = new ArrayList<Integer>();
        List<String> digits;
        String num;
        int sum = 0, multi;

        for (int i = a; i <= b; i++) {
            num = String.valueOf(i);
            digits = Arrays.asList(num.split(""));

            for (int j = 0; j < digits.size(); j++) {
                multi = (int) Math.pow(Integer.parseInt(digits.get(j)), j + 1);
                sum += multi;
            }

            if (sum == i) eureka.add(i);

            sum = 0;
        }

        return eureka;
    }

我只是使用Arrays.asList(num.split(""))将您的字符串号拆分为数字。它为a=1b=100输出列表:

1
2
3
4
5
6
7
8
9
89

答案 2 :(得分:4)

使用char[]将数字分成一个字符数组(只是将整个数字作为单个字符串添加到列表中,而不是单个数字):< / p>

...
    char[] digits;
...
    digits = String.valueOf(i).toCharArray();

然后,如果您从每个'0'位中减去char,则会自动获得该位的实际int值,而不必在String上调用Integer.parseInt方法,或者任何其他解析方法:

    (int)Math.pow(digits[j] - '0', j + 1);

完整代码如下:

static List<Integer> sumDigPow(int a, int b) {
    List<Integer> eureka = new ArrayList<Integer>();
    int sum = 0;
    char[] digits;

    for (int i = a; i <= b; i++) {
        digits = String.valueOf(i).toCharArray();
        for (int j = 0; j < num.length(); j++) 
            sum += (int)Math.pow(digits[j] - '0', j + 1);

        if (sum == i) eureka.add(i);
        sum = 0;
    }
    return eureka;
}