每次我尝试执行此代码时,它都会告诉我从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;
}
}
答案 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]