使用Arrays.sort()和Arrays.binarySearch()获取存储在数组中的整数列表

时间:2015-05-07 08:20:38

标签: java arrays sorting binary-search

我想要做的是,获取N个整数的用户输入,然后使用Arrays.sort()对整数列表进行排序,然后执行Arrays.binarySearch()以搜索特定的整数数组。

我得到一些奇怪的输出Arrays.sort()Arrays.binarySearch()它返回true,即使对于数组中找不到的数字也是如此。

CODES

import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;
import java.util.Collection;

public class Number2 {

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    int n=0;

    System.out.print("Enter the number of integers: ");
    n = input.nextInt();

    int[] numbers = new int[n];

    for(int i=0; i<n; i++)
    {
        System.out.print("Enter integer #"+(i+1)+": ");
        numbers[i] = input.nextInt();
    }

    Arrays.sort(numbers);

    System.out.println("After sorting: "+numbers);

    System.out.println("Enter a number to search for: ");
    int num = input.nextInt();

    int index = Arrays.binarySearch(numbers, num);

    if(index > -1)
    {
        System.out.println("The value "+num+" exist in the array");
    }

    else
    {
        System.out.println("The value "+num+" exist in the array");
    }
}

}

输出:

enter image description here

任何帮助将不胜感激。感谢。

3 个答案:

答案 0 :(得分:2)

这是数组对象的toString()实现,您正在寻找Arrays#toString(),它实现为实际显示数组中的元素。

 System.out.println("After sorting: "+ Arrays.toString(numbers));

答案 1 :(得分:2)

你确定它行为不端吗?

尝试改变这一点:

else
{
    System.out.println("The value "+num+" exist in the array");
}

到这个

else
{
    System.out.println("The value "+num+" DOES NOT exist in the array");
}

答案 2 :(得分:1)

1.您应该使用Arrays.toString()打印numbers

2. Arrarys.binarySearch()返回搜索关键字的索引(如果它包含在数组中);否则,返回( - (插入点) - 1),插入点是密钥插入数组的索引。请注意,当且仅当找到密钥时,这才能保证返回值>> 0。因此,您应该更改else声明。