Java - 在给定值的情况下查找数组的元素?

时间:2015-12-09 23:39:41

标签: java arrays elements

在我的Java程序中,我正在模拟一个停车库。假设有一个随机数的汽车,假设是7.汽车编号1用值1表示,汽车2用值2表示,依此类推。每个汽车价值随机存储在代表停车场的阵列中。阵列的每个元素代表一个停车位。我正在尝试编写一个执行以下操作的方法:假设您想知道4号车位所在的停车位。值“4”传递给方法,该方法将在数组中搜索该值。我希望方法告诉我数组中哪个元素的值为“4”。这是我到目前为止的方法:

public int findBayOfCar(int carNumber)
{
    int index = -1;
    boolean found = false;

    while (!found)
    {
        if (cars[index] == carNumber)
        {

        }
        index++;
    }

}

显然它不会起作用,因为Java无法将car [index](Car类型的数组)与carNumber(一个int)进行比较。我该怎么做才能纠正这个问题?

4 个答案:

答案 0 :(得分:3)

这么小的代码中有很多错误。

  1. while (!found)这意味着您将继续搜索,直到找到某些内容,但如果我们搜索的元素不在数组上会发生什么?由于我们将尝试访问不存在的阵列单元,因此我们将获得臭名昭着的 ArrayOutOfBoundsException 。解决方案:for (int i = 0; i < cars.length; i++)以便从开始运行直到数组的大小。
  2. 发现,现在是什么?在找到您要找的汽车时没有停下来,现在我们将其设为found = true并停止搜索。
  3. <强>代码:

    public int findBayOfCar(int carNumber)
    {
        int foundAtBay = -1;
        for (int i = 0; i < cars.length; i++)
        {
            if (cars[i].number == carNumber) // or whatever .Number or .number which identify the car number.
            {
                foundAtBay = i;
                break;
            }
        }
        return foundAtBay;
    }
    

答案 1 :(得分:1)

您应该引用您的Car对象来获取其编号:

public static int findBayOfCar(int carNumber, Car[] cars)
{
  int index = -1;
  boolean found = false;

  while (!found && index < cars.length -1)
  {
    index++;
    if (cars[index].getNumber() == carNumber)
    {
       found = true;
    }  
  }
  return found ? index : -1;
}

答案 2 :(得分:1)

一个简单而强力的解决方案是LinearSearch

for(int i=0; i < your_array_length; i++){
    if(cars[i] == carNumber){
      return i;
    }
}
return -1; //-1 represents that the car was not parked in any of the slots

答案 3 :(得分:0)

如果你的车只是数字,那么:

int[] cars = new int[] { 1, 2, 3 } ;
public int indexOf(int carNumber) {
    return Arrays.binarySearch(cars, carNumber);
}

如果你的车是字符串,那么

String[] cars = new String[] { "car1", "car2", "car2" };
public int indexOf(int carNumber) {
    return Arrays.asList(cars).indexOf("car" + carNumber);
}

如果你的车是物体,那么

Car[] cars = new Car[] { new Car(), new Car(), new Car()  };
public Car indexOf(int carNumber) {
     return IntStream.range(0, cars.length).filter(c -> carNumber == cars[c].number).mapToObj(i -> cars[i]).findFirst().orElse(null);
}

或者,使用普通循环:

Car[] cars = new Car[] { new Car(), new Car(), new Car() };
public int indexOf(int carNumber) {
    for (int i = 0; i < cars.length; i++) {
        if (cars[i].number == carNumber) {
            return i;
        }
    }
    return -1;
}