Java:可能有损转换从long到int

时间:2017-07-01 13:51:11

标签: java

每次我尝试执行此代码时,它都会告诉我从long转换为int的有损转换。据我所知,这段代码中没有一个int。我唯一怀疑的是其中一个函数只返回一个int。如果是这样,我该如何将其转换为长?

另外,有人看到最后两行中有任何错误吗?我试图将数组转换为列表,我不确定它是否可行

是的,我知道这里还有很多其他问题,我只专注于这个问题

import java.util.List;
class SumDigPower {
public static List<Long> sumDigPow(long a, long b) {
  long solution = 0;
  long solutionCounter = 0;
  long[] solutionArray;
  long[] digitArray;
  for (long i = a; i < b; i++) { 
    String strLong = Long.toString(i);
    String[] strArray = strLong.split("");
    for (long j = 0; j < strArray.length; j++) {
      digitArray[j] = Long.parseLong(strArray[j]);
    } for (long k = 0; k < digitArray.length; k++) {
      solution += Math.pow((k+1), digitArray[k]);
    } if (solution == i) {
      solutionArray[solutionCounter] = solution;
      solution = 0;
      solutionCounter += 1;
    }
  } List<Long> solutionList = Arrays.asList(solutionArray);
  return solutionList;
}
}

2 个答案:

答案 0 :(得分:1)

有效数组索引为int(不是long)。你不能在没有初始化的情况下使用数组(并且你需要知道长度,因为它已经用Java数组修复)。接下来,您需要一个List<Long>并尝试构建一个数组(再次,您不能这样做 - 只需使用List<Long>开始 - 您可以消除solutionCounter )。像,

public static List<Long> sumDigPow(long a, long b) {
    long solution = 0;
    List<Long> al = new ArrayList<>();
    for (long i = a; i < b; i++) {
        String strLong = Long.toString(i);
        String[] strArray = strLong.split("");
        long[] digitArray = new long[strArray.length];
        for (int j = 0; j < strArray.length; j++) {
            digitArray[j] = Long.parseLong(strArray[j]);
        }
        for (int k = 0; k < digitArray.length; k++) {
            solution += Math.pow((k + 1), digitArray[k]);
        }
        if (solution == i) {
            al.add(solution);
            solution = 0;
        }
    }
    return al;
}

答案 1 :(得分:0)

您无法从长数组中选择一个值。尝试转换为int:

long myLong = 0;
int myInt = (int) i;

然后将它作为索引放在数组中:

myStringArray[myInt]