如果在数组中找到值,则返回Java索引
我试图在数组中找到一个值,我确信这个值只存在一次,所以我试图找到这个值并返回存储它的数组的索引,如果没有找到,返回-1 这就是我想做的:如果在数组中找到值,则返回Java索引,java,arrays,search,Java,Arrays,Search,我试图在数组中找到一个值,我确信这个值只存在一次,所以我试图找到这个值并返回存储它的数组的索引,如果没有找到,返回-1 这就是我想做的: static Integer[] accs = new Integer[20]; public static int search() { Integer[] numbers; numbers = accs; Integer key; Scanner sc = new Scanner(S
static Integer[] accs = new Integer[20];
public static int search()
{
Integer[] numbers;
numbers = accs;
Integer key;
Scanner sc = new Scanner(System.in);
System.out.println("Enter the Account Number:");
key = sc.nextInt();
for (Integer index = 0; index < numbers.length; index++)
{
if ( numbers[index] == key )
return index; //We found it!!!
}
// If we get to the end of the loop, a value has not yet
// been returned. We did not find the key in this array.
return -1;
}
即使我知道数组中存在该值,当我运行此命令时,也不会显示任何内容。我进行了调试,然后发现键变量的值与我键入的值不符。有什么问题吗?整数是一个对象,因此必须使用equals方法。试试数字[index].equalskey。整数是一个对象,因此必须使用equals方法。尝试数字[index].equalskey.您的数组正在存储Integer,这是一个java对象,要测试java对象的相等性,您需要调用方法而不是==
在您的例子中,我建议您使用int数组而不是Integer,它在内存中更轻,支持==并且您没有使用Integer的任何功能,所以这里不需要它们。您的数组正在存储Integer,这是一个java对象,为了测试java对象的相等性,您需要调用method而不是== 在您的情况下,我建议您使用int数组而不是Integer数组,它在内存中更轻,支持==并且您没有使用Integer的任何功能,因此这里不需要它们。在使用运算符==检查时,您正在检查标识。两个引用是否指向完全相同的对象?他们之间不是平等的吗 您应该使用整数而不是整数,或者更改使用该方法的条件。当使用运算符==检查时,您正在检查标识。两个引用是否指向完全相同的对象?他们之间不是平等的吗
您应该使用整数而不是整数,或者更改使用该方法的条件。确保您理解对象相等和对象标识之间的区别。您正在使用==检查您的值是否在数组中-这将检查标识,而不是相等性。请改用数字[index].equalskey。确保您理解对象相等和对象标识之间的区别。您正在使用==检查您的值是否在数组中-这将检查标识,而不是相等性。请改用数字[index].equalskey 或 或
在搜索之前,需要为每个元素设置值。 下面的语句仅声明具有20个元素且值为null的新数组 静态整数[]accs=新整数[20]; 替换为: 静态整数[]accs=新整数[]{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; 然后重新测试
关于,在搜索之前,您需要为每个元素设置值。 下面的语句仅声明具有20个元素且值为null的新数组 静态整数[]accs=新整数[20]; 替换为: 静态整数[]accs=新整数[]{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; 然后重新测试
关于,以这种方式初始化数组静态整数[]accs={3,5,15,6,4,32,9};并在main中调用search方法。您的函数工作正常。按如下方式初始化数组静态整数[]accs={3,5,15,6,4,32,9};并在main中调用search方法。您的函数工作正常。使用以下命令捕获用户输入
BufferedReader br=新的BufferedReadernew InputStreamReaderSystem.in 使用以下命令捕获用户输入
BufferedReader br=新的BufferedReadernew InputStreamReaderSystem.in 您使用整数而不是int有什么原因吗?您在键中看到了什么?您期望得到什么?您正在使用==进行对象比较,对象比较会引用比较。您应该使用equals或simple int。只有当您的数字在整数缓存范围内时,此代码才会意外工作。请使用equals而不是==来比较整数。或者改为使用int。您正在通过引用比较整数对象。你需要使用equals这段代码正在运行这里有什么问题吗???你使用Integer而不是int有什么原因吗?您在键中看到了什么?您期望得到什么?您正在使用==进行对象比较,对象比较会引用比较。您应该使用equals或simple int。只有当您的数字在整数缓存范围内时,此代码才会意外工作。请使用equals而不是==来比较整数。或者改为使用int。您正在通过引用比较整数对象。你需要使用相同的代码。这段代码正在运行。这里有什么问题吗????
java.util.Arrays.asList(accs).indexOf(key)
org.apache.commons.lang.ArrayUtils.indexOf(accs, key);