我正在创建一个程序,允许用户输入3个数字,这些数字将在排序数组中找到,索引将使用二进制搜索返回。
我已经对数组进行了排序,并对一个用户输入进行了二进制搜索。如何实现查找三个数字?开始数字、中间数字和结束数字。
我提供了代码、输入和输出。
代码:
import java.util.Scanner;
import java.util.Random;
import java.util.Arrays;
public class App {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("\n" + " ");
// generating n, 0 < n < 10000 and 0 < length < 100
Random rand = new Random();
int[] arr = new int[100];
for (int z = 0; z < arr.length; z++) {
arr[z] = rand.nextInt(10000);
}
// sorting
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
// binary search
//pointers
int begin = 0;
int last = arr.length - 1;
int start = 0;
int x = scanner.nextInt();
//loop
while (begin <= last) {
start = (begin + last) / 2;
if (arr[start] < x) {
begin = start + 1;
}
else if (arr[start] > x) {
last = start - 1;
}
else {
break;
}
}
System.out.println("Element found at " + start);
}
}
我想让它尽可能简单。谢谢。
1条答案
按热度按时间ecbunoof1#
你应该提取
binarySearch
将函数转换为单独的方法,并在循环中调用此方法。如果在数组中找到确切的元素,或者检测到插入点,也可以打印。
测试循环:用户输入数组被强制排序,
start
在以下每次迭代中更新:样本输出:
基于流的解决方案更简洁:
使用随机整数流
Random::ints
使用IntStream.generate
通过方法引用获取用户输入Scanner::nextInt
使用排序流sorted
方法需要使用一个1元素数组来存储
start
把它传给binarySearch
方法。