所以我的程序功能齐全。我只是想让它使用文本文件的二进制搜索并确定它可以找到的最高索引号。如果找不到它,它会找到下一个最大值并使其成为负数。我的问题是现在的数组大小是11.这是因为它是我正在使用的文本文件中有多少整数。如果我不知道整数的数量怎么办?我理解人们建议制作一份清单,但不接受重复吗?为什么这部分代码:
while(scanner.hasNextInt()){
arr[i++] = scanner.nextInt();}
scanner.close();
根据需要不更改我的数组大小?
import java.util.Scanner;
import java.io.File;
import java.io.IOException;
public class BinarySearch {
public static int binarysearch(int[] arr, int key)
{
int lo = 0, hi = arr.length - 1;
{
while (lo < hi)
{
int mid = (lo + hi) / 2;
if (arr[mid] <= key)
lo = mid + 1;
if (arr[mid] > key)
hi = mid;
}
if (arr[lo] == key) {
return lo;
}
else if ((arr[lo] != key) && (arr[lo-1] == key)){
return lo - 1;
}
else{
return (binarysearch( arr,(key-1))* - 1);
}
}
}
public static void main(String[] args) throws IOException{ {
int k = Integer.parseInt(args[1]);
Scanner scanner = new Scanner(new File(args[0]));
int[] arr = new int[11];
int i = 0;
while(scanner.hasNextInt()){
arr[i++] = scanner.nextInt();}
scanner.close();
System.out.println(binarysearch(arr, k));
}}
}
List
List
是经常使用的Collection
而不是数组。具体来说,ArrayList
的List
实现由内部数组支持,并根据需要自动处理重新调整大小或重新构建内部数组。
List< Integer > integers = new ArrayList<>() ;
integers.add( 7 ) ;
integers.add( 11 ) ;
要找到最高的,请使用Collections
实用程序类进行排序。
Collections.sort( integers ) ;
对于逆序:
Collections.reverse( integers ) ;
如果您大致了解列表可能最终需要的大小,则可以在实例化ArrayList
时指定初始容量。设置初始容量有助于使ArrayList
运行更高效,但您不必担心这一点。
int initialCapacity = ( myNumberOfThis * myNumberOfThat ) + 1 ; // Whatever clues you have about possible size.
List< Integer > integers = new ArrayList<>( initialCapacity ) ;
如果要消除重复项,请改用Set
。搜索Stack Overflow已经被覆盖了很多次。