我正在尝试解决这个错误。下面的代码是丑陋数字的实现。
/* Function to get the nth ugly number*/
long getNthUglyNo(int n) {
// code here
long[] ugly=new long[n];
long next_2=2,next_3=3,next_5=5;
long i1=0,i2=0,i3=0;
long next=1;
ugly[0]=1;
for(int i=1;i<n;i++)
{
next=Math.min(next_2,Math.min(next_3,next_5));
ugly[i]=next;
if(next==next_2)
{
i1++;
next_2=ugly[i1]*2;
}
if(next==next_3)
{
i2++;
next_3=ugly[i2]*3;
}
if(next==next_5)
{
i3++;
next_5=ugly[i3]*5;
}
}
return next;
}
}
我收到的错误--
next_2=ugly[i1]*2;
^
java:41:错误:不兼容类型:从long到int可能有损转换
next_3=ugly[i2]*3;
^
java:46:错误:不兼容类型:从long到int可能有损转换
next_5=ugly[i3]*5;
我无法解决这个问题。我不知道我的代码有什么问题。
在Java数组中,它们需要一个整数作为数组位置来获取值。出现这些错误是因为i1
、i2
和i3
变量是一个Long
数据类型。要消除这些错误,必须将变量转换为整数类型。
您可以使用:
int position = Integer.parseInt(i1);
next_2 = ugly[position]*2;
数组索引需要int。您正在传递int变量i1、i2等。只需将Array更改为ArrayList。它无需从long手动转换int即可工作。