尝试学习和练习数组但我对这个小例子有疑问。有人可以帮帮我吗?谢谢
public class Homework1{
public static void main(String[] args){
int[] anArray={ 1,2,3,4,5,6,7,8,9};
System.out.println(anArray.length);
int min=0;
int max=0;
for(int i=0; i<anArray.length; i++){
if(anArray[i].compareTo(anArray[min]) < 0)
min=i;
if(anArray[i].compareTo(anArray[max]) > 0)
max=i;
}
System.out.println(max);
System.out.println(min);
}
}
我收到此错误消息:
int cannot be dereferenced
if(anArray[i].compareTo(anArray[min]) < 0)
int cannot be dereferenced
if(anArray[i].compareTo(anArray[max]) > 0)
谢谢。
答案 0 :(得分:3)
表达式anArray[i]
的类型为int
。 int
是一种原始类型,这意味着它不是一个“真正的”对象。您不能在原始类型上调用方法(如compareTo()
)。
但是,您可以调用Integer
类型的方法,这是与int
对应的“装箱”类型。 (当您需要将它们视为对象时,拳击类型是用作基本类型包装的类型。)
只需使用常规比较运算符作为整数类型:
if (anArray[i] < anArray[min]) {
//...
}
答案 1 :(得分:2)
在Java中,int
不是对象,因此使用via运算符(&lt;,&gt;,==等)进行比较。如果你想使用compareTo,你必须使用Integer
的数组。
答案 2 :(得分:1)
要使用方法compareTo()
,请将数组设为Integer
列表,而不是原始int
列表。
改变这一行
int[] anArray={1,2,3,4,5,6,7,8,9};
到这一行:
Integer[] anArray={1,2,3,4,5,6,7,8,9};
编译错误将消失。
答案 3 :(得分:1)
您可能需要专门将int转换/装入Integer才能使用compareTo。
E.g。
if (((Integer)anArray[i]).compareTo(anArray[min]) < 0)
但正如另一个答案所述,您可能只想使用标准运算符&lt;,&gt;等直接对int进行比较,而不是使用compareTo。
答案 4 :(得分:1)
int是原始类型,因此无法解除引用。只能取消引用引用类型。点(。)是解除引用运算符。您试图像对象一样处理原始int。您可以使用比较运算符,例如&lt;和&gt;和==比较原始整数。
答案 5 :(得分:1)
我认为你正试图找到最小值和最大值, 在这种情况下,anArray [min]或anArray [max]是无用的,因为你得到了min / max索引的值。 这样做的正确方法是:
if(anArray[i]>max)
max = anArray[i];
if(anArray[i]<min)
min = anArray[i];
答案 6 :(得分:1)
CompareTo不适用于Primitive类型。您可以使用比较运算符。
public class TestArray {
public static void main(String[] args) {
int[] anArray={ 1,2,3,4,5,6,7,8,9};
System.out.println(anArray.length);
int min=0;
int max=0;
for(int i=0; i<anArray.length; i++){
if(anArray[i] <(anArray[min]) )
min=i;
if(anArray[i]>(anArray[max]) )
max=i;
}
System.out.println(max);
System.out.println(min);
}
}