我试图在数组中找到一个值,我确定这个值只存在一次,所以我试图找到该值并返回存储它的数组的索引,如果没有找到返回-1 这就是我想要做的事情:
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;
}
当我运行它时,即使我知道数组中存在该值,也没有显示任何内容。我调试了然后我发现Key变量没有我键入的值。那里有什么不对吗?
答案 0 :(得分:7)
您的数组正在存储Integer,这是一个java对象,用于测试需要调用Object.equals方法而不是==
的Java对象的相等性。
在您的情况下,我建议您使用int
而不是Integer
的数组,内存更轻,支持==
并且您没有使用{{Integer
的任何功能1}}所以你在这里不需要它们。
答案 1 :(得分:4)
在使用operator==
检查时,您正在检查身份(两个引用是否指向完全相同的对象?)而不是相等(它们是否相等)彼此?)。
您应该使用int
s(而不是Integer
s)或更改条件以使用equals()
方法。
答案 2 :(得分:2)
Integer是一个对象,因此您必须使用equals方法。尝试数字[index] .equals(key)。
答案 3 :(得分:1)
java.util.Arrays.asList(accs).indexOf(key)
或
org.apache.commons.lang.ArrayUtils.indexOf(accs, key);
答案 4 :(得分:0)
确保您了解对象相等性和对象标识之间的区别。您正在使用“==”来检查您的值是否在数组中 - 这会检查身份,而不是相等。请改用numbers[index].equals(key)
。
答案 5 :(得分:0)
在搜索之前,您需要为每个元素设置值。 下面的语句只声明带有value = null的20元素的新数组 static Integer [] accs = new Integer [20]; 替换为: static Integer [] accs = new Integer [] {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; 并重新测试。
此致
答案 6 :(得分:0)
以这种方式初始化数组static Integer[] accs = {3,5,15,6,4,32,9};
并在main中调用search()
方法。你的功能正常工作。
答案 7 :(得分:0)
使用以下命令捕获用户输入 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));