【问题标题】:Can't do Binary Search on Array in Java [duplicate]无法在Java中对数组进行二进制搜索[重复]
【发布时间】:2017-06-29 12:09:47
【问题描述】:

目标

尝试对数字数组的值进行二分搜索。然后返回索引,改成0。

到目前为止的代码:

import java.util.*;

public class Theater {

    static int [][] seats = {
        {10,10,10,10},
        {20,20,20,20},
        {30,30,30,30},
        {40,40,40,40}
        };

public static void main(String [] args)
{

    //These two for loops print the whole array.
for ( int i=0; i<4;i++)
{
    for (int j=0; j<4; j++)
    {
        System.out.print(seats[i][j] + " ");
    }
    System.out.println("");
}


   // entering the value to be searched
    Scanner ticketReq = new Scanner(System.in);
    System.out.println("Enter the ticket price you want: ");
    int ticketVal = ticketReq.nextInt();

   int indexOfTicket = Arrays.binarySearch(seats, ticketVal);

   if (indexOfTicket > 0) {
       System.out.println("The index of element 12 is : " + indexOfTicket + ". It is purchased!");
   }
   else {
       System.out.println("Tickets with price " + ticketVal + " are no longer available.");
   }


}

}// Ends the static void block

我遇到的错误:

错误文本:

Exception in thread "main" java.lang.ClassCastException: [I cannot be cast to java.lang.Comparable
    at java.util.Arrays.binarySearch0(Unknown Source)
    at java.util.Arrays.binarySearch(Unknown Source)
    at Theater.main(Theater.java:31)

感谢任何帮助。是因为我有一个数组数组吗?有什么方法可以对数组数组进行二进制搜索?我真的在尝试制作一个有 4 个座位(10、20、30、40)的剧院应用程序,用户输入一个货币值,程序会根据该值选择任意数量的座位。

【问题讨论】:

  • 提供完整错误
  • 复制您的输出并将其粘贴到您的问题上,裁剪后的图像无法帮助您。
  • 已经回复here
  • 目前还不清楚“对数组数组进行二进制搜索”会是什么样子。您是否希望它像您有一个一维数组一样工作,您只需将所有行中的所有数字串在一起?如果您确实像这样将它们全部串在一起,我们是否可以保证这些数字是有序的(二进制搜索的要求)?如果是这样,最好的解决方案是自己将数组展平为一维数组并对其进行二进制搜索。你可以在谷歌上搜索“java flatten”来了解如何做到这一点。
  • Arrays.binarySearch 只接受一维数组。将席位转换为一维数组stackoverflow.com/a/5466581/6743203

标签: java


【解决方案1】:

在 java Arrays.binarySerach(arr,element) 适用于一维数组。因此您需要通过将二维数组转换为一维数组来处理您的情况,如下所示。

注意:它可能不符合您的要求,但您可以相应地考虑。

Scanner ticketReq = new Scanner(System.in);
        System.out.println("Enter the ticket price you want: ");
        int ticketVal = ticketReq.nextInt();
        int indexOfTicket =-1;
        for(int i=0;i<seats.length;i++){
            indexOfTicket = Arrays.binarySearch(seats[i], ticketVal);
        }

       if (indexOfTicket > 0) {
           System.out.println("The index of element 12 is : " + indexOfTicket + ". It is purchased!");
       }
       else {
           System.out.println("Tickets with price " + ticketVal + " are no longer available.");
       }

【讨论】:

    【解决方案2】:

    在 Java 中,二维数组实际上是数组的一维数组。因此,您的搜索尝试在具有整数数组类型元素的数组中查找整数,从而导致类型错误,因为整数不是整数数组。

    您还不清楚您期望会发生什么。一个整数在二维数组中的位置如何用一个索引表示?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-04
      • 2013-09-29
      • 2021-05-16
      • 1970-01-01
      相关资源
      最近更新 更多