我正在尝试创建一个程序,用于确定是否在数组中找到用户输入。
然后我输出数组中整数的位置。
看起来我的程序并没有从我的主程中提取任何东西。
以下是该计划:
public static int returnIndex(int[ ] haystack, int needle) {
for (int n : haystack) {
if (haystack[needle] == n ) {
} else {
System.out.println("Element not found in array");
System.exit(0);
}
}
return needle;
}
public static void main(String[] args) {
int[] haystack = { 4,5,6,7,12,13,15,16,22,66,99,643 };
Scanner sc = new Scanner(System.in);
System.out.println("Enter a number in the array: ");
int needle = sc.nextInt();
}
}
答案 0 :(得分:1)
你循环错误的方式。
使用count for loop
for (int index=0; index haystack.length; index++) {
...
,而不是!然后,您将haystack[index]
与needle
进行比较,并在匹配项上返回index
。
请注意:实际上,使用"为每个"你在问题中做的循环风格是一种很好的做法 - 应该是"首先"写下循环来迭代数组/集合的项目时的想法。但有时你只需要知道index
;然后计算是正确的选择。
答案 1 :(得分:0)
您应该循环遍历数组的索引,而不是值。一旦找到一个返回你想要使用的值的索引,你就可以拉它。但是,如果对数组进行排序,则可以使用算法简化该数组。我能想到的最简单的方法是在数组的中途检查数值是否更大,更小或相同,然后在该数据与下一个更大或更小的数据之间减半,直到结果为止。你找到答案了。
答案 2 :(得分:0)
要像这样解决这个问题,你需要跟踪索引并将每个值与这个 needle
进行比较(如果不在数组中则返回-1
):< / p>
public static int returnIndex(int[] haystack, int needle) {
int index = 0;
for (int n : haystack) {
if(n == needle) return index;
index++;
}
return -1;
}
如果你想使用索引接近它,那么它将如下所示:
public static int returnIndex(int[] haystack, int needle) {
for (int n = 0; n < haystack.length; n++) {
if (haystack[n] == needle) {
return n;
}
}
return -1;
}
你的for循环正在迭代haystack
的值,而不是索引,你使用haystack[needle]
正在检查索引needle
的值,这可能是潜在的{{ 1}}。此外,如果indexoutofbounds
不在阵列的第一个位置,则立即退出程序。
needle